gpt4 book ai didi

forms - 使用 PdfCopy 复制 pdf 表单在 itextsharp 5.4.5.0 中不起作用

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

在 iText 5.4.4 的发行说明中,它说:

From now on you can now merge forms and preserve the tagged PDF structure when using the addDocument() method in PdfCopy. At the same time, we've deprecated PdfCopyFields.*



我尝试将多个 pdf 文档合并为一个 pdf 文档。如果这些文档之一是带有 acroFields 的 pdf 表单,则这些字段在输出文档中将不可见。当我在 PdfCopy 中使用 addDocument() 方法时就是这种情况。
当我在 PdfCopyFields 中使用 addDocument() 方法时,它工作正常。 iTextSharp 中不推荐使用 PdfCopyFields,但 PdfCopy 工作正常吗?还有一个不使用 PdfCopyFields 的原因(来自“iText in Action”:

Don’t use PdfCopyFields to concatenate PDF documents without form fields. As opposed to concatenating documents using PdfCopy, Pdf- CopyFields needs to keep all the documents in memory to update the combined form. This can become problematic if you’re trying to concatenate large documents.



这是我使用的代码:
public static void MergePdfs4()
{
var f1 = @"C:\Users\paulusj\Downloads\OoPdfFormExampleFilled.pdf";
var f2 = @"c:\GEODAN\work\EV_Original.pdf";

using (
Stream outputPdfStream = new FileStream("combined4.pdf ", FileMode.Create, FileAccess.Write,
FileShare.None))
{
var document = new Document();
var copy = new PdfCopy(document, outputPdfStream);
document.Open();
copy.AddDocument(new PdfReader(f1));
copy.AddDocument(new PdfReader(f2));
copy.Close();
}
}

奇怪的是,当我使用 Adob​​e Reader“另存为”复制 EV_Original.pdf 时,副本(几乎)正确合并。所以在输出 pdf 中我可以看到表单字段。
当我使用此代码时:
public static void MergePdfs3()
{
var f1 = @"C:\Users\paulusj\Downloads\OoPdfFormExampleFilled.pdf";
var f2 = @"c:\GEODAN\work\EV_Original.pdf";

using (Stream outputPdfStream = new FileStream("combined3.pdf ", FileMode.Create, FileAccess.Write,
FileShare.None))
{

var copy = new PdfCopyFields(outputPdfStream);
copy.AddDocument(new PdfReader(f1));
copy.AddDocument(new PdfReader(f2));
copy.Close();
}
}

它工作正常。但是在此代码中使用了 PdfCopyFields。

使用的 pdf 可以在这里找到:
Example.pdf
EV_Original.pdf

EV_Original.pdf 有什么问题,还是 PdfCopy 没有正确实现?

最佳答案

这里有几个问题。

1) 您必须为 PdfCopy 启用表单域合并:

// ...
var copy = new PdfCopy(document, outputPdfStream);
copy.SetMergeFields();
document.Open();
// ...

这适用于 iText 5.4.5 (Java),但对于 iTextSharp Reader/Acrobat,在显示合并文档的第 2 页时会提示嵌入字体。这可能是一个移植问题。

2) EV_Original.pdf 没有表单域的外观(“可视化”)。相反,它有 NeedAppearances标志设置。这表示 PDF 查看器在显示文档时需要生成外观。
PdfCopy不处理 NeedAppearances目前正确,因此未在输出文档中设置。这需要在 iText 中修复。作为解决方法,您可以设置 NeedAppearances合并后在您的输出文档上:
PdfReader postreader = new PdfReader("combined4.pdf");
PdfStamper poststamper = new PdfStamper(postreader, new FileStream("combined4-needappearances.pdf", FileMode.Create));
poststamper.AcroFields.GenerateAppearances = true;
poststamper.Close();

但考虑到 iTextSharp 5.4.5 中的移植错误,我建议使用 PdfCopyFields直到 PdfCopy在下一个版本中修复。 PdfCopyFields 的内存使用情况和 PdfCopy合并 Acroforms 时类似。这是 Acroform 合并所固有的:需要将更多信息保存在内存中。这就是为什么它必须在 PdfCopy 中显式启用的原因。使用 SetMergeFields() .

关于forms - 使用 PdfCopy 复制 pdf 表单在 itextsharp 5.4.5.0 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20656540/

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