Hello,

We are evaluating iText 5.5.1 for our needs and I came upon the following 
peculiarity.  We want to generate a PDF that has layers (optional content 
groups or OCGs) where one layer is only shown when viewed in a reader and not 
when printed and the other layer is only shown when printed but not in online 
view.

I worked from one of the iText examples and created the PDF with this code 
(just part to keep length of post short):
...
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, new 
FileOutputStream(file));
        writer.setPdfVersion(PdfWriter.VERSION_1_5);
        document.open();
        PdfContentByte cb = writer.getDirectContent();

        // 1) generate only View:
        PdfLayer not_printed = new PdfLayer("not printed", writer);
        not_printed.setOnPanel(ON_PANEL);
        not_printed.setOn(true);
        not_printed.setPrint("Print", false);
        cb.beginLayer(not_printed);
        ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, new Phrase(
                "ONLY IN VIEW"), 50, 600, 0);
        cb.endLayer();

        // 2) generate only Print:
        PdfLayer only_printed = new PdfLayer("only printed", writer);
        only_printed.setOnPanel(ON_PANEL);
        only_printed.setView(false);
        only_printed.setPrint("Print", true);  // <- this turns out to be the 
culprit...
        cb.beginLayer(only_printed);
        ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, new Phrase(
                "ONLY WHEN PRINTED"), 50, 400, 0);
        cb.endLayer();

        document.close();
...

This generates a PDF that has the two phrases "ONLY IN VIEW" and "ONLY WHEN 
PRINTED" at different locations on the first page.  Opening the resulting PDF 
in Chrome browser, the first phrase shows and when clicking Print, the preview 
shows only the second phrase.  This is what I had intended.

Now opening the same PDF in Adobe Reader 11, the view is correct (only the 
first phrase shows) but when I click Print, the preview shows neither the 
second (his would be correct) nor the first (this would be incorrect) phrase -- 
the page is just blank.  Poking around with the excellent RUPS tool (thank 
you!) and editing the PDF with Acrobat Pro, I realized that after Acrobat Pro, 
the /PrintState setting is /ON but iText originally generated the value /on -- 
it seems that Adobe Reader is case sensitive here!  I used RUPS to edit the 
iText generated PDF as well and simply replaced /on with /ON for the 
/PrintState and -- voila -- Adobe Reader behaves as I would expect showing the 
second phrase in the print preview.

A quick look into the class com.itextpdf.text.pdf.PdfName.ON reveals that the 
string is indeed lower case.  However, the corresponding PdfName.OFF is upper 
case (and there is a PdfName.Off that is mixed case).  I think our problem 
could be fixed by patching PdfName.ON to be instantiated with "ON" rather than 
"on" -- would this be of interest by iText?  I'd b happy to provide more 
details, code, and even my little unit test that I wrote against it.

>From browsing quickly through the code bases, I only see PdfName.ON used in 
>the context of OCGs, where the upper case might be the right way to go.

Thanks,
Linda


------------------------------------------------------------------------------
Open source business process management suite built on Java and Eclipse
Turn processes into business applications with Bonita BPM Community Edition
Quickly connect people, data, and systems into organized workflows
Winner of BOSSIE, CODIE, OW2 and Gartner awards
http://p.sf.net/sfu/Bonitasoft
_______________________________________________
iText-questions mailing list
iText-questions@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions

iText(R) is a registered trademark of 1T3XT BVBA.
Many questions posted to this list can (and will) be answered with a reference 
to the iText book: http://www.itextpdf.com/book/
Please check the keywords list before you ask for examples: 
http://itextpdf.com/themes/keywords.php

Reply via email to