pdfbox-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tilman Hausherr (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (PDFBOX-4399) Disabled optional content groups are rendered
Date Wed, 09 Jan 2019 17:12:00 GMT

    [ https://issues.apache.org/jira/browse/PDFBOX-4399?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16738444#comment-16738444
] 

Tilman Hausherr edited comment on PDFBOX-4399 at 1/9/19 5:11 PM:
-----------------------------------------------------------------

[~jjcool] there's a problem with  [^pop-bugzilla42823-OCG.pdf] 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.


was (Author: tilman):
[~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, pop-bugzilla42823-OCG.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: dev-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: dev-help@pdfbox.apache.org


Mime
View raw message