天天看點

使用pdfBox合并pdf解決兩種情況:

1 兩個pdf合并成一個pdf

public static void main(String[] args) throws IOException,

DocumentException {

PdfReader reader1 = new PdfReader(“H:/abcd/PDF1.pdf”);

PdfReader reader2 = new PdfReader(“H:/abcd/PDF2.pdf”);

FileOutputStream out = new FileOutputStream("H:/abcd/PDF4.pdf");

    Document document = new Document();
    PdfWriter writer = PdfWriter.getInstance(document, out);

    document.open();
    PdfContentByte cb = writer.getDirectContent();

    int totalPages = 0;
    totalPages += reader1.getNumberOfPages();
    totalPages += reader2.getNumberOfPages();

    List<PdfReader> readers = new ArrayList<PdfReader>();
    readers.add(reader1);
    readers.add(reader2);

    int pageOfCurrentReaderPDF = 0;
    Iterator<PdfReader> iteratorPDFReader = readers.iterator();

    while (iteratorPDFReader.hasNext()) {
        PdfReader pdfReader = iteratorPDFReader.next();

        while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
            document.newPage();
            pageOfCurrentReaderPDF++;
            PdfImportedPage page = writer.getImportedPage(pdfReader,
                    pageOfCurrentReaderPDF);
            cb.addTemplate(page, 0, 0);
        }
        pageOfCurrentReaderPDF = 0;
    }
    out.flush();
    document.close();
    out.close();
}
           

2 兩個PDF各自其中的一頁合并為一個PDF中的一頁(合成兩頁PDF的内容不超過一頁)

public static final String file1 = “H:/abcd/PDF1.pdf”;

public static final String file2 = “H:/abcd/PDF2.pdf”;

public static void main(String[] args) throws IOException {
    combine2();
}

public static void combine2() {
    try {
        PDDocument _document1 = PDDocument.load(new File(file1));
        PDPage _page1 = _document1.getPage(0);
        PDRectangle _cropBox1 = _page1.getCropBox();

        float originalHeight = _cropBox1.getHeight();

        _cropBox1.setLowerLeftY(-(PDRectangle.A4.getHeight() - _cropBox1
                .getHeight()));
        _page1.setMediaBox(_cropBox1);
        _page1.setCropBox(_cropBox1);

        ByteArrayOutputStream _baos1 = new ByteArrayOutputStream();
        _document1.save(_baos1);
        _document1.close();

        PDDocument _document2 = PDDocument.load(new File(file2));
        PDPage _page2 = _document2.getPage(0);
        PDRectangle _cropBox2 = _page2.getCropBox();

        _cropBox2.setLowerLeftY(-(PDRectangle.A4.getHeight()
                - _cropBox2.getHeight() + originalHeight + 20));
        _page2.setMediaBox(_cropBox2);
        _page2.setCropBox(_cropBox2);

        ByteArrayOutputStream _baos2 = new ByteArrayOutputStream();
        _document2.save(_baos2);
        _document2.close();

        PDFMergerUtility mergePdf = new PDFMergerUtility();
        mergePdf.addSource(new ByteArrayInputStream(_baos1.toByteArray()));
        mergePdf.addSource(new ByteArrayInputStream(_baos2.toByteArray()));

        Overlay overLay = new Overlay();
        overLay.setInputPDF(PDDocument.load(_baos1.toByteArray()));
        overLay.setDefaultOverlayPDF(PDDocument.load(_baos2.toByteArray()));
        Map<Integer, String> specificPageOverlayFile = new HashMap<Integer, String>();
        PDDocument _doc = overLay.overlay(specificPageOverlayFile);

        PDPageXYZDestination dest2 = new PDPageXYZDestination();
        dest2.setPage(_doc.getPage(0));
        dest2.setZoom(1f);
        dest2.setTop(new Float(PDRectangle.A4.getHeight()).intValue());
        PDActionGoTo action2 = new PDActionGoTo();
        action2.setDestination(dest2);
        _doc.getDocumentCatalog().setOpenAction(action2);

        _doc.save("H:/abcd/PDF10.pdf");
    } catch (Exception e) {
        e.printStackTrace();
    }
}