[英]find and replace string in PDF
我正在尋找一種方法來替換 C# 中 pdf 中的文本。 用例是我們有一個客戶端需要對 pdf 進行簽名,我們希望在他們下載之前預先填充一些字段。 諸如日期、名稱、標題等內容。我發現了一些潛在的選項,例如 PDFSharp,但是我似乎無法找到基於文本進行搜索的方法。
到目前為止我發現的資源是:
https://forum.pdfsharp.net/viewtopic.php?p=4010
但是,我無法讓它們為我的用例工作。 任何幫助將不勝感激。
更新這是我一直在嘗試進行搜索和替換的樣板代碼:
String toFind = 'client-title';
String toReplace = 'John Doe';
PdfSharp.Pdf.PdfDocument PDFDoc = PdfReader.Open("path/to/original/file.pdf", PdfDocumentOpenMode.Import);
PdfSharp.Pdf.PdfDocument PDFNewDoc = new PdfSharp.Pdf.PdfDocument();
for(int i = 0; i < PDFDoc.Pages.Count; i++)
{
// Find toFind string and replace with toReplace string
PDFNewDoc.AddPage(PDFDoc.Pages[i]);
}
PDFNewDoc.Save("path/to/new/file.pdf");
我下面的示例只是將單詞“Hello”替換為“Hola”
class Program
{
static void Main(string[] args)
{
string originalPdf = @"C:\origPdf.pdf";
CreatePdf(originalPdf);
using (var doc = PdfReader.Open(originalPdf, PdfDocumentOpenMode.Modify))
{
var page = doc.Pages[0];
var contents = ContentReader.ReadContent(page);
ReplaceText(contents, "Hello", "Hola");
page.Contents.ReplaceContent(contents);
doc.Pages.Remove(page);
doc.AddPage().Contents.ReplaceContent(contents);
doc.Save(originalPdf);
}
Process.Start(originalPdf);
}
// Code from http://www.pdfsharp.net/wiki/HelloWorld-sample.ashx
public static void CreatePdf(string filename)
{
// Create a new PDF document
PdfDocument document = new PdfDocument();
document.Info.Title = "Created with PDFsharp";
// Create an empty page
PdfPage page = document.AddPage();
// Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);
// Create a font
XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic, new XPdfFontOptions(PdfFontEncoding.WinAnsi));
// Draw the text
gfx.DrawString("Hello, World!", font, XBrushes.Black,
new XRect(0, 0, page.Width, page.Height),
XStringFormats.Center);
// Save the document...
document.Save(filename);
// ...and start a viewer.
}
// Please refer to the pdf tech specs on what all entails in the content stream
// https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf
public static void ReplaceText(CSequence contents, string searchText, string replaceText)
{
// Iterate thru each content items. Each item may or may not contain the entire
// word if there are different stylings (ex: bold parts of the word) applied to a word.
// So you may have to replace a character at a time.
for (int i = 0; i < contents.Count; i++)
{
if (contents[i] is COperator)
{
var cOp = contents[i] as COperator;
for (int j = 0; j < cOp.Operands.Count; j++)
{
if (cOp.OpCode.Name == OpCodeName.Tj.ToString() ||
cOp.OpCode.Name == OpCodeName.TJ.ToString())
{
if (cOp.Operands[j] is CString)
{
var cString = cOp.Operands[j] as CString;
if (cString.Value.Contains(searchText))
{
cString.Value = cString.Value.Replace(searchText, replaceText);
}
}
}
}
}
}
}
}```
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.