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

What is the smarter solution to retrieve the number of pages of this created PDF file?

这是我第一次使用 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 文件放到一个目录中。它工作正常。

现在我必须计算这个文件的页码。

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

具体说:

You can query a PdfReader instance to get the number of pages in the document

所以在我的代码中我做了这样的事情:

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 页面object)我有一些更聪明的解决方案来创建一个新的 PdfReader 对象来读取最终的 pdf 文件。还是最好的解决方案?

Tnx

创建完 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 实例来计算页面的总数最后结果。相反,您可以将添加到 PdfCopy:

reader 对象的页数相加
int total = reader1.getNumberOfPages() + reader2.getNumberOfPages();

请确保在关闭 PdfReader 个实例之前计算总页数