pdfbox-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Phillip Simmons <simmons.phil...@conwaytruckload.com>
Subject modify multi-page pdf 2nd call to document.importpage() results in no modifcation
Date Wed, 15 May 2013 19:16:20 GMT
I am trying to load in a pdf template x number of times and modify the loaded template.  The
2nd page of the pdf does not get modified but the first page and all pages after the 2nd do
get modified.

My code
package org.apache.pdfbox.pdmodel;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

import java.io.IOException;
import java.io.File;

public class HRreports {

      /**
      * @param args
      * @throws IOException
       * @throws COSVisitorException
       */
      public static void main(String[] args) throws IOException, COSVisitorException
      {
            int numPages = 3;
            String path = "Test string";
            String label = "I am the 2nd sentence";
            PDDocument document = null;
            File file = new File("/Users/Desktop/PDFtemplate.pdf");
            document = PDDocument.load(file);
            PDPage page = (PDPage) document.getDocumentCatalog().getAllPages().get(0);
            PDPageContentStream contentStream = new PDPageContentStream(document, page, true,
false);

      int n = 0;
      while (n < numPages)
      {
        n++;
        document.importPage(page);
      draw(document, page, path, 85, 650);
      draw(document, page, label, 85, 641);


      }
      document.save("/Users/Desktop/HRReports.pdf");
      document.close();
      }

      public static void draw(PDDocument document, PDPage page, String text, int indent, int
offset) throws IOException
      {

      PDPageContentStream contentStream = new PDPageContentStream(document, page, true, true);
      PDFont font = PDType1Font.COURIER;
      contentStream.setNonStrokingColor(0,0,0);
        contentStream.beginText();
      contentStream.setFont(font, 11);
      contentStream.moveTextPositionByAmount(indent, offset);
      contentStream.drawString(text);
      contentStream.endText();
      contentStream.close();
      }
}




I have also tried not using a loop and create a contentstream write the text, close the stream.
 Then create a new stream import the page write the text, close the stream.  This worked until
I added the String label to the 2nd content stream I had created and then even it added that
string to the first page and all pages after the 2nd (the String path was being added to all
pages but the String label skipped the 2nd page)

I was wondering if anyone else has ran into this problem, am I doing something wrong, or is
there just a better way to create a multi-page pdf where I want all pages to follow a template
but I want to modify the templates.

Full discloser I am going to do this in RPG but was trying to figure this out in Java since
I didn't have to worry about prototypes and if it was failing because I did the prototype
wrong.  Also the modification is a mailing label if that matters.

Thank you in advance for any help.
This e-mail and any files transmitted with it are confidential and solely for the use of the
individual or entity to which they are addressed and intended. If you have received this e-mail
in error, please notify the sender by return e-mail. If you are not the intended recipient,
you may not read, copy, retain, print, disclose, or distribute this message or its contents
to any other individual, for such actions may be unlawful. WARNING: We take certain precautions
to prevent viruses, but we are not responsible for loss or damage arising from the use of
this e-mail or attachments.

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message