Wednesday, December 28, 2016

EBS R12 -- XML Publisher PDF report, Font problem, xdo.cfg and font mappings

A strange font problem was escalated to me.
The problem was on an Internal EBS instance, where we were trying to build a PDF report based on the statistics data related with our issue tracking system.
We were trying to run a concurrent program to build a PDF output through the XML publisher.
The fonts that were used in the Report's template (rtf) were Times New Roman, Times New Roman Bold and Times New Roman Italic.
On the other hand, the fonts in the output that was generated by Oracle Reports and XML publisher was a little strange.

The Problem ( XML Publisher Report output -- font issue):

The problem was in non-latin bold characters.. Th non-lating characters could be displayed properly but they were not bold.
That is, for intance the character "Ş" or "İ" were displayed properly but they were not bold, altough they were configured bold in the Reports template.
We knew that Times New Roman had non-latin characters and it had bold feature as well.
So this was not acceptable at all.

This problem actually made me revisit the XML Publisher funcitonality of EBS once again.
So, before going forward and giving you the solution, let's recall what XML publisher is (for EBS perspective);

What is XML Publisher (EBS perspective):

XML publisher aka BI Publisher is a template-based reporting tool that is used for data extraction and display.
It can be used to create report based on XML data extracts from the Oracle Application Concurrent Request/programs. 
XML Publisher can be used to generate PDF, HTML, RTF, EXCEL (HTML), or even text outputs.

Additional Info: In standard/default EBS configuration, getting Reports PDF outputs which contain special characters(like turkish characters) is not supported.
That is ; by default you can not produce proper Report PDF outputs through Concurrent Requests if your characterset contains special characters.
In 12.2, Oracle Reports PDF is supported only for US7ASCII, WE8ISO8859P1 and

WE8MSWIN1252 charactersets.
So, in order to get Oracle Reports PDF outputs, Oracle recommends using BI Publisher(XML Publisher) if your characterset is different than those 3 charactersets above.

What actually happens when creating a XML Publisher based Reports in EBS is as follows;

Concurrent request collects the data.
Output Post Processors calls XML publisher to merge the template files(rtf) with the data that is collected by the Concurrent program/request.

In order to create an XML Publisher based report from a concurrent program output; the following should be done;

Register your concurrent program as a Data Definition in the XML Publisher Template Manager. 
Design a XML Publisher template (rtf)
Register that template to the XML publisher Template Manager
Select XML output for the concurrent program
Submit concurrent request (choose  template, language format)

Well, after this information, lets introduce you 2 configuration files which are relevant with the font issues in EBS report outputs.

1) "uifont.ali":  If  an Oracle Report (not XML Publisher report) is executed, then uifont.ali is uısed for the font mappings.

That is;

When the report is run, first the reports engine looks in uifont.ali if there is a font mapping to be applied for the specified fonts. Then it looks in the uiprint.txt file for the printer defined in TK_PRINTER and
in turn examines the PPD file which the uiprint.txt entry points to. The PPD is
a printer definition file with a lot of information about the capabilities of a
certain printer.
Finally it is necessary to provide an AFM file for each of the fonts
which contains the font metrics for the reports engine to generate the output

"So, uifont.ali may be related with the font issues but is not related with XML Publisher Reports."

2) "xdo.cfg":

The XML publisher uses the font mappings defined in xdo.cfg file when producing outputs.

-- The locations of xdo.cfg:
11i: under $AF_JRE_TOP/jre/lib R12.0 under $AF_JRE_TOP/lib
R12.1 under $XDO_TOP/resource
12.2 under fs_ne/EBSapps/appl/xdo/resource

"So, xdo.cfg is definitely related with the font issues  in XML Publisher Reports."

As this issue was on a XML Publisher based PDF report, the configuration file that we looked for, was xdo.cfg.

Here is key info :

XDO uses Albany fonts for non-Latin-1 strings in the PDF output by default.

This info was the key for our problem as well!

Let's go back to our problem;


Let me remind the problem to you:

The problems were in non-latin bold characters in an XML publisher based PDF Report..
Those character were not bold.
That is, for instance the character "Ş" or "İ" were displayed properly but they were not bold, altough they were configured bold in the Report's template.

With the key info(above) in mind, we checked  the PDF output using Acrobat Reader and saw that the Albany fonts were there.

Why was the problem only in bold characters then?

Well , it is because Albany fonts have no bold feature..
Look at the following table:

Ref: E1: XMLP: Bold Font Specified in a RTF Template is Not Reflected in the Actual PDF Output (Doc ID 1212076.1)

Weight  = normal means, no bold feature.

You see Albany fonts have no bold (weight!=bold)...


We configured XML Publisher to use Times New Roman for producting the PDF reports.
In order to do that, we found the ttf files from Windows client, where the XML Publisher Template file was prepared and copied the ttf files to Linux, where our application server (concurrent tier) was running. 
After that, we made the font mappings in the xdo.cfg and run the concurrent program once again.
These actions fixed the problem and PDF could be generated with all its italic, bold and normal characters. The output displayed perfectly and it contained the Times New Roman, Times New Roman Italic, and Times New Roman bold characters.

Take a look at what we did closely;

We copied the Times New Roman fonts (from C:\Windows\Fonts\) from our Windows client to the Linux EBS Application Server (to /home/applmgr/fonts).
We created the xdo.cfg in $XDO_TOP/resource directory and put the following font mappings in it;

<font family="Times New Roman" style="normal" weight="bold">
<truetype path="/home/applmgr/timesbd.ttf" />
<font family="Times New Roman" style="normal" weight="normal">
<truetype path=" /home/applmgr/times.ttf" />
<font family="Times New Roman" style="italic" weight="normal">
<truetype path=" /home/applmgr/timesi.ttf" />

Well... That's the tip of the day.  I hope you will find this article useful.

No comments :

Post a Comment