有许多解决方案可用于创建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;
}
答案 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
阅读PdfStamper
并white-space:nowrap;
进行操作}}。但我认为这不是你想的。