0

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

我一直在查看PdfWriterPdfReader类的 iText API,但我不确定如何将数据从原始 PDF 写入较小的 PDF,更不用说如何首先创建 PDF 文件了。

这些方法中哪一种更有意义?还是有更简单、更理想的方法?

4

3 回答 3

3

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

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

如果是 iText,请查看iText in Action — 第 2 版示例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。

于 2013-06-14T08:58:05.590 回答
1

Well if your goal is to split a pdf file's pages here is where you should go about it : click here or just use acrobat (huge app)

but if you still want to use java, I think this will be useful to you (in creating pdf files from text): click here although I never used these libraries but they seem fine ..

and I think this topic will help you find your pdf reader : here

I hope I could help even a little

于 2013-06-14T01:51:57.907 回答
-1

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

PDFTK

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

于 2013-06-14T04:08:54.503 回答