[
https://issues.apache.org/jira/browse/PDFBOX-4399?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16738444#comment-16738444
]
Tilman Hausherr commented on PDFBOX-4399:
-----------------------------------------
[~jjcool] there's a problem with this file that I found this morning and that
wasn't in my test set. Page 2 has almost nothing rendered. It should display
the Terms & Conditions in Czech language.
Possible cause, after reading the PDF specification:
{quote}When a piece of optional content in a PDF file is determined that it
shall be hidden, the following occurs:
•The content shall not be drawn.
•Graphics state operations, such as setting the colour, transformation matrix,
and clipping, shall still be applied. In addition, graphics state side effects
that arise from drawing operators shall be applied; in particular, the current
text position shall be updated even for text wrapped in optional content. In
other words, graphics state parameters that persist past the end of a
marked-content section shall be the same whether the optional content is
visible or not.
Hiding a section of optional content shall not change the colour of objects
that do not belong to the same optional content group.
{quote}
Now here's a part of the content stream of page 2:
{code:java}
/OC /MC3 BDC
Q
q
0 0 595.276 841.89 re
W
n
BT
...
ET
EMC
/OC /MC4 BDC
BT
...
ET
EMC
/OC /MC5 BDC
BT
...
{code}
MC3 and MC4 are hidden. So with the current code, "Q q" are lost so we're stuck
with whatever has been set before. To test this theory, I added "q" and "Q" to
{{isContentMarkOperator()}} and now it displays. But the real solution is of
course more complex. I suspect one must investigate every method in PageDrawer
to disable the actual drawing and keep the rest, e.g. clipping.
Another problem is on page 1. The two square radioboxes are rendered black,
which didn't happen before.
I then tried another solution: let everything through and put {{if
(isContentRendered())}} before every "graphics.fill", "graphics.stroke",
"graphics.draw", and "graphics.drawImage", i.e. all graphics calls that "do
something visible", and also skip form XObjects and transparency groups.
That looks nice, so I intend to do that soon.
We also need code to skip annotations (/OC entry). I am trying to find a test
file.
> Disabled optional content groups are rendered
> ---------------------------------------------
>
> Key: PDFBOX-4399
> URL: https://issues.apache.org/jira/browse/PDFBOX-4399
> Project: PDFBox
> Issue Type: Bug
> Components: Rendering
> Affects Versions: 2.0.6, 2.0.13
> Reporter: Stefan Ziel
> Priority: Major
> Labels: OCGs
> Fix For: 2.0.14, 3.0.0 PDFBox
>
> Attachments: 1822-AGB.pdf, PDFBOX-4399-2.patch, gs.png, original.pdf,
> printed.png
>
>
> Printing a Documents with hidden optional content groups [^original.pdf]
> renders hidden content [^printed.png]. Code used to print
> {code:java}
> InputStream sourceStream = new FileInputStream(pFile);
> try {
> PDDocument source = PDDocument.load(sourceStream);
> job.setPageable(new PDFPageable(source));
> job.print(atts);
> } finally {
> sourceStream.close();
> }
> {code}
> This is not only a problem of PDFBox ;) but can be done right ... ghostscript
> does it [^gs.png].
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]