Nicholas Moser created FOP-3023:
-----------------------------------
Summary: Simulated Bold Errors in Adobe Acrobat
Key: FOP-3023
URL: https://issues.apache.org/jira/browse/FOP-3023
Project: FOP
Issue Type: Improvement
Reporter: Nicholas Moser
Attachments: NotoSans-after.pdf, NotoSans-before.pdf,
OpenSans-after.pdf, OpenSans-before.pdf, SourceCodePro-after.pdf,
SourceCodePro-before.pdf, fix.patch, image-2021-08-12-10-10-13-731.png
In some cases, simulated bold text seems to throw an error in Adobe Acrobat.
It's been erroring in every Adobe Acrobat version released in what seems like
the last year, possibly more.
h2. The Problem
For example (version 2021.005.20060; Windows 10.0.19042 Build 19042):
!image-2021-08-12-10-10-13-731.png!
It's hard to tell exactly why this issue occurs, but it appears to be related
to the fact that simulated bold pushes (q) and pops (Q) the graphics state.
Furthermore, it appears that this may cause issues only when on the last row of
a table.
You can reproduce the issue by using the following fonts:
* [https://fonts.google.com/specimen/Open+Sans]
* [https://fonts.google.com/specimen/Noto+Sans]
* [https://fonts.google.com/specimen/Source+Code+Pro]
Along with the following FOP configuration file:
{code:java}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<fop version="1.0">
<renderers>
<renderer mime="application/pdf">
<fonts>
<font
embed-url="file:/C:/Open_Sans/OpenSans-Regular.ttf" kerning="yes"
simulate-style="true">
<font-triplet name="sans-serif"
style="normal" weight="normal"/>
<font-triplet name="sans-serif"
style="normal" weight="bold"/>
<font-triplet name="sans-serif"
style="italic" weight="normal"/>
<font-triplet name="sans-serif"
style="italic" weight="bold"/>
</font>
<font
embed-url="file:/C:/Noto_Sans/NotoSans-Regular.ttf" kerning="yes"
simulate-style="true">
<font-triplet name="sans-serif2"
style="normal" weight="normal"/>
<font-triplet name="sans-serif2"
style="normal" weight="bold"/>
<font-triplet name="sans-serif2"
style="italic" weight="normal"/>
<font-triplet name="sans-serif2"
style="italic" weight="bold"/>
</font>
<font
embed-url="file:/C:/Source_Code_Pro/SourceCodePro-Regular.ttf" kerning="yes"
simulate-style="true">
<font-triplet name="sans-serif3"
style="normal" weight="normal"/>
<font-triplet name="sans-serif3"
style="normal" weight="bold"/>
<font-triplet name="sans-serif3"
style="italic" weight="normal"/>
<font-triplet name="sans-serif3"
style="italic" weight="bold"/>
</font>
</fonts>
</renderer>
</renderers>
</fop>
{code}
And using this FO file:
{code:java}
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="main-page" margin="0.5in"
page-height="11.0in" page-width="8.5in">
<fo:region-body margin-bottom="0.25in + 1mm" margin-top="0.70in + 1mm"/>
<fo:region-before extent="0.70in"/>
<fo:region-after extent="0.25in"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="main-page">
<fo:flow flow-name="xsl-region-body">
<fo:table table-layout="fixed" width="100%" font-size="10pt"
font-family="sans-serif">
<fo:table-column column-width="proportional-column-width(1)"/>
<fo:table-column column-width="proportional-column-width(1)"/>
<fo:table-header>
<fo:table-row>
<fo:table-cell border="0.3mm solid #dddddd" padding="0.5mm"
background-color="#eeeeee">
<fo:block>
<fo:inline font-weight="bold">Patient Name:</fo:inline> Moser,
Nicholas</fo:block>
</fo:table-cell>
<fo:table-cell border="0.3mm solid #dddddd" padding="0.5mm"
background-color="#eeeeee">
<fo:block>
<fo:inline font-weight="bold">Request Date/Time:</fo:inline>
8/11/2021 18:02 CDT</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<fo:table-row>
<fo:table-cell border="0.3mm solid #dddddd" padding="0.5mm"
number-columns-spanned="2">
<fo:block>
<fo:inline font-weight="bold">Requesting Person:</fo:inline>
Moser, Nicholas</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell border="0.3mm solid #dddddd" padding="0.5mm"
number-columns-spanned="2" font-style="italic">
<fo:block>Release Details</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell border="0.3mm solid #dddddd" padding="0.5mm"
number-columns-spanned="2">
<fo:block>
<fo:inline font-weight="bold">Comments:</fo:inline>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
{code}
Replace *font-family="sans-serif"* with *font-family="sans-serif2"* or
*font-family="sans-serif"* to test the two other fonts.
h2. Proposed Solution
The actual solution here should be reaching out to Adobe to figure out why only
their PDF reader seems to throw this error. I don't see the error when using
Firefox, Chrome, or Foxit to view the PDF.
With that being said, I've found a code change that seems to remove the error
while maintaining the simulated styling.
[^fix.patch]
Basically, instead of pushing and popping the graphics state before simulating
bold, just reset the text rendering mode to 0 when done. I've done quite a bit
of testing, and this seems to work fine. Curious to hear from others if there
are any issues with this change.
Here are some examples of before the change and after the change:
[^OpenSans-before.pdf]
[^OpenSans-after.pdf]
[^NotoSans-before.pdf]
[^NotoSans-after.pdf]
[^SourceCodePro-before.pdf]
[^SourceCodePro-after.pdf]
--
This message was sent by Atlassian Jira
(v8.3.4#803005)