2010-06-14 54 views
1
class mineTest 
    { 
     string pdfTemplate = @"c:\us.pdf"; 
     public mineTest(Customer c, string output) 
     { 
      StreamReader sr = new StreamReader(pdfTemplate); 
      StreamWriter sw = new StreamWriter(output); 
      string content = sr.ReadToEnd(); 

      content.Replace("(Customer name)/DA(/Verdana 10 Tf 0 g)/FT/Tx/Type/Annot/MK<<>>/V()/AP<</N 13 0 R>>>>", "(Customer name)/DA(/Verdana 10 Tf 0 g)/FT/Tx/Type/Annot/MK<<>>/V(John Johnson)/AP<</N 13 0 R>>>>"); 
      sw.Write(content); 
      sw.Close(); 
      sr.Close(); 
     } 
    } 

爲什麼上面的代碼在生成有效PDF時失敗?在沒有API的情況下在.NET中填充PDF字段,例如iTextSharp

回答

2

PDF文件是二進制文件。您正在以文本的形式閱讀它,然後重新編寫文本。正如SLaks指出的,你甚至沒有對被替換的文本做任何事情。

使用PDF庫。嘗試PDFSharp

+0

我雖然我將不得不支付PDFSharp的商業許可證。謝謝! 但是,只是爲了好奇,爲了編輯沒有庫的PDF文件,這是一個真正的問題嗎? – 2010-06-14 16:44:30

+0

有許多免費和開放源代碼的PDF庫。 iText.NET是另一個。我沒有必要使用它們,幾年前我使用了一個商業產品(Dynamic PDF)。 – 2010-06-14 17:21:27

+0

要編輯沒有PDF庫的PDF文檔,需要了解PDF文件格式。然後你可以寫你自己的圖書館。 :) 對不起,我對此知之甚少。 – 2010-06-14 17:23:53

2

字符串是不可變的。

當您撥打content.Replace(...)時,Replace函數會返回一個帶有替換項的新字符串,您的代碼將忽略此字符串。
原始content字符串未被修改。

您需要將其更改爲

content = content.Replace(...); 

順便說一句,你應該叫File.WriteAllTextFile.ReadAllText

相關問題