尝试编辑文本后,我的PDF无法读取。 如何使其有效?
我的错误讯息: Adobe Reader无法打开'495049.pdf',因为它不是受支持的文件类型,或者因为文件已损坏(例如,它是作为电子邮件附件发送而未正确解码)
基本上,目标是编辑PDF文档并替换特定文本。
已经以二进制流(byte [])
输入我在C#环境& amp;用于PDF编辑库的iText。
这是我的代码:
using (PdfReader reader = new PdfReader(doc.FileStream))
{
PdfDictionary dict = reader.GetPageN(1);
PdfObject pdfObject = dict.GetDirectObject(PdfName.CONTENTS);
if (pdfObject.IsStream())
{
PRStream stream = (PRStream)pdfObject;
byte[] data = PdfReader.GetStreamBytes(stream);
stream.SetData(System.Text.Encoding.ASCII.GetBytes(System.Text.Encoding.ASCII.GetString(data).Replace("[ReplacmentText]", "Hello World")));
}
using (MemoryStream ms = new MemoryStream())
{
var ignored = new PdfStamper(reader, ms);
reader.Close();
return ms.ToArray();
}
}
答案 0 :(得分:2)
您的主要错误是在关闭压模之前检索内存流的内容;实际上你完全没有关闭它!
只有在关闭压模时,才会写入PDF的最后部分。因此:
using (MemoryStream ms = new MemoryStream())
{
var ignored = new PdfStamper(reader, ms);
ignored.Close();
reader.Close();
return ms.ToArray();
}
您的其他问题(可能与您当前的测试文档无关,但一般而言):
stream.SetData(System.Text.Encoding.ASCII.GetBytes(System.Text.Encoding.ASCII.GetString(data).Replace("[ReplacmentText]", "Hello World")));
这非常假设,特别是流内容只包含ASCII字节,占位符" [ReplacementText]" (我假设这是正确的拼写)发生在一个部分和直接内容流中,用于绘制占位符及其替换的字体使用ASCII' ish编码,并且该字体具有所有字符的字形在" Hello World"。这些假设都不会自动成立。