2015-11-19 75 views
0

This問題已存在,但未使用PDFsharp提供答案,但iTextPDF提供。PDFsharp:使用PDFsharp替換字符串

現在回到問題,我知道一種讀取和提取字符串的方法。但是我無法替換文本。

我的代碼:

 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; 
     } 
    } 

這是一個示例代碼和這個人會忽略圖形和圖像。最後只在輸出文件中寫入文本。有沒有辦法可以替換文字而不用觸摸內容中的圖形和圖像?

回答

1

該示例似乎是一種錯誤的方法:它僅返回文本,但忽略圖形,圖像甚至文本位置和文本屬性。

您可以嘗試在內容中查找文本說明(TJ,Tj),並用新指令(也包括TJ或Tj)替換它們而不觸及流中的任何其他內容。如果新文本的長度不同,這種簡單的方法會導致重疊的文本或大的空白。

PDFsharp不是用來解析內容流的。您必須編寫自己的代碼來提取文本,您必須編寫自己的代碼來修改文本(或使用基於PDFsharp構建的第三方庫)。

回答你的問題:是的,有一種方法(如上所述),但是你必須編寫大量的代碼才能實現這個目標(或者找到適合第三方編寫的代碼)。

+0

謝謝你的迴應。我知道這是錯誤的:)這就是我在Q.中發佈的內容 – Enthusiastic

+0

任何對PDFSharp構建的第三方庫的引用?如果你知道這是免費許可 – Enthusiastic

+1

我不知道這樣的代碼是否存在。 PDFsharp不是爲文本提取而設計的,它不是爲文本操作而設計的。我知道有使用PDFsharp構建的文本提取代碼。 –