我一直在网上搜索2周,并为我的问题找到了一些有趣的解决方案,但似乎没有什么能给我答案.
我的目标是做下面的事情:
我想在静态PDF文件中找到一个文本,并将该文本替换为另一个文本.我想保留内容的设计.这真的很难吗?
我找到了办法,但我丢失了整个信息:
using (PdfReader reader = new PdfReader(path))
{
StringBuilder text = new StringBuilder();
for (int i = 1; i <= reader.NumberOfPages; i++)
{
text.Append(PdfTextExtractor.GetTextFromPage(reader, i));
text.Replace(txt_SuchenNach.Text, txt_ErsetzenMit.Text);
}
return text.ToString();
}
Run Code Online (Sandbox Code Playgroud)
我的第二次尝试更好,但需要我可以更改内部文本的字段:
string fileNameExisting =path;
string fileNameNew = @"C:\TEST.pdf";
using (FileStream existingFileStream = new FileStream(fileNameExisting, FileMode.Open))
using (FileStream newFileStream = new FileStream(fileNameNew, FileMode.Create))
{
// PDF öffnen
PdfReader pdfReader = new PdfReader(existingFileStream);
PdfStamper stamper = new PdfStamper(pdfReader, newFileStream);
var form = stamper.AcroFields;
var fieldKeys = form.Fields.Keys;
foreach (string fieldKey in fieldKeys)
{
var value = pdfReader.AcroFields.GetField(fieldKey);
form.SetField(fieldKey, value.Replace(txt_SuchenNach.Text, txt_ErsetzenMit.Text));
}
// Textfeld unbearbeitbar machen (sieht aus wie normaler text)
stamper.FormFlattening = true;
stamper.Close();
pdfReader.Close();
}
Run Code Online (Sandbox Code Playgroud)
这样可以保留其余文本的格式,并且只会更改我的搜索文本.我需要一个不在Textfield中的文本解决方案.
感谢您的所有答案和帮助.
一般问题是文本对象可能使用嵌入字体,并将特定字形分配给特定字母。即,如果您有一个包含“abcdef”等文本的文本对象,则嵌入字体可能仅包含这些(“abcdef”字母)的字形,但不包含其他字母的字形。因此,如果将“abcdef”替换为“xyz”,则 PDF 将不会显示这些“xyz”,因为没有可用于显示这些字母的字形。
所以我会考虑以下工作流程:
归档时间: |
|
查看次数: |
22901 次 |
最近记录: |