我在这里看到了很多解决方案,但没有一个是明确或好的答案。
这是我的简单问题,希望得到一个直接的答案。
我有一个PDF文件(模板),其中包含以下文本:
{FIRSTNAME} {LASTNAME} {ADDRESS} {PHONENUMBER}
是否可以使用C#代码用我选择的文本替换这些模板?
没有字段,没有其他复杂的东西。
是否有任何开源库帮助我实现这一目标?
答案 0 :(得分:6)
这个帖子已经死了,不过我正在为其他可能在将来面临这个问题的失落灵魂发布我的解决方案。不幸的是,我的公司不允许在线发布代码,所以我将描述解决方案:)。
所以基本上你要做的就是使用PdfSharp并修改这个sample来替换流中的文本,但是你必须考虑到文本可以分成许多括号(将流转换为字符串以查看格式是)。
然后,代码类似于this sample遍历源pdf逐页遍历,并通过在PdfReference项目中搜索PdfContent项目并替换内容流中的文本来修改当前页面。
答案 1 :(得分:4)
PDF文档的“问题”是它们本身不适合编辑。特别是没有领域的人。最好的办法是退后一步,查看您的流程,看看是否有办法在生成PDF之前替换文本。显然,你可能并不总是拥有这种自由。
如果您能够替换文本,那么您应该知道在替换文本之后不会自动重排文本。鉴于你很好,那么很少有解决方案允许你替换文本。
我知道您正在寻找OpenSource解决方案,因此我不愿意为您提供商业解决方案。我们提供一个名为PDFKit.NET。它允许您将页面上的所有内容提取为所谓的形状(文本,图像,曲线等)。请参阅类型引用中的方法Page.CreateShapes。然后,您可以以编程方式导航和编辑此形状结构,然后再将其写回PDF。
这是: http://www.tallcomponents.com/pdfkit
披露:我是TallComponents的创始人,该组件的供应商
答案 2 :(得分:2)
如similar thread所述,这不是一种简单的方法。它似乎更容易获取DocX文件并使用DocX库,这样可以轻松进行单词交换,然后将DocX转换为PDF(使用PDF Creator打印机等)。
或使用pdf sharp/migradoc创建新文档。
答案 3 :(得分:2)
对于简单文本替换使用iTextSharp库。 将一个字符串替换为另一个字符串的代码如下。 请注意,这将仅替换简单文本,并且可能无法在所有情况下都有效。
//using iTextSharp.text.pdf;
void VerySimpleReplaceText(string OrigFile, string ResultFile, string origText, string replaceText)
{
using (PdfReader reader = new PdfReader(OrigFile))
{
for (int i = 1; i <= reader.NumberOfPages; i++)
{
byte[] contentBytes = reader.GetPageContent(i);
string contentString = PdfEncodings.ConvertToString(contentBytes, PdfObject.TEXT_PDFDOCENCODING);
contentString = contentString.Replace(origText, replaceText);
reader.SetPageContent(i, PdfEncodings.ConvertToBytes(contentString, PdfObject.TEXT_PDFDOCENCODING));
}
new PdfStamper(reader, new FileStream(ResultFile, FileMode.Create, FileAccess.Write)).Close();
}
}
答案 4 :(得分:0)
以PDF格式进行更新既困难又肮脏。因此,可能会在现有内容的顶部添加内容对您也一样,因为它对我有用。如果是这样,这是我的原始但可行的解决方案,涉及很多情况(实际上是“覆盖”):