Store large hidden text/string to a PDF using iTextSharp

不羁的心 提交于 2019-12-11 19:01:57

问题


I want to store a large string in PDF document somewhere hidden. Right now I have a hidden text field in which I am writing that text. The problem is that when the string size increased upto 10MB I start getting OutOfMemory errors.

What will be the best way to store some large hidden string/text to PDF document using iTextSharp? That text/string should be retrieved later as well.


回答1:


Such private data can be stored in PieceInfo dictionaries, also cf. David's answer to the OP's follow-up question.

This answer to the older question "Insert hidden digest in pdf using iText library" shows how to make use of PieceInfo dictionaries in general using iText/Java (differences to iTextSharp/C# should be minimal here).

As the OP talks about data 10 MB and up, he may want to use PDF streams instead of strings.

The DocumentPieceInfo helper class provided in that older answer can be used with PDF streams for BIG DATA like this (again in Java as I'm mostly living on the Java side, and again porting to C# should be easy):

Storing document 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();

Retrieving document 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)


来源:https://stackoverflow.com/questions/22602200/store-large-hidden-text-string-to-a-pdf-using-itextsharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!