[
https://issues.apache.org/jira/browse/PDFBOX-4614?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16896894#comment-16896894
]
Michael Klink edited comment on PDFBOX-4614 at 7/31/19 8:25 AM:
----------------------------------------------------------------
The code path in your source does not include any {{importPage}} calls (because
of the initial {{boolean addPage = true}}), and the new page dictionaries you
create are based on flat (not deep) copies of the respectively previous page
dictionary. This causes new content streams added later to also occur in
previous pages.
Thus, the described issue appears to be incorrect API use.
was (Author: mkl):
The code path in your source does not include any `importPage` calls (because
of the initial `boolean addPage = true`), and the new page dictionaries you
create are based on flat (not deep) copies of the respectively previous page
dictionary. This causes new content streams added later to also occur in
previous pages.
> Duplicated text content in template
> -----------------------------------
>
> Key: PDFBOX-4614
> URL: https://issues.apache.org/jira/browse/PDFBOX-4614
> Project: PDFBox
> Issue Type: Bug
> Affects Versions: 2.0.16
> Reporter: michele valdinoci
> Priority: Major
> Attachments: input.pdf, output-23.pdf, output-importpage.pdf,
> output.pdf
>
>
> I'm trying to create a pdf, starting from another on, using "template"
> techinque to optimize output size when pages is repeated. I will print text
> values with PDPageContentStream for each page. From the second import of
> first page, all written texts are duplicated also in page 1!
> In this sample I compose pdf with input page in sequence: 1, 2, 1 finally 2
> (view attached output.pdf). First and third output page have same texts
> ("page 1" and "page 3"!):
>
> {code:java}
> boolean addPage = true;
> PDDocument ipdf = PDDocument.load(new File("input.pdf"));
> PDDocument opdf = new PDDocument();
> PDPage pag1 = null;
> COSDictionary dic1 = null;
> if (addPage)
> {
> dic1 = new COSDictionary(ipdf.getPage(0).getCOSObject());
> pag1 = new PDPage(dic1);
> opdf.addPage(pag1);
> }
> else
> {
> pag1 = opdf.importPage(ipdf.getPage(0));
> }
> // STREAM 1
> PDPageContentStream stream = new PDPageContentStream(opdf, pag1,
> AppendMode.APPEND, true, true);
> stream.setNonStrokingColor(Color.BLUE);
> stream.beginText();
> stream.setFont(PDType1Font.HELVETICA, 15f);
> stream.newLineAtOffset(10, 780);
> stream.showText("pag 1");
> stream.endText();
> stream.close();
> PDPage pag2;
> if (addPage)
> {
> COSDictionary dic2 = new COSDictionary(ipdf.getPage(1).getCOSObject());
> pag2 = new PDPage(dic2);
> opdf.addPage(pag2);
> }
> else
> {
> pag2 = opdf.importPage(ipdf.getPage(1));
> }
> // STREAM 2
> PDPageContentStream stream2 = new PDPageContentStream(opdf, pag2,
> AppendMode.APPEND, true, true);
> stream2.setNonStrokingColor(Color.BLUE);
> stream2.beginText();
> stream2.setFont(PDType1Font.HELVETICA, 15f);
> stream2.newLineAtOffset(10, 760);
> stream2.showText("pag 2");
> stream2.endText();
> stream2.close();
> PDPage pag3;
> COSDictionary dic3;
> if (addPage)
> {
> dic3 = new COSDictionary(ipdf.getPage(0).getCOSObject());
> pag3 = new PDPage(dic3);
> opdf.addPage(pag3);
> }
> else
> {
> pag3 = opdf.importPage(ipdf.getPage(0));
> }
> // STREAM 3
> PDPageContentStream stream3 = new PDPageContentStream(opdf, pag3,
> AppendMode.APPEND, true, true);
> stream3.setNonStrokingColor(Color.BLUE);
> stream3.beginText();
> stream3.setFont(PDType1Font.HELVETICA, 15f);
> stream3.newLineAtOffset(10, 730);
> stream3.showText("pag 3");
> stream3.endText();
> stream3.close();
> PDPage pag4;
> if (addPage)
> {
> COSDictionary dic4 = new COSDictionary(ipdf.getPage(1).getCOSObject());
> pag4 = new PDPage(dic4);
> opdf.addPage(pag4);
> }
> else
> {
> pag4 = opdf.importPage(ipdf.getPage(1));
> }
> // STREAM 4
> PDPageContentStream stream4 = new PDPageContentStream(opdf, pag4,
> AppendMode.APPEND, true, true);
> stream4.setNonStrokingColor(Color.BLUE);
> stream4.beginText();
> stream4.setFont(PDType1Font.HELVETICA, 15f);
> stream4.newLineAtOffset(10, 730);
> stream4.showText("pag 4");
> stream4.endText();
> stream4.close();
> opdf.save("out.pdf");
> ipdf.close();
> opdf.close();{code}
--
This message was sent by Atlassian JIRA
(v7.6.14#76016)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]