功能,可以使用的iText来连接/ PDF文件合并在一起 - 导致一些问题功能,可以使用的iText

2019-05-12 03:31发布

我使用下面的代码利用iText合并PDF文件一起:

public static void concatenatePdfs(List<File> listOfPdfFiles, File outputFile) throws DocumentException, IOException {
        Document document = new Document();
        FileOutputStream outputStream = new FileOutputStream(outputFile);
        PdfWriter writer = PdfWriter.getInstance(document, outputStream);
        document.open();
        PdfContentByte cb = writer.getDirectContent();
        for (File inFile : listOfPdfFiles) {
            PdfReader reader = new PdfReader(inFile.getAbsolutePath());
            for (int i = 1; i <= reader.getNumberOfPages(); i++) {
                document.newPage();
                PdfImportedPage page = writer.getImportedPage(reader, i);
                cb.addTemplate(page, 0, 0);
            }
        }
        outputStream.flush();
        document.close();
        outputStream.close();
    }

这通常的伟大工程! 但是一旦过了一阵,它是由90度旋转的某些页面? 有谁有这种情况发生?

我期待到PDF文件本身,看看有什么特别之处正在翻转的。

Answer 1:

在一段时间有错误,因为一旦你使用了错误的方法来连接文件。 请阅读我的书的第6章 ,你会发现,使用PdfWriter来连接(或合并)PDF文档是错误的:

  • 你完全忽略原始文档页面的页面大小(你以为他们都是A4大小),
  • 你忽略了页面边界,例如裁切框(如果存在的话),
  • 你忽略了存储在页字典中的旋转值,
  • 你扔掉所有的交互性是存在的原始文档中,依此类推。

串联PDF文件使用完成PdfCopy ,例如见的FillFlattenMerge2例如:

Document document = new Document();
PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(dest));
document.open();
PdfReader reader;
String line = br.readLine();
// loop over readers
    // add the PDF to PdfCopy
    reader = new PdfReader(baos.toByteArray());
    copy.addDocument(reader);
    reader.close();
// end loop
document.close();

还有其他的例子书 。



Answer 2:

如果有人正在寻找它,使用上述布鲁诺Lowagie的正确答案,这里是似乎并不具备我上述的翻页问题函数的版本:

public static void concatenatePdfs(List<File> listOfPdfFiles, File outputFile) throws DocumentException, IOException {
        Document document = new Document();
        FileOutputStream outputStream = new FileOutputStream(outputFile);
        PdfCopy copy = new PdfSmartCopy(document, outputStream);
        document.open();
        for (File inFile : listOfPdfFiles) {
            PdfReader reader = new PdfReader(inFile.getAbsolutePath());
            copy.addDocument(reader);
            reader.close();
        }
        document.close();
}


文章来源: function that can use iText to concatenate / merge pdfs together - causing some issues
标签: java pdf itext