gpt4 book ai didi

pdf - iText - 如何将页面添加到使用 PdfCopy 创建的文档中

转载 作者:行者123 更新时间:2023-12-04 11:27:04 27 4
gpt4 key购买 nike

我正在使用 iText(特别是 iTextSharp 4.1.6),我想通过组合现有 PDF 中的页面来创建 PDF,同时插入从图像创建的新页面。

我分别使用 PdfCopy 和 PdfWriter 使这两部分分别工作。从图像创建页面的代码如下所示:

PdfWriter pw = PdfWriter.GetInstance(doc, outputStream);
Image img = Image.GetInstance(inputStream);
doc.Add(img);
doc.NewPage();

现在,由于 PdfCopy 继承自 PdfWriter,我想我可以使用相同的技术将这样的“图像页面”添加到我的 PdfCopy 对象中,但它不起作用(如果在上面的示例中实例化 PdfCopy 而不是 PdfWriter ,页面上没有任何内容)。

通过快速浏览源代码,我注意到当 PdfCopy 的构造函数调用父类(super class)构造函数时,它会使用一个新的 Document 对象,而不是传入的对象,所以我想这就是原因。

有没有更好的方法来解决这个问题?目前我最好的猜测是使用 PdfWriter 从图像创建单页 Pdf,然后使用 PdfCopy 将其添加到文档中,但这似乎是一种解决方法。

最佳答案

我最近遇到了这个问题,这里的答案实际上并没有那么有用。我的用例基本上是“将一堆 PDF 和图像(.jpg、.png 等)合并成一个 PDF”。我不得不使用 PdfCopy 因为它保留了诸如表单字段和标签之类的东西,而 PdfWriter 则没有。

基本上,因为 PdfCopy 不允许您使用 addPage() 创建新页面,所以您必须在内存中使用页面上的图像创建一个新的 PDF,然后使用 PdfCopy 从该 PDF 中复制页面。

例如:

    Document pdfDocument = new Document();
ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream();
PdfCopy copy = new PdfCopy(pdfDocument, pdfOutputStream);

pdfDocument.open();

for (File file : allFiles) {
if (/* file is PDF */) {
/* Copy all the pages in the PDF file into the new PDF */
PdfReader reader = new PdfReader(file.getAllBytes());
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
copy.addPage(copy.getImportedPage(reader, i);
}
} else {
/* File is image. Create a new PDF in memory, write the image to its first page, and then use PdfCopy to copy that first page back into the main PDF */
Document imageDocument = new Document();
ByteArrayOutputStream imageDocumentOutputStream = new ByteArrayOutputStream();
PdfWriter imageDocumentWriter = PdfWriter.getInstance(imageDocument, imageDocumentOutputStream);

imageDocument.open();

if (imageDocument.newPage()) {

image = Image.getInstance(file.getAllBytes());

if (!imageDocument.add(image)) {
throw new Exception("Unable to add image to page!");
}

imageDocument.close();
imageDocumentWriter.close();

PdfReader imageDocumentReader = new PdfReader(imageDocumentOutputStream.toByteArray());

copy.addPage(copy.getImportedPage(imageDocumentReader, 1));

imageDocumentReader.close();
}

}

关于pdf - iText - 如何将页面添加到使用 PdfCopy 创建的文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13987341/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com