Configure/Install Print Agents

Installation and concept in the same document. Long and complex explanations in the overview.

Also remove install part since it belongs in installation guide - focus on admin/config

The IFS Print Agent is a stand-alone server component responsible for printing formatted business documents (operational reports) created using Report Designer layouts. The PDF documents generated by the IFS Report Formatter during the formatting step are then picked up by the Print Agent and sent for printing. This document guides you through the installation process and the configuration for the Print Agent functionality.

Contents

IFS Print Agent  overview

The IFS Print Agent is responsible for printing the pre-formatted PDF documents that are created and stored in the database by the Report Formatter. It is a standalone piece of software which runs on a local server close to the printer. When a report is printed to a logical printer using a Report Designer layout, the Report Formatter picks up the job and formats the report given the layout and configured locale. The result of the formatting step is a PDF document that is stored in the database. The Print Agent polls the print queue for PDF's to be printed at a configurable interval and when a formatted report is found it's transferred over the network. Then it will be printed on the local area network by the Print Agent to the printer defined in the configuration logical to physical printer mapping.

Print Agent functionality was designed to overcome problems with printing over a Wide Area Network (WAN). For instance, in an Extended Server installation where the IFS Report Formatter performs both formatting and printing of PDF documents, it is the Report Formatter that spools the print jobs to the printer. These printer spool streams are usually quite big and if the printer is connected to the server over a WAN the printing performance can be quite poor. The solution is to separate the printing from Report Formatter and use a Print Agent to perform printing instead. In IFS Applications 8 the Print Agent will be highly recommended and more or less be a default component in a production environment. Using a Report Formatter to handle printouts is still possible but should only be considered in demo or development environments.

To minimize the network load, especially when the printers are located on a site connected to the corporate server network through a wide are network (WAN), it's important the Print Agent is located/installed close to the printer (i.e. on the same LAN). The Print Agent should never be connected to the printers through a WAN. It's perfectly ok to have a WAN connection between the central servers (database and application server) and the Print Agent, but the printers and the Print Agent should reside on the same LAN.

IFS Print Agent can also be used to print Report Designer reports on Windows printers even if the central application server is running on Linux or Unix.

In Application 8 we support two different versions of Datalogics PDF Library, version 8.1 and version 10.0. We have kept 8.1 because there is a limitation in 10.0 regarding printing to trays/bins. If this functionality is required, use version 8.1.

Setup Print Agent

Configuration  & Installation

To begin installation you must first locate the zip file which contains the required scripts and configuration files for installing a Print Agent. The zip file comes with the Extended Server installation. See below.

  1. Locate the PrintAgent_32bit_<instance_name>.zip and  PrintAgent_64bit_<instance_name>.zip files, where  <instance_name> is the name of the Extended Server instance.

     

    Operating System Location
    Windows <root>\ifs\fndext\instance\<instance_name>
    Unix / Linux Not yet supported

    Both 32 bit and 64 bit is supported. Use the corresponding zip file. Unpack it into a folder on the same or a different machine to install the Print Agent. 

  2. Set the JAVA_HOME  variable in your environment variables.

    JAVA_HOME - path to the java installation folder. For instance C:\Program Files\Java\jre1.5.0_04. You must use java 1.5 or higher!

  3. Run the install script.  install.cmd located in the root of your recently unpacked zip file.

           PA Installer

  1. Type 1 and press enter. Now enter the node name of your new Print Agent. Try to use informative names such as including the host machine name or site to make the Print Agent easily identified.
    You can add as many nodes as you like and they can be removed later with option 2.
    Option 3 and 4 is normally not used since the required parameter are already filled in by default. It will automatically connect to the extended server you copied the zip file from.
  2. Exit the installer. You now have a new folder under <root>\agents for each node you installed and you also have new services registered for your new Print Agents
  3. Go to the folder for the Print Agent (<root>\agents\<nodename>)
    Specify the Printer mapping information in printagent_conf.xml:
    Parameter Description
    ID This is the node name added by the installer. Don't change it.
    USER/PASSWORD Credentials used by the Print agent when connecting to the extended server. It is better to locate the zip file in the extended server you want to connect then actually changing these parameters.
    URL The connection string. Do not change this. Same reason as above.
    PDFL_VERSION Which version of Datalogics PDF Library to use. Version 10.0 and 8.1 is supported. 10.0 is the most recent version, but does not have support for printing to different trays/bins.
    PRINTING_PARAMETERS_FILE The name of the configuration file for Print Agent printing parameters. Default is ifs-printing.properties.
    POLL_TIME How often this agent checks for new jobs (in seconds).
    PRINTER_MAPPINGS A list of printers serviced by this node, each printer mapping contains:
    LOGICAL Name of logical printer, must match the name specified in system configuration. Make sure the printer name does not contain any white spaces as this is not supported.
    PHYSICAL Path to corresponding physical printer (relative from the server running the Print Agent).

    Following is a sample printagent_conf.xml file with the information listed above.

    <REMOTE_PRINTING_NODE>
      <ID>PA1</ID> 
      <POLL_TIME>10</POLL_TIME> 
      <USER>IFSPRINT</USER> 
      <PASSWORD>DgQIjcX+WBHI/WxB2trE/U2iX6KOPxfiib65</PASSWORD> 
      <URL>extendedserverhost:58080</URL>
      <PDFL_VERSION>10.0</PDFL_VERSION>
      <PRINTING_PARAMETERS_FILE>ifs-printing.properties</PRINTING_PARAMETERS_FILE>
      <PRINTER_MAPPINGS>
        <PRINTER_MAPPING>
          <LOGICAL>PRINTER1</LOGICAL> 
          <PHYSICAL>\\GBGFS1\GBG2M</PHYSICAL> 
        </PRINTER_MAPPING>
      </PRINTER_MAPPINGS>
    </REMOTE_PRINTING_NODE>


     

    Note: In order for a print job to be picked up at all a Report Formatter needs to have the logical printer defined/listed. Hence, it's not enough to only make the logical to physical mapping in the Print Agent configuration, you also need to make sure that the logical printer is included in the printer list of a Report Formatter. It's not necessary to map the logical printer to a physical in the Report Formatter configuration when you're using a Print Agent for a printer though.

  4. Start the Print Agent in console mode.  Use the start script start_printagent_console.cmd

Verify

Once the printagent is started in console you will get debug printouts. After waiting jobs have been processed it should say something like this.
10 DEBUG [Framework] RemotePrintingNode.mainLoop(): Getting remote job
10 DEBUG [Framework] RemotePrintingNode.mainLoop(): No jobs found.
If you want to abort the install script, press Ctrl-C.
 

Configure Print Agent for HTTPS

Two main steps should be followed to enable a secure connection between Print Agents and Server.

  1. Update the Application Server URL. The Original Server URL might take one of the forms below.
    http://<host>:<port> or <host>:<port>
    Change the existing Server URL to the new HTTPS server URL.

    Eg: https://<host>:<port>

    Use the <print agent location>/install.cmd to update the server URL. Enter the "4" as the choice. Then the current Server URL is Shown to and the new server URL is prompted. Enter the New HTTPS enable URL as shown in the screenshot below end press enter. This action will ensure that all the print agents installed from this install.cmd will get updated to the new server URL.
  2. Amend IFS Print Agent Configuration Files to Include Trust Store Information.

    Trust Store Settings
     
    CUSTOM_JVM_PARAMS=-Djavax.net.ssl.trustStore="<IFS_HOME>\java\jre\lib\security\cacerts" -Djavax.net.ssl.trustStorePassword=password


    Add a new local variable CUSTOM_JVM_PARAMS with value set to Trust Store Settings, and add it as a parameter for java.exe

    start_printagent_console.cmd
     

    set CUSTOM_JVM_PARAMS=-Djavax.net.ssl.trustStore="<IFS_HOME>\java\jre\lib\security\cacerts" -Djavax.net.ssl.trustStorePassword=password"%JAVA%\bin\java.exe" -Xmx128m %CUSTOM_JVM_PARAMS% -classpath %CLASSPATH% ifs.fnd.printingnode.RemotePrintingNode CONF_FILE="%HOME%\ifs-printagent-config.xml"

    E.g

    set CUSTOM_JVM_PARAMS=-Djavax.net.ssl.trustStore="C:\GSE75\java\jre\lib\security\cacerts" -Djavax.net.ssl.trustStorePassword=abcd"%JAVA%\bin\java.exe" -Xmx128m %CUSTOM_JVM_PARAMS% -classpath %CLASSPATH% ifs.fnd.printingnode.RemotePrintingNode CONF_FILE="%HOME%\ifs-printagent-config.xml"


    ifs-printagent-service.ifm

    $CUSTOM_JVM_PARAMS=-Djavax.net.ssl.trustStore="<IFS_HOME>\java\jre\lib\security\cacerts" -Djavax.net.ssl.trustStorePassword=password$SERVICE.CMD_LINE=F:\IFS\IFSJava\bin\java.exe -Xrs -Xmx128m &CUSTOM_JVM_PARAMS -classpath &CLASSPATH ifs.fnd.printingnode.RemotePrintingNode CONF_FILE="&HOME\ifs-printagent-config.xml

    E.g

    $CUSTOM_JVM_PARAMS=-Djavax.net.ssl.trustStore="C:\GSE75\java\jre\lib\security\cacerts" -Djavax.net.ssl.trustStorePassword=abcd$SERVICE.CMD_LINE=F:\IFS\IFSJava\bin\java.exe -Xrs -Xmx128m &CUSTOM_JVM_PARAMS -classpath &CLASSPATH ifs.fnd.printingnode.RemotePrintingNode CONF_FILE="&HOME\ifs-printagent-config.xml

Run Print Agent

The Print Agent can be started either using the start_printagent_console.cmd script or by running the registered service with start_printagent_service.cmd. It's recommended to run the Print Agent in console mode first to make sure it works properly and then run it as a service.

When started, the node will register itself with the server and as long as it is running all print jobs destined to a printer on this node's list will not be spooled by the Report Formatter. Instead the PDF will be created and later fetched and printed by the Print Agent. Use the Windows Service, to monitor the the Print Agent status.

When run as a Windows Service the printers must be configured to accept anonymous printing, or the service must be run as a user with printing rights. The same applies for the Report Formatter when that is set up to spool print jobs to a printer.

Configure Print Agent printing parameters

The configuration of the Print Agent printing parameters is provided for testing and troubleshooting reasons only. We do not support any other settings than the ones provided in the default ifs-printing.properties file.

The default location for the ifs-printing.properties file which consists the printing parameters, is the same location where the print agent instance is installed. The location and the name of this file are set in the ifs-printagent-config.xml. So the name and the location can be changed, and the relevant changes in ifs-printagent-config.xml should be done accordingly.

The printing parameters belong to one out of the two objects PrintParams and PrintUserParams. PrintParams are the print settings, primarily used for PostScript printers or PostScript outputs. PrintUserParams are the user print settings.

The configuration file for the Print Agent printing parameters is a .properties file and can look like this:

The syntax is object.parameter=value and ## denotes the start of a one line comment.

The following information is copied from Datalogics documentation for PDF Library version 10.0.

The printing parameters for the object PrintUserParams:

Parameter Value Description
binaryOk int 1 turns on binary data, 0 turns it off.
collate boolean Collate property
doOpp int 1 uses OverPrint Preview, 0 does not.
driverName java.lang.String The name of the driver (for example, "winspool").
emitHalftones int 1 turns on emit half-tones, 0 turns it off.
emitToFile boolean Create a PostScript file.
emitToPrinter boolean Output PDF file to a postScript printer.
farEastFontOpt FarEastFont(DOWNLOAD_ALL, DOWNLOAD_NONE, PRINT_AS_IMAGE) One of FarEastFont. The default value is Download All.
portName java.lang.String The name of the port (for example, "Ne00").
printAnnots int 1 turns on printing annotations, 0 turns it off.
psLevel int PostScript level.
reverse int 1 reverses the print order, 0 does regular order.
shrinkToFit boolean True turns on binary data, 0 turns it off.
startResult int Spooler ID from StartDoc().
transQuality int Transparency flattening quality control.

 

The printing parameters for the object PrintParams:

Parameter Value Description
applyOCGPrintOverrides boolean When true, apply print-specific visibility state settings from the optional-content group.
binaryOK boolean True if binary data is permitted in the PostScript file, false otherwise.
bitmapResolution long DPI for bitmaps.
boundingBox rect A rectangular frame that determines the dimension of an object that is placed inside a PDF document. (The BoundingBox is set by using PrintParams.BoundingBox=x1,y1,x2,y2)
brokenCRD boolean If true, do not set rendering intent in PostScript stream due to broken non-default CRDs.
centerCropBox boolean true if CropBox output is centered on the page when the CropBox < MediaBox, false otherwise.
disableFlattening boolean Disable flattening of the PDF file; transparency data will be ignored.
doOpp boolean Do the overprint preview operation.
doProofing boolean When true, print using proofing settings.
doTiling PageTilingMode(NONE, TILE_ALL_PAGES, TILE_LARGE_PAGES) Determines whether to tile non, all, or only large pages.
duplex Duplex(TUMBLE_LONG, TUMBLE_SHORT, OFF, SIMPLEX, DUPLEX_OFF, DUPLEX_VERTICAL, DUPLEX_HORIZONTAL, DUPLEX_SHORTSIDE, DUPLEX_LONGSIDE) Sets the duplex mode if the device supports duplex printing.
emitBG boolean Emit black generation.
emitColorSeps boolean Emit images for Level-1 separations.
emitDeviceExtGState boolean When emitting the extended graphics state, if this flag is true, include the device-dependent parameters (overprint, black generation, undercolor removal, transfer, halftone, halftone phase, smoothness, flatness, rendering intent) in addition to the device-independent parameters (font, line width, line cap, line join, miter limit, dash pattern).
emitFlatness boolean Honors the flatness setting over gstate flatness.
emitHalftones boolean Preserve any halftone screening in the PDF file.
emitInRipSeps boolean When true, it requests that separations, one sheet per ink, be generated in the RIP (printer).
emitPageClip boolean Emit page clip.
emitPageRotation boolean Emit a concat at the beginning of each page so that the page is properly rotated.
emitPS boolean If true, emit a PostScript file.
emitRawData boolean True if adding no unnecessary filters when emitting image data, false otherwise.
emitSeparableImagesOnly boolean If emitting EPS, include only CMYK and gray images.
emitTransfer boolean Emit transfer.
emitTTFontsFirst boolean Emit True Type fonts before any other fonts.
emitUCR boolean Emit undercolor removal.
expandToFit boolean True if small pages are to be scaled up to fit the printer page size, false otherwise.
farEastFontOpt FarEastFont(DOWNLOAD_ALL, DOWNLOAD_NONE, PRINT_AS_IMAGE) GDI to PS or download CJK fonts PDPDFarEastFont_Print_As_Image will not be honored.
gradientResolution long DPI for gradients interior to the object (not edges).
hostBasedCM boolean Do host Based color management using the destination profile.
incBaseFonts Inclusion(BY_RANGE, NEVER, ON_EVERY_PAGE, ONCE_PER_DOCUMENT, WHEN NEEDED) Embed the base fonts.
incCIDFonts Inclusion(BY_RANGE, NEVER, ON_EVERY_PAGE, ONCE_PER_DOCUMENT, WHEN NEEDED) Embed CID fonts.
incEmbeddedFonts Inclusion(BY_RANGE, NEVER, ON_EVERY_PAGE, ONCE_PER_DOCUMENT, WHEN NEEDED) Embed fonts that are embedded in the PDF file.
incOtherResources Inclusion(BY_RANGE, NEVER, ON_EVERY_PAGE, ONCE_PER_DOCUMENT, WHEN NEEDED) Include all other types of resources in the file.
incProcsets Inclusion(BY_RANGE, NEVER, ON_EVERY_PAGE, ONCE_PER_DOCUMENT, WHEN NEEDED) Include Procsets in the file.
incType1Fonts Inclusion(BY_RANGE, NEVER, ON_EVERY_PAGE, ONCE_PER_DOCUMENT, WHEN NEEDED) Embed True Type 1 fonts.
inkBlack boolean Proofing settings: simulate ink black.
lastHeight int Used when pageSize is true to prevent unneeded pagedevice calls.
lastWidth int Used when pageSize is true to prevent unneeded pagedevice calls.
lineWidth float The line weight to use for printer marks.
macQDPrinter booelan True if the printer is a Mac QuickDraw printer, false otherwise.
markStyle int Specify the style to use for page marks.
mirrorprint int One of the following constants:

kPDPrintFlipNone = 0x01

kPDPrintFlipX = 0x02

kPDPrintFlipY = 0x04

kPDPrintFlipXY = 0x08

Mirroring is done in the PostScript output stream.

negative boolean When true, invert the plate.
numCollatedCopies long Enables collation for the viewer.
optimizeForSpeed boolean If true, do it fast, false means PostScript code must be page-independent.
outputType OutputType(EPSMAC_EXTENDED_PREVIEW, EPSMAC_STANDARD_PREVIEW,

EPSNO_PREVIEW, POST_SCRIPT)

Print PostScript or EPS with or without a preview.
paperWhite boolean Proofing settings: simulate paper white.
printWhat PrintWhat(DOCUMENT, DOCUMENT_AND_COMMENTS, DOCUMENT_AND_STAMPS, FORM_FIELDS_ONLY) Print the document, the document and comments or document form fields only.
printWhatAnnot java.util.EnumSet<PrintWhatAnnotFlags>(NO_EXTRAS, PRINTER_MARKS, TRAP_ANNOTS) Annotation flags which modify PDPrintWhat to enable Pro product behavior.
psLevel int PostScript level: 1,2 or 3.
reverse boolean If set to true, reverse the order of page output.
rotate boolean Enable auto-rotating behavior from past versions of Acrobat.
rotateAndCenter boolean True if the page is to be rotated to fit the printer's orientation and centered in the printer's page size; false, otherwise.
saveVM boolean True means try to save VM when printing to PostScript.
scale float The document-wide scale factor.
setPageSize boolean (PostScript level 2 only) Set the page size on each page.
shrinkToFit boolean True if the page is scaled to fit the printer page size; false, otherwise.
suppressCJKSubstitution boolean If true, do not do CJK substitution on the printer.
suppressCSA boolean Do not emit CSAs for 4-component (CMYK) colors.
suppressOPPWhenNoSpots boolean When true, suppress OPP for pages that do not contain spot colors.
transparencyQuality long The transparency flattening quality.
trapType int The trap type.
TTasCIDT2 boolean When this is set, emit True Type fonts as CIDType2 instead of as CIDFontType
TTasT42 boolean If including True Type fonts, convert to Type 42 fonts instead of Type 1 fonts.
useExecForm boolean When true, emit execform calls when emitting Form XObjects.
useFontAliasNames boolean Used when printing with system fonts.
useFullResolutionJP2KData boolean Determines wheter to use the maximum available JPEG2000 resolution.
useMaxVM boolean If true, store all possible resources in VM.
useSubFileDecode boolean Add subFileDecode filter to work around stream problems [false].
westernMarksStyle boolean When true, use western style for page marks.
whichMarks java.util.EnumSet<PageMarkFlags>(BLEED_MARKS, COLOR_BARS, CROP_MARKS, PAGE_INFO, REGISTRATION_MARKS, SLUR_MARKS, TRIM_MARKS) Page mark indication.