2010-07-29 126 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();