【问题标题】:Slow instantiation of itextsharp pdfreaderitextsharp pdfreader的慢实例化
【发布时间】:2017-11-29 07:40:33
【问题描述】:

早上好,我正在使用 itextsharp 开发一个 pdf 合并程序,以创建单个文件,然后由打印机作为唯一作业处理。对于一些 pdf(不是全部),pdfreader 的实例化很慢(大约需要 1 分钟)。我已经测试了 5.5.10 版甚至 7 版,但问题仍然存在(即使 7 版快一点)

Dim document As Document = New Document
Dim PdfCopy As PdfSmartCopy = New PdfSmartCopy(document, New 
FileStream(filename, FileMode.Create))
document.Open()
Dim numPdf As Integer = pdfs.Count
For intI = 0 To numPdf - 1
 strFile = pdfs(intI)
 Debug.Print(Now.ToString)
 Dim reader As PdfReader = New PdfReader(strFile) 'SLOW
 Debug.Print(Now.ToString)
 Dim pages As Integer = reader.NumberOfPages
 For intJ = 0 To pages - 1
   document.SetPageSize(reader.GetPageSizeWithRotation(1))
   Dim page As PdfImportedPage = PdfCopy.GetImportedPage(reader, intJ + 1)
   PdfCopy.AddPage(page)
 Next
 reader.Close()
 reader = Nothing
Next
document.Close()

任何建议将不胜感激 谢谢

【问题讨论】:

  • 正如你所说的那样,你观察到这种行为“使用一些 pdf(不是全部)”。因此,我们需要一个可以观察和重现该行为的示例 PDF。请分享这样的例子。
  • 我在这里托管了一个文件a.uguu.se/SAwzwnZoiGtD.pdf
  • 该示例文档已损坏。它的主要交叉引用部分声称它有 37 个条目,但实际上只有 35 个条目......因此,iText 尝试在加载期间重建交叉引用。这可能是某种缓慢的原因。 (顺便说一句,对 PDF 缺陷的一个提示是,当您在当前的 Adob​​e Reader 中打开 PDF 时,读者会询问是否在关闭之前保存更改——修复是一种可能的更改。)其他加载 PDF 的速度也很慢吗?如果有些不是,请分享一个未损坏的示例。
  • 我想你已经找到问题所在了,我注意到 acrobat 要求我保存文件,但我没有给予正确的关注。所有慢速文件都来自同一个客户,所以我猜他们都有同样的问题。我现在必须找到一种方法来绕过缓慢,maibe 制作 pdf 的 pdf 打印。非常感谢您的建议
  • 好的,我将上面的问题作为实际答案。

标签: vb.net pdf itext


【解决方案1】:

示例文档 SAwzwnZoiGtD.pdf(由 OP 在评论中提供)已损坏:其主要交叉引用部分声称它有 37 个条目,但该表实际上只有 35 个条目...

因此,iText 在为它实例化 PdfReader 时尝试重建交叉引用。这可能是某些缓慢的原因,特别是因为 PDF 中还有其他奇怪的伪影,例如间接 PDF 对象 8 和 9 之间有一个“0.02 w”:

8 0 obj
<< /Type /Font /Subtype /Type1 /Name /ETI /BaseFont /Arial,Italic /Encoding 3 0 R >>
endobj
0.02 w
9 0 obj 

此类伪影也会阻碍修复机制。

【讨论】:

    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多