Hi Roberto, > Am 27.07.2015 um 12:32 schrieb Roberto Nibali <rnib...@gmail.com>: > > Hi Maruan > > Here are the files: > > ccalt-simple.pdf > <https://drive.google.com/file/d/0B7Bzk_1dcyc5RmcyWVo1ZURyV0k/view?usp=drive_web> > > cctemp-simple.pdf > <https://drive.google.com/file/d/0B7Bzk_1dcyc5UHUtNWh6ampVMnc/view?usp=drive_web> > > And here is the testNG code portion. I trust you'll get a reproduceable > setup working based on this. > > private static PDDocument srcDoc; > private static PDDocument tplDoc; > > @Test > public static void SimpleTest() throws IOException { > String ownerPassword = "ubsforms"; > > srcDoc = PDDocument.load(new File("./ccalt-simple.pdf"), ownerPassword); > tplDoc = PDDocument.load(new File("./cctemp-simple.pdf"), ownerPassword); > tplDoc.setAllSecurityToBeRemoved(true); > srcDoc.close(); > tplDoc.getDocumentCatalog().getAcroForm().setNeedAppearances(true); > tplDoc.save("ccmig-simple.pdf"); > tplDoc.close(); > } >
got it an are able to reproduce the issue. BR Maruan > > Cheers > Roberto > > On Mon, Jul 27, 2015 at 11:56 AM, Maruan Sahyoun <sahy...@fileaffairs.de> > wrote: > >> Hi, >>> Am 27.07.2015 um 11:49 schrieb Andreas Lehmkühler <andr...@lehmi.de>: >>> >>> >>> >>>> Roberto Nibali <rnib...@gmail.com> hat am 27. Juli 2015 um 10:29 >> geschrieben: >>>> >>>> >>>> Hi Andreas >>>> >>>> Thanks for the quick reply. >>>> >>>> On Mon, Jul 27, 2015 at 9:55 AM, Andreas Lehmkühler <andr...@lehmi.de> >>>> wrote: >>>> >>>>> >>>>> >>>>>> Andreas Lehmkühler <andr...@lehmi.de> hat am 27. Juli 2015 um 09:37 >>>>>> geschrieben: >>>>>> >>>>>> >>>>>> Hi Roberto, >>>>>> >>>>>>> Roberto Nibali <rnib...@gmail.com> hat am 27. Juli 2015 um 09:28 >>>>>>> geschrieben: >>>>>>> >>>>>>> >>>>>>> Dear developers >>>>>>> >>>>>>> The last commit 1692730 by lehmi, 18:36, broke the PDFWriter. The >>>>> result >>>>>>> is: The file xx.pdf cannot be open; It may be damaged or use a file >>>>> format >>>>>>> that Preview doesn’t recognize. The same when using Acrobat >>>>> Professional. >>>>>>> >>>>>>> Reverting the commit to the old one makes everything work again. What >>>>> is >>>>>>> the reason for this change? >>>>>>> >>>>>>> // use previous startXref value as new PREV value >>>>>>> trailer.setLong(COSName.PREV, doc.getStartXref()); >>>>>>> //trailer.removeItem(COSName.PREV); >>>>>>> >>>>>>> The trailer.removeItem(COSName.PREV) works, the new >>>>>>> trailer.setLong(COSName.PREV, doc.getStartXref()) code does not. >>>>>> Thanks for your hint. >>>>>> >>>>>> Can you be a little bit more specific, please? What kind of pdf did >> you >>>>> try to >>>>>> sign? Can you provide us with a sample pdf? >>>>> >>>> >>>> As far as I can tell, I'm not trying to sign any document. I'm working >> on a >>>> tool that migrates form fields from a source document to a new template >>>> document (containing the same fields, however some CI/CD changes), and >>>> subsequently saves the document as a new PDF with suffix "-migrated". >>>> >>>> In fact, I can trigger this behaviour with the following simple code >> (which >>>> does nothing else than open the source PDF, the template PDF, removes >> the >>>> security, sets the need for auto-generated appearances, and saves the >>>> template into a new PDF): >>>> >>>> private static PDDocument srcDoc; >>>> private static PDDocument tplDoc; >>>> >>>> @Test >>>> public static void SimpleTest() throws IOException { >>>> String ownerPassword = "limitedHappiness"; >>>> srcDoc = PDDocument.load(new File("./ccalt.pdf"), ownerPassword); >>>> tplDoc = PDDocument.load(new File("./cctemp.pdf"), ownerPassword); >>>> tplDoc.setAllSecurityToBeRemoved(true); >>>> srcDoc.close(); >>>> tplDoc.getDocumentCatalog().getAcroForm().setNeedAppearances(true); >>>> tplDoc.save("ccmig.pdf"); >>>> tplDoc.close(); >>>> } >>>> >>>> Due to signed NDAs, I cannot send you the PDF. If we can't solve the >>>> issue, I'll try to generate a stripped down version for you, however >> that's >>>> going to take a day or so, and I have other pending issues which I'd >> like >>>> to address first, as the deadline for the final delivery of the tool is >> now >>>> definitely coming up. >> >> could you provide us with a stripped down version even if the change >> resolves the issue as I tried to replicate it with some sample PDFs I have >> and haven't been able to do so? >> >> BR >> Maruan >> >>> OK, I see you are not using an incremental update feature. The name of >> the >>> modified method "doWriteXRefInc" pretends to be limited to incremental >> updates, >>> but it isn't. >>> >>>> >>>>> I just had another idea. Can you please check the following change >>>>> >>>>> if (trailer.getItem(COSName.PREV != null)) >>>>> { >>>>> trailer.setLong(COSName.PREV, doc.getStartXref()) >>>>> } >>>>> >>>>> >>>> I modified to the following code, so it compiles: >>>> >>>> COSDictionary trailer = doc.getTrailer(); >>>> // use previous startXref value as new PREV value >>>> //trailer.setLong(COSName.PREV, doc.getStartXref()); >>>> //trailer.removeItem(COSName.PREV); >>>> if (trailer.getItem(COSName.PREV) != null) >>>> { >>>> trailer.setLong(COSName.PREV, doc.getStartXref()); >>>> } >>>> >>>> No change, it still breaks my simple test case. >>> I'm not at home, so that I can't check that myself, but I guess the >> following >>> should do the trick >>> if (incrementalUpdate) >>> { >>> trailer.setLong(COSName.PREV, doc.getStartXref()); >>> } >>> >>>> >>>> On a side note (not understanding anything about PDFBox internals): Your >>>> change seems pretty invasive just from an outsider's perspective >>>> interpreting the method's name. Before your change, you basically seem >> to >>>> have removed the COS entry PREV, after your change, you set it to the >>>> position of the xref section. I'm sure you know what you're doing, it >> just >>>> does not look minimally invasive in what I would call the hotpath of >>>> PDFWriter ;). >>>> >>>> Cheers >>>> Roberto >>> >>> BR >>> Andreas >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org >>> For additional commands, e-mail: users-h...@pdfbox.apache.org >>> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org >> For additional commands, e-mail: users-h...@pdfbox.apache.org >> >> --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org For additional commands, e-mail: users-h...@pdfbox.apache.org