为什么我的 PDF 在 iText 编辑后不可读?
Why my PDF is not readable after edited by iText?
我的 PDF 在尝试编辑文本后无法阅读。
如何让它发挥作用?
我的错误信息:
Adobe Reader 无法打开“495049.pdf”,因为它不是受支持的文件类型或文件已损坏(例如,它作为电子邮件附件发送但未正确解码)
基本上 objective 是编辑 PDF 文档并替换特定文本。
输入已经在二进制流中 (byte[ ])
我为 PDF 编辑库开发了 C# 环境和 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();
}
}
你的主要错误是你在关闭压模之前检索了内存流的内容;实际上你根本没有关闭它!
只有在关闭压模时,才会写入 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" 中所有字符的字形。这些假设都不会自动成立。
我的 PDF 在尝试编辑文本后无法阅读。 如何让它发挥作用?
我的错误信息: Adobe Reader 无法打开“495049.pdf”,因为它不是受支持的文件类型或文件已损坏(例如,它作为电子邮件附件发送但未正确解码)
基本上 objective 是编辑 PDF 文档并替换特定文本。
输入已经在二进制流中 (byte[ ])
我为 PDF 编辑库开发了 C# 环境和 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();
}
}
你的主要错误是你在关闭压模之前检索了内存流的内容;实际上你根本没有关闭它!
只有在关闭压模时,才会写入 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" 中所有字符的字形。这些假设都不会自动成立。