磁盘上有一个PDF格式,大小为498 is。我正在将它读入一个MemoryStream中,它在调试器中查看时报告大小为508978。然后使用读取器和邮票,输出MemoryStream的大小为15。当流被输出到磁盘时,PDF是不可读的。
MemoryStream inputStream = new MemoryStream();
MemoryStream outputStream = new MemoryStream();
FileStream fs = File.OpenRead(@"e:\O1.pdf");
inputStream.SetLength(fs.Length);
fs.Read(inputStream.GetBuffer(), 0, (int)fs.Length);
inputStream.Seek(0, SeekOrigin.Begin);
PdfReader reader = new PdfReader(inputStream);
PdfStamper stamper = new PdfStamper(reader, outputStream);
stamper.Writer.CloseStream = false;
AcroFields fields = reader.AcroFields;
foreach (String key in fields.Fields.Keys)
{
if (String.Equals(key, @"ReportID")) { stamper.AcroFields.SetField(@"ReportID", "Fred Bloggs"); }
}
stamper.Close();
Byte[] bytes = (Byte[])outputStream.ToArray();
File.WriteAllBytes(@"e:\O2.pdf", bytes);发布于 2013-02-21 16:06:28
您的代码片段不完整,因此很难回答您的问题。
你让人们猜测你的问题。
第一猜测:
您有一个10 KB的PDF,当用PdfReader读取它时,您突然使用了100 KB。你很惊讶。这怎么可能呢?
答案很简单: 10 KB的PDF被压缩了。当PdfReader开始使用它时,它会创建对象(需要内存)并解压缩数据(需要更多内存)。
第二猜:
您有一个PdfReader对象,并使用它创建一个PdfStamper对象。你忘了关闭盖印器。突然,您有一个非常小的文件,PDF查看器告诉您:这不是一个真正的PDF。怎么会这样?
你犯了许多不看文档的人犯的错误。在关闭盖印器之前,您使用PdfStamper操作的文件不会被完全写入。
第三猜:
您有一个PdfReader对象,并使用它创建一个PdfStamper对象。你不能用盖章做任何事,你只要关闭它。您感到惊讶的是,生成的PDF与原来的PDF大小不同。
PdfStamper不会创建一个压缩的xref流(除非您指示PdfStamper压缩xref)。如果这些答案都不适用,我建议你重新表述你的问题。否则,您将面临版主关闭它的风险。
https://stackoverflow.com/questions/15006439
复制相似问题