Use PDFBox to Merge Pages?

2019-09-05 03:44发布

问题:

I know I can use PDFBox to merge multiple PDF's into one PDF. But is there a way to merge pages? For example, I have a header in PDF and want it to be inserted to the top of the first page of the combined PDF and push everything down. Is there a way to do it using PDFBox API?

回答1:

Here is some code that works to copy two files into a merged one with multiple copies of each one. It copies by pages. It's something I got using the information in the answer to this question: Can duplicating a pdf with PDFBox be small like with iText?

So all you have to do is to make one copy only of the first page of doc1 and one copy only of all pages of doc2. There's a comment where you'll have to make a change to leave off some pages.

final int COPIES = 1; // total copies

// Same code as linked answer mostly
PDDocument samplePdf = new PDDocument();

InputStream in1 = this.getClass().getResourceAsStream(DOC1_NAME);
PDDocument doc1 = PDDocument.load(in1);
List<PDPage> pages = (List<PDPage>) doc1.getDocumentCatalog().getAllPages();

// *** Change this loop to only copy the pages you want from DOC1

for (PDPage page : pages) {
    for (int i = 0; i < COPIES; i++) { // loop for each additional copy
        samplePdf.importPage(page);
    }
}

// Same code again mostly
InputStream in2 = this.getClass().getResourceAsStream(DOC2_NAME);
PDDocument doc2 = PDDocument.load(in2);
pages = (List<PDPage>) doc2.getDocumentCatalog().getAllPages();
for (PDPage page : pages) {
    for (int i = 0; i < COPIES; i++) { // loop for each additional copy
        samplePdf.importPage(page);
    }
}

// Then write the results out
File output = new File(OUT_NAME);
FileOutputStream out = new FileOutputStream(output);
samplePdf.save(out);

samplePDF.close();

in1.close();
doc1.close();
in2.close();
doc2.close();


标签: pdfbox