【发布时间】:2014-01-06 12:52:42
【问题描述】:
在 iText 5.4.4 的发行说明中说:
从现在开始,您现在可以合并表单并保留标记的 PDF 在 PdfCopy 中使用 addDocument() 方法时的结构。同时 时间,我们已经弃用了 PdfCopyFields。*
我尝试将多个 pdf 文档合并为一个 pdf 文档。如果这些文档之一是带有 acroFields 的 pdf 表单,则这些字段将在输出文档中不可见。当我在 PdfCopy 中使用 addDocument() 方法时就是这种情况。 当我在 PdfCopyFields 中使用 addDocument() 方法时,它工作正常。 PdfCopyFields 在 iTextSharp 中已弃用,但 PdfCopy 是否正常工作?不使用 PdfCopyFields 的另一个原因(来自“iText in Action”:
不要使用 PdfCopyFields 连接没有表单的 PDF 文档 字段。与使用 PdfCopy 连接文档相反,Pdf- CopyFields 需要将所有文档保存在内存中以更新 组合形式。如果您尝试这样做,这可能会出现问题 连接大型文档。
这是我使用的代码:
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();
}
}
奇怪的是,当我使用 Adobe 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 没有正确实现?
【问题讨论】:
标签: forms pdf copy itextsharp