检索此创建的PDF文件页数的更智能的解决方案是什么?

时间:2015-03-11 14:34:56

标签: java pdf pdf-generation itext

这是我第一次使用iText,而且我对我的解决方案的正确性有所了解。

在应用程序中,我创建一个由许多页面(几百个)组成的PDF,然后将其保存在文件中,执行以下操作:

String result = outputPath + "\\" + pdfName + ".pdf";
com.itextpdf.text.Document document = new com.itextpdf.text.Document(com.itextpdf.text.PageSize.A4, 0, 0, 0, 0);

PdfCopy copy = new PdfCopy(document, new FileOutputStream(result));

.......................................................
.......................................................
.......................................................

因此,基本上,最后我会将 .pdf 文件放入目录中。它工作正常。

现在我必须将页码计入此文件。

搜索一些文档我发现这个链接(我认为是官方文档):http://www.manning.com/lowagie2/samplechapter6.pdf

具体说:

  

您可以查询PdfReader实例以获取其中的页数   文件

所以在我的代码中我做了类似的事情:

try {
    PdfReader pdfReader = new PdfReader(result);
    System.out.println("NUMERO PAGINE PDF CONCATENAZIONE FATTURE: " + pdfReader.getNumberOfPages());
    } catch (IOException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }

它工作正常,但我问的是,在我的情况下(我有 PdfCopy副本,我在其上添加 PdfImportedPage 页面对象)我有一些更聪明的解决方案创建一个新的 PdfReader 对象,读取最终的pdf文件。或者它是最好的解决方案?

TNX

1 个答案:

答案 0 :(得分:1)

完成PDF创建后,您可以创建PdfReader实例,并询问reader对象的总页数。那是真的。

然而:

您似乎无法从头开始创建PDF。相反,您使用PdfCopy来连接许多不同的文档。请允许我填写您的代码:

PdfReader reader1 = new PdfReader(path1);
PdfReader reader2 = new PdfReader(path2);
Document document = new Document();
PdfCopy copy = new PdfCopy(document, new FileOutputStream(filename));
document.open();
copy.addDocument(reader1);
copy.addDocument(reader2);
document.close();
reader1.close();
reader2.close();

在您的代码段中,您省略了您已经创建PdfReader个对象的事实,因此您无需创建新的PdfReader实例来计算最终结果中的总页数。相反,您只需将添加到reader的{​​{1}}个对象中的页面数加起来:

PdfCopy

确保在关闭int total = reader1.getNumberOfPages() + reader2.getNumberOfPages(); 个实例之前计算的总页数。