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();
}


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
>
>

Reply via email to