15 Replies Latest reply on Apr 4, 2007 8:16 PM by Newsgroup_User

    Itext Problem

    iborsb
      I get the following problem when trying to use the refactored iText 1.4.6.

      Class coldfusion.runtime.java.JavaProxy can not access a member of class com.lowagie.textNew.pdf.PdfWriter with modifiers "protected"

      Im trying to call the following function.
      pdfWriter.setViewerPreferences(PdfWriter.HideToolbar);

      Is there anyway around this?
        • 1. Re: Itext Problem
          Level 7
          iborsb wrote:
          > I get the following problem when trying to use the refactored iText 1.4.6.
          >
          > Class coldfusion.runtime.java.JavaProxy can not access a member of class
          > com.lowagie.textNew.pdf.PdfWriter with modifiers "protected"
          >
          > Im trying to call the following function.
          > pdfWriter.setViewerPreferences(PdfWriter.HideToolbar);
          >
          > Is there anyway around this?

          short of doing some java wrappers, nope. it's the "protected" bit.


          • 2. Re: Itext Problem
            iborsb Level 1
            Thanks Paul

            I'm looking at trying to make it harder for a user to either alter, save or print a PDF. One way seemed to be through setting viewerpreferences and removing all the tool bars. The other way is to set permissions and not allow printing.

            Have you any examples of how to do this?
            • 3. Re: Itext Problem
              Level 7
              iborsb wrote:
              > I'm looking at trying to make it harder for a user to either alter, save or
              > print a PDF. One way seemed to be through setting viewerpreferences and
              > removing all the tool bars. The other way is to set permissions and not allow
              > printing.
              >
              > Have you any examples of how to do this?

              no, not offhand but you *can* either set user permissions when you create the
              doc via PdfWriter setEncryption method or read in an existing PDF & "stamp"
              encryption on it via PdfStamper setEncryption method (or use PdfEncryptor class
              encrypt method). note that for all these methods you'll need to add a password
              to the PDF.

              • 4. Re: Itext Problem
                iborsb Level 1
                Hi Paul

                I've come up with the following
                newPDF=createObject("java","java.io.FileOutputStream").init(expandPath(finalOutPutFile));
                pdfStamper=createObject("java","com.lowagie.textNew.pdf.PdfStamper");
                newPDF=pdfStamper.setEncryption('','',AllowPrinting,0);

                Is that even close? Currently, I get an AllowPrinting is undefined error.

                The notes suggest that the command should accept an int and yet the options inlude allowprinting etc..
                • 5. Re: Itext Problem
                  Level 7
                  iborsb wrote:
                  > Is that even close? Currently, I get an AllowPrinting is undefined error.


                  AllowPrinting is a user permission *field* in PdfWriter. if you have initialized
                  a PdfWriter class then you can do PdfWriterObjectName.ALLOWPRINTING or simply
                  javacast on it's value, 2052.

                  newPDF=pdfStamper.setEncryption('','',javaCast("int",2052),0);

                  if i can offer some advice, grab a copy of bruno's book if you plan on doing
                  much w/Itext. very good value.
                  • 6. Re: Itext Problem
                    iborsb Level 1
                    I get the following error

                    The selected method setEncryption was not found

                    I'm using a itext 1.4.6.
                    • 7. Re: Itext Problem
                      Level 7
                      iborsb wrote:
                      > I get the following error
                      >
                      > The selected method setEncryption was not found

                      post enough of your code to see what's going on.
                      • 8. Re: Itext Problem
                        iborsb Level 1
                        Here is the code.

                        Its a copy of the concatenate pdf code from a previous post - as this removes all the security I need to add it back on.
                        • 9. Re: Itext Problem
                          Level 7
                          if (i EQ 1) {
                          pdfDocument.init(reader.getPageSizeWithRotation(1));
                          pdfCopy.init(pdfDocument, newPDF);
                          // make sure we turn off printing BEFORE we open the new PDF
                          pdfCopy.setEncryption(false,"","",bitNot(pdfCopy.ALLOWPRINTING));
                          pdfDocument.open();
                          } // first file in list?
                          • 10. Re: Itext Problem
                            iborsb Level 1
                            Thanks Paul....
                            • 11. Re: Itext Problem
                              EmmanuelRuiz Level 1
                              Has anyone got into a problem generating very large pdf files. Our process kills the jrun once the pdf file generated is larger than 14mb?

                              Thanks
                              • 12. Re: Itext Problem
                                obouillaud Level 1
                                ok it works for me, but just for one parameter a the same tilme.
                                pdfCopy.setEncryption(pdfCopy.STRENGTH128BITS,"","123456789",bitNot(pdfCopy.AllowModifyCon tents));

                                if I repeat this line with different attributes (AllowPrinting...) it's not working

                                The docs said that it's possible to concatenate multpiles "AllowXXX" using | (pipe) but it does not work !

                                I want to do the following thing :
                                no password for reading
                                a password for editing
                                without password, you can read & print the PDF, but nothing else (not removing a page, not edit text, ...)

                                How can I do ?
                                • 13. Re: Itext Problem
                                  Level 7
                                  obouillaud wrote:
                                  > The docs said that it's possible to concatenate multpiles "AllowXXX" using |
                                  > (pipe) but it does not work !

                                  what ver of iText? show your code.
                                  • 14. Itext Problem
                                    obouillaud Level 1
                                    I use Coldfusion 7.0.2 with the itext that came with it.
                                    My code (99% based on yours :-) :

                                    if (i EQ 1) {
                                    pdfDocument.init(reader.getPageSizeWithRotation(1));
                                    pdfCopy.init(pdfDocument, newPDF);
                                    // make sure we turn off printing or modifying or ... BEFORE we open the new PDF
                                    passwd = createuuid() ;
                                    pdfCopy.setEncryption( pdfCopy.STRENGTH128BITS, "", passwd, bitNot(pdfCopy.AllowModifyContents)
                                    );

                                    pdfDocument.open();
                                    } // first file in list?

                                    If I replace "bitNot(pdfCopy.AllowModifyContents)" by "pdfCopy.AllowScreenReaders | pdfCopy.AllowCopy | pdfCopy.AllowPrinting". I have the following error : "Invalid token '|' found on line 310 at column 100."
                                    • 15. Re: Itext Problem
                                      Level 7
                                      sorry to take so long, been a bit busy.

                                      the "|" char is java syntax for bit ORed. so to cobble together different
                                      permissions that you want to negate you might do something like:

                                      pdfPermissions=bitOr(pdfCopy.ALLOWPRINTING,pdfCopy.ALLOWCOPY);
                                      // don't allow any of the pdfPermissions
                                      pdfCopy.setEncryption(pdfCopy.STRENGTH128BITS,"",passwd,bitNot(pdfPermissions));

                                      if there's more than two permissions you need then maybe:

                                      pdfPermissions=bitOr(pdfPermissions,pdfCopy.ALLOWMODIFYCONTENTS);
                                      pdfPermissions=bitOr(pdfPermissions,pdfCopy.ALLOWASSEMBLY);
                                      .
                                      .
                                      .
                                      etc.