使用iTextSharp存储大型隐藏文本/字符串到PDF



我想在某个隐藏的PDF文档中存储一个大字符串。现在我有一个隐藏的文本字段,我在其中写入文本。问题是,当字符串大小增加到10MB我开始得到OutOfMemory错误。

使用iTextSharp存储一些大型隐藏字符串/文本到PDF文档的最佳方法是什么?该文本/字符串也应该稍后检索。

这样的私有数据可以存储在PieceInfo字典中,也可以参考David对OP后续问题的回答。

这是对旧问题"使用iText库在pdf中插入隐藏摘要"的回答,展示了如何在使用iText/Java时使用PieceInfo字典(这里与iTextSharp/c#的差异应该是最小的)。

当OP谈到数据大于等于10mb时,他可能想使用PDF流而不是字符串。

在旧的答案中提供的DocumentPieceInfo帮助类可以与PDF流一起使用大数据,就像这样(再次在Java中,因为我主要生活在Java端,并且移植到c#应该很容易):

存储文档PieceInfo data

PdfName appName = new PdfName("MYAPP");
PdfName dataName = new PdfName("BigData");
DocumentPieceInfo dpi = new DocumentPieceInfo();
PdfReader reader = new PdfReader(...);
PdfStamper stamper = new PdfStamper(reader, ...);
InputStream in = ... BIG DATA INPUT STREAM ...;
PdfStream stream = new PdfStream(in, stamper.getWriter());
stream.flateCompress();
PdfIndirectObject ref = stamper.getWriter().addToBody(stream);
stream.writeLength();
in.close();
dpi.addPieceInfo(reader, appName, dataName, ref.getIndirectReference());
stamper.close();

检索文档PieceInfo data

PdfName appName = new PdfName("MYAPP");
PdfName dataName = new PdfName("BigData");
DocumentPieceInfo dpi = new DocumentPieceInfo();
PdfReader reader = new PdfReader("target/test-outputs/test-with-piece-info.pdf");
PdfObject myDataObject = dpi.getPieceInfo(reader, appName, dataName);
myDataObject = PdfReader.getPdfObject(myDataObject);
byte[] myData = PdfReader.getStreamBytes((PRStream)myDataObject)

最新更新