Control file for rendering of Adobe Document Services

The file ‘xfa.xci’ is the Document Services Configuration file for controlling PDF rendering used by ADS. Here just wrap up few points to help understand this control file for rendering.

Adobe Document Services (ADS) enable form-based processing of business data triggered by both ABAP- and Java-based applications. As ADS are running on an AS Java, the basic configuration differs dependent of the development environment, that needs to communicate with ADS.

It’s my first touch on this file when checking SAP notes 1489570 – Set font mapping for PDF forms.

If you use Adobe Document Services to generate the PDF form, they can
use fonts only that are either included in the PDF form or installed on the same server. To ensure that rendering leads to the same result (regardless of the platform), a default mapping is set for certain fonts. The fonts Times New Roman und Arial are affected by this. These fonts are replaced with the fonts Times or Helvetica for the PDF output. This font replacement is specified in the file xfa.xci that is on the server on which ADS run.

1, Default contents of this ‘xfa.xci file

<?xml version="1.0" encoding="UTF-8"?>
<?xfa generator="AdobeDocumentServicesForSAP" APIVersion="1160.20191001133812.937394"?>
<xfa> <config xmlns="http://www.xfa.org/schema/xci/1.0/" xmlns:xfa="http://www.xfa.org/schema/xci/1.0/"> <present> <!-- [0..n] --> <destination>pdf</destination> <interactiveDataMerge>true</interactiveDataMerge> <!-- Set it to false, to be disabled data merge for interactive pdfs during rendering --> <cache> <!-- Note: Once render caches can be generated on the server, the renderCache tag below may be removed. --> <templateCache maxEntries="0"/> <renderCache enable="0"/> </cache> <common> <data> <adjustData>0</adjustData> <!-- 0|1 --> <attributes>preserve</attributes> <!-- ignore|delegate|preserve --> </data> </common> <pcl> <!-- [0..n] --> <fontInfo> <embed>1</embed> <!-- 0|1 --> <subsetBelow>100</subsetBelow> </fontInfo> <xdc> <uri>hppcl5e.xdc</uri> </xdc> </pcl> <pdf name="pdf"> <!-- [0..n] --> <fontInfo> <embed>0</embed> <!-- 0|1 --> <map> <equate from="Arial_*_*" to="Helvetica_*_*"/> <equate from="Times New Roman_*_*" to="Times_*_*"/> <equateRange from='Arial_*_*' to='Helvetica_*_*' unicodeRange='U+000000-00007F'/> <!-- Basic Latin -->
.......... <equateRange from='Times New Roman_*_*' to='Times_*_*' unicodeRange='U+000000-00007F'/> <!-- Basic Latin --> <equateRange from='Times New Roman_*_*' to='Times_*_*' unicodeRange='U+000080-0000FF'/> <!-- Latin-1 Supplement -->
.......... <equateRange from='Times New Roman_*_*' to='Kozuka Mincho Pr6N R_*_*' unicodeRange='U+020000-02A6DF'/> <!-- CJK Unified Ideographs Extension B --> <equateRange from='Times New Roman_*_*' to='Kozuka Mincho Pr6N R_*_*' unicodeRange='U+02F800-02FA1F'/> <!-- CJK Compatibility Ideographs Supplement -->
.......... </map> <alwaysEmbed>OCR A Std</alwaysEmbed>
.......... </fontInfo> <tagged>1</tagged> <!-- 0|1 --> <taggedMode>custom</taggedMode> <compression> <compressLogicalStructure>1</compressLogicalStructure> <compressObjectStream>1</compressObjectStream> </compression> <xdc> <uri>adobepdf.xdc</uri> </xdc> <version>1.65</version>
... <ps> <!-- [0..n] --> <fontInfo> <embed>1</embed> <!-- 0|1 --> <subsetBelow>100</subsetBelow> </fontInfo> <xdc> <uri>ps_plain.xdc</uri> </xdc> </ps>
... <labelPrinter name="dpl"> <!-- [0..n] --> <batchOutput format="none"> </batchOutput> <flipLabel>0</flipLabel> <!-- 0|1 --> <fontInfo> <alwaysEmbed/> <!-- [0..n] --> <defaultTypeface writingScript="*"/> <!-- [0..n] --> <embed>0</embed> <!-- 0|1 --> <map> <equate to="" validate="1" force="" from=""/> <!-- [0..n] Attributes: from='', to='', force='0|1' [0..n] --> <equateRange to="" from="" unicodeRange=""/> <!-- [0..n] --> </map> <neverEmbed/> <!-- [0..n] --> <subsetBelow>100</subsetBelow> </fontInfo> <macro> </macro> <xdc> <uri>dpl203.xdc</uri> <xsl> <debug> <uri/> </debug> <uri/> </xsl> </xdc> </labelPrinter>
... <behaviorOverride>patch-W-2393121:1 patch-W-2447677:1</behaviorOverride><!-- In order to get the default behavior without data mismatch, replace the patch-W-2447677:1 with patch-W-2757988:1 --> </present> </config>
</xfa>

It’s an XML format that contains various TAGs as parameters to control the PDF rendering process. The majority part is <map> of fonts especial for Arial and Times New Roman, but why have those only two fonts been mentioned specifically?

Maybe it’s because those two fonts are the most popular fonts for all adobe forms. Of course, we can set specific font inside the form for a specific country/language. But it’s highly possible that only those two fonts have been used in the global templates if need to be supported in multiply languages. Then ADS can do this font mapping by searching the Unicode range (Check this linkage for Unicode block code). Otherwise, the final font been used at the output will be out of control cause no such mapping besides those two fonts.

Notes 2367603 mentioned why the Arial font missing in PDF output?

  • Arial font is a custom-specific font and is not a part of ADS standard installation.
  • In ADS font trace can be seen the following information:
    Font Arial_Normal_Normal was mapped to Helvetica_Normal_Normal
  • Arial font is mapped to Helvetica in the default xfa.xci file.

To change the font replacement, we can follow the instructions of notes to create a custom_xfa.xci file by copying the xfa.xci file and editing it accordingly.

2. Parameter list that can be used

Parameter Purposes
barcode traces barcode start codes, code sets, checksums,etc.
byteStreamDriver traces the processing of sequences and variables  in the XDC file
coreinit traces the initialization of the core  libraries
deviceDriver traces the rendering of form objects by the device driver
font traces the process of resolving fonts
general traces the process of importing data and rendering a document using PresentationAgent,
FormServerand/or XMLForm Module
layout traces the layout process of an XFA-Form model
merge traces the merge process of an XFATemplate model  with an XFAData model printDriver
script traces script statements
signature traces the creation and verification of digital signatures
sourceSet traces the process of connecting to and retrieving   database objects
templateCache traces template caching
CacheDriver Driver setting
MacroPlayDriver Driver setting
MacroRecordDriver Driver setting
PCLDriver Driver setting
PostScriptDriver Driver setting
ZPLDriver Driver setting

If we want to activate the font trace mentioned in SAP notes 1717189 – ADS Font Trace, just add the following tag under the <config> tag and the following steps of this WIKI.

 <trace> <area name="font" level="3"/> </trace>

If the trace level is set to value ‘4’, or if an error occurred during form rendering, Adobe Document Services (ADS) provides you with a PDF and several files embedded in its attachment. If the trace file could be too large to reach the limit then check this note 1785402 – Render exception with xfa.xci trace option.

If want to embed the specific font on PDF output, change the custom_xfa.xci and add below tab under <pdf><fontInfo> tag:

<alwaysEmbed>correct font name</alwaysEmbed>

Be aware of the font Copywrite issue as many commercial fonts do not allow this even with paid license.