【问题标题】:Can I convert a pre-existing iTextSharp Document to a byte array我可以将预先存在的 iTextSharp 文档转换为字节数组吗
【发布时间】:2017-05-18 19:32:04
【问题描述】:

有许多解决方案可以创建 iTextSharp 文档,然后返回与创建该文档相关的内存流对象,但有没有办法将预先存在的 iTextSharp 文档转换为内存流或字节数组?

// convert the PDF Document to a byte array 
public byte[] ToByte (Document pdf_doc)
{
    byte[] rtn_array = null;
    **// what goes here, something using PdfReader ???**
    return rtn_array;
}

【问题讨论】:

标签: c# itext


【解决方案1】:

有没有办法将预先存在的 iTextSharp 文档转换为内存流或字节数组?

没有。

在 iText(Sharp) 版本 7 之前的架构中,Document 只是一个外观类,它知道一些格式信息(默认页面大小、边距,...),并且可以给定抽象文档部分(段落、表格、 ...) 将其转发给已注册的侦听器类,这些类使它们成为输出格式的实体并将它们写出到流中,然后几乎立即忘记它们。

(在版本 5 之前,iText 发行版还包含用于创建 RTF 的类!但即使对于版本 5.x,您也可以注册自己的侦听器以将抽象文档部分转换为您选择的内容。)

因此,有效地序列化和反序列化 iText Document(如果可能的话)只能恢复一些抽象的文档格式,而不是任何具体的内容。但即使这样也不支持。


与将整个内容模型保存在内存中的Document 类库相比,iText 专为高吞吐量、大尺寸、低占用空间的服务器应用程序而设计。

您可以将此与 XML DOM 与 XML SAX 之间的区别进行比较; iText 可以与 SAX(或 StAX)进行比较,其中库仅知道很少的文档,而 DOM 则在内存中存在完整的文档表示。


当然,您可以做的是让注册的PdfWriter 写入MemoryStream,稍后您可以通过PdfReader 读取并通过PdfStamper 进行操作。但我想这不是你想的。

【讨论】:

  • 谢谢,大部分内容我都没有完全理解,但是将 iText 文档作为流而不是静态对象的想法可以解释一些使用它的语法。
  • @vs_coder 你可以点击左上角的勾来接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 2010-12-20
  • 2016-04-27
  • 2021-07-08
  • 2016-04-15
相关资源
最近更新 更多