【问题标题】:Merging PDF with ITextSharp takes time将 PDF 与 ITextSharp 合并需要时间
【发布时间】:2016-01-14 11:12:29
【问题描述】:

我正在使用 ITextSharp 合并 PDF。 我的问题是当我合并巨大的 PDF 时,需要很长时间(几分钟)。看来“document.close()”需要这么长时间。

这是我的代码:

iTextSharp.text.Document doc = new iTextSharp.text.Document();

PdfCopy copy = new PdfCopy(doc, msOutput);
copy.SetMergeFields();

doc.Open();
byte[] byteArray = Convert.FromBase64String("someString");

PdfReader reader = new PdfReader(byteArray);
copy.AddDocument(reader);

doc.Close(); // <== It takes time here !
byte[] form = msOutput.ToArray();

我做错了什么吗? 我怎样才能改善这个合并时间?

【问题讨论】:

  • 您的代码中的“阅读器”是什么?它总是很长,还是变得更长(即,这可能是处置您的阅读器等的问题吗?
  • 我已经更新了我的代码。处理巨大的 PDF 总是需要时间(例如,我尝试合并 3 个 pdf,每个 36 页)
  • 36 页并不是那么大。它们是大文件吗?
  • 你能分享有问题的PDF吗?这可能是内部表格的问题。
  • 不幸的是,我不能真正分享它,因为它是用于机密用途。但是 pdf 包含一个包含很多字段(acrofields)的表单。

标签: c# pdf itextsharp


【解决方案1】:

您错过了一些 Close() 调用 - 这可能有助于减少您的时间:

byte[] form
using (var msOutput = new MemoryStream())
{
    iTextSharp.text.Document doc = new iTextSharp.text.Document();
    byte[] byteArray = Convert.FromBase64String("someString");

    PdfCopy copy = new PdfCopy(doc, msOutput);

    copy.SetMergeFields();

    doc.Open();

    PdfReader reader = new PdfReader(byteArray);

    copy.AddDocument(reader);

    reader.Close();
    copy.Close();

    doc.Close(); 

    form = msOutput.ToArray();
}

您还应该确保在使用后正确处理您的流。

【讨论】:

  • 谢谢,我试试。实际上,我的 MemoryStream 使用“使用”
  • 当我尝试关闭阅读器或副本或两者时,它会抛出错误“它已经关闭”。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 2011-01-15
  • 2023-03-03
  • 2013-12-08
相关资源
最近更新 更多