2010-07-29 124 views
4

到目前为止,我看到的所有使用ITextSharp的示例都是从头开始创建一个新文档,然后添加一些内容并关闭它。 如果我需要对PDF执行多个操作,例如我想添加一个段落然后添加一行,该怎么办? 例如,如果我运行这个简单的控制台应用程序,其中我只创建一个PDF并添加一个段落,然后关闭它,一切运行良好。如何添加段落然后添加一行?

class Program 
{ 
    static void Main(string[] args) 
    { 
     Document pdfDoc = new Document(); 
     PdfWriter.GetInstance(pdfDoc, new FileStream("TestPDF.pdf", FileMode.Create)); 
     pdfDoc.Open(); 

     pdfDoc.Add(new Paragraph("Some Text added")); 

     pdfDoc.Close(); 

     Console.WriteLine("The file was created."); 
     Console.ReadLine(); 
    } 
} 

但是,如果我需要做别的事情喜欢画这样

class Program 
{ 
    static void Main(string[] args) 
    { 
     Document pdfDoc = new Document(); 
     PdfWriter.GetInstance(pdfDoc, new FileStream("TestPDF.pdf", FileMode.Create)); 
     pdfDoc.Open(); 

     pdfDoc.Add(new Paragraph("Some Text added")); 

     PdfWriter writer = PdfWriter.GetInstance(pdfDoc, new FileStream("TestPDF.pdf", FileMode.OpenOrCreate)); 
     PdfContentByte cb = writer.DirectContent; 
     cb.MoveTo(pdfDoc.PageSize.Width/2, pdfDoc.PageSize.Height/2); 
     cb.LineTo(pdfDoc.PageSize.Width/2, pdfDoc.PageSize.Height); 
     cb.Stroke(); 
     writer.Close(); 

     pdfDoc.Close(); 

     Console.WriteLine("The file was created."); 
     Console.ReadLine(); 
    } 
} 

试图打开该文件,因为它已经被pdfDoc打开时,我得到一个错误的线路。 如果我在pdfDoc.Close()之后放置突出显示的代码,则显示“文档未打开”错误 如何从添加文本切换到添加行? 我是否需要关闭文档,然后用PDFReader重新打开它并在那里修改它,或者我可以一次完成所有工作吗?

回答

3

由于您尝试请求PDFWriter的第二个实例,因此您收到错误。第二个PdfWriter.GetInstance(pdfDoc,新的FileStream(“TestPDF.pdf”,FileMode.OpenOrCreate));不需要。我对你的代码做了一个小小的修改,现在好像可以工作

Document pdfDoc = new Document(); 
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, new FileStream("TestPDF.pdf", FileMode.OpenOrCreate)); 

pdfDoc.Open(); 
pdfDoc.Add(new Paragraph("Some Text added"));    
PdfContentByte cb = writer.DirectContent; 
cb.MoveTo(pdfDoc.PageSize.Width/2, pdfDoc.PageSize.Height/2); 
cb.LineTo(pdfDoc.PageSize.Width/2, pdfDoc.PageSize.Height); 
cb.Stroke(); 

pdfDoc.Close(); 

Console.WriteLine("The file was created."); 
Console.ReadLine();