2010-06-14 61 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

相关问题