我可以将预先存在的iTextSharp文档转换为字节数组

时间:2017-05-18 19:32:04

标签: c# itext

有许多解决方案可用于创建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;
}

1 个答案:

答案 0 :(得分:0)

  

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

没有

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

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

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

与具有Document类的库相比,iText专为高吞吐量,大尺寸,低占用面积的服务器应用而设计。

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

当然,您可以做的是让已注册的PdfWriter写入MemoryStream,稍后您可以PdfReader阅读PdfStamperwhite-space:nowrap;进行操作}}。但我认为这不是你想的。