【问题标题】:iTextSharp merging documents with formsiTextSharp 将文档与表单合并
【发布时间】:2013-12-31 21:32:04
【问题描述】:

所以我有一个相当基本的 iTextSharp 实现来创建 PDF。作为其中的一部分,需要读取任何“附加文档”并将其合并到生成的文档中。这很好用,只是我刚刚遇到了某人附加的文件,该文件破坏了所有内容。 PDF 仍会生成,但输出的文档仅显示第一页,并且 Adob​​e Reader 尝试查看第 2 - 7 页时会吐出错误(如果对任何人都有意义,则为 18)。

在第 8 页上是另一个在问题文档之前合并的文档,并且显示正常。然后导致问题的合并文档是下一个(25 页)并且 IT 显示正常。

但是合并该文档会破坏之前的页面。这真的很奇怪,因为我希望它会破坏在它之前合并的文档,以及第 1 页等......

我可以在文档中看到的唯一不同之处是正在合并的问题文档的第 2 页上有一张填写好的表格。我正在尝试让这里的一位比我更了解 PDF 的人给我一个没有该表格的人,以确保这是问题所在,但它似乎是我现在最好的候选人......

我尝试了以下方法(添加“删除任何表单”部分),但我仍然遇到问题。有什么想法吗?

var reader = new PdfReader(filePath);

// Remove any forms
if (reader.AcroForm != null)
{
    var memStream = new MemoryStream();
    var stamper = new PdfStamper(reader, memStream) { FormFlattening = true };
    stamper.Close();
    reader = new PdfReader(memStream.ToArray());
}

var numberOfPages = reader.NumberOfPages;

var cb = writer.DirectContent;

var i = 0;
while (i < numberOfPages)
{
    i++;
    document.SetPageSize(reader.GetPageSizeWithRotation(i));
    document.NewPage();

    var page = writer.GetImportedPage(reader, i);
    var rotation = reader.GetPageRotation(i);

    if (rotation == 90 || rotation == 270)
    {
        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
    }
    else
    {
        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
    }
}

reader.Close();

【问题讨论】:

  • 请提供相关文件。

标签: c# itextsharp


【解决方案1】:

请阅读chapter 6 of my book,您会注意到使用PdfWriter 连接(或合并)PDF 文档是错误的。使用 PdfCopy 连接 PDF。

如果要合并的文档包含 AcroForm 表单,本书建议使用PdfCopyFields。在 iTextSharp 的更新版本中,PdfCopyFields 已弃用,取而代之的是此处描述的方法:copy pdf form with PdfCopy not working in itextsharp 5.4.5.0

没有例子,没有人能给你更好的答案。您需要共享一些导致问题的 PDF。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 2023-03-22
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多