用Java分隔PDF页面

时间:2013-06-14 01:41:27

标签: java pdf itext

我正在尝试将一个大型PDF分成几个不同长度的较小PDF。起初我尝试使用FileInputStream阅读原始PDF并找到签名的十六进制字符串,将其拆分为带FileOutputStream的较小文件(正如我对JPG所做的那样)。但是,我似乎无法找到十六进制字符串在原始文件中指定不同页面的内容。

我一直在查看iText API中的PdfWriterPdfReader类,但我不确定如何将数据从原始数据写入较小的PDF,让我们单独如何创建PDF文件。

哪种方法更有意义?还是有更简单,更理想的方式?

3 个答案:

答案 0 :(得分:3)

正如我对您的问题的评论中所提到的,没有签名十六进制字符串可以分割源PDF。 PDF文件由可以通过交叉引用表相互引用的对象组成。因此,用于给定单个页面的对象可以分布在整个文件上。此外,这些对象中的一些可以在多个页面上使用。例如。嵌入字体或重复页眉/页脚部分。

理解PDF格式的API可以从多页源PDF创建部分文档的集合。

如果是iText,请查看iText in Action — 2nd Edition示例Burst.java。中央代码是:

PdfReader reader = new PdfReader(SOURCE);
// We'll create as many new PDFs as there are pages
Document document;
PdfCopy copy;
// loop over all the pages in the original PDF
int n = reader.getNumberOfPages();
for (int i = 0; i < n; ) {
    document = new Document();
    copy = new PdfCopy(document, new FileOutputStream(String.format(RESULT, ++i)));
    document.open();
    copy.addPage(copy.getImportedPage(reader, i));
    document.close();
}
reader.close();

虽然此示例为每个页面创建一个结果PDF,但源代码显然指示如何创建包含原始页面范围的结果PDF。

答案 1 :(得分:1)

如果您的目标是拆分pdf文件的页面,那么您应该去哪里:click here  或者只是使用acrobat(巨大的应用程序)

但如果您仍想使用java,我认为这对您有用(在从文本创建pdf文件时):click here 虽然我从来没有使用过这些库,但看起来很好......

我认为这个主题可以帮助您找到您的PDF阅读器:here

我希望我能帮助一点

答案 2 :(得分:-1)

如果您对使用现成程序的想法持开放态度,我已经使用了这个程序,效果非常好:

PDFTK

它可以分割,组合和旋转页面,甚至还有一些内置逻辑,用于在重新组合时指定页面的顺序(并且可以从多个PDF文件中执行)。