PDFsharp:使用PDFsharp替换字符串
本文关键字:PDFsharp 字符串 替换 使用 | 更新日期: 2023-09-27 18:22:25
这个问题已经存在,但没有使用PDFsharp提供答案,而是使用iTextPDF。
现在回到问题上来,我知道了一种读取和提取字符串的方法。但我在替换文本时遇到了问题。
我的代码:
var content = ContentReader.ReadContent(page);
var text = content.ExtractText();
text = text.Replace("Replace This", "With This");
XFont font = new XFont("Times New Roman", 11, XFontStyle.BoldItalic);
gfx.DrawString(text, font, XBrushes.Black, new XRect(0, 0, page.Width, page.Height), XStringFormats.Left);
// Save the document...
const string filename = "New Doc.pdf";
document.Save(filename);
}
public static IEnumerable<string> ExtractText(this CObject cObject)
{
if (cObject is COperator)
{
var cOperator = cObject as COperator;
if (cOperator.OpCode.Name== OpCodeName.Tj.ToString() ||
cOperator.OpCode.Name == OpCodeName.TJ.ToString())
{
foreach (var cOperand in cOperator.Operands)
foreach (var txt in ExtractText(cOperand))
yield return txt;
}
}
else if (cObject is CSequence)
{
var cSequence = cObject as CSequence;
foreach (var element in cSequence)
foreach (var txt in ExtractText(element))
yield return txt;
}
else if (cObject is CString)
{
var cString = cObject as CString;
yield return cString.Value;
}
}
这是一个示例代码,这个代码将忽略图形和图像。并且最终只在输出文件中写入文本。有没有办法在不接触内容中的图形和图像的情况下替换文本?
该示例似乎是一种错误的方法:它只返回文本,但忽略图形、图像,甚至文本位置和文本属性。
您可以尝试在内容中定位文本指令(TJ,TJ),并用新指令(也称为TJ或TJ)替换它们,而不必接触流中的任何其他内容。如果新文本的长度不同,这种简单的方法会导致文本重叠或出现大的空白。
PDFsharp不是为解析内容流而设计的。您必须编写自己的代码来提取文本,您必须编写自身的代码来修改文本(或者使用基于PDFsharp的第三方库)。
回答您的问题:是的,有一种方法(如上所述),但您必须编写大量代码才能实现这一点(或者找到由第三方编写的合适代码)。