2012-07-03 40 views
3

我想創建使用iTextSharp的創建使用iTextSharp的

Document document = new Document(PageSize.A4, 2, 2, 10, 10); 
private PdfContentByte _pcb; 

try 
{ 
    PdfWriter writer = PdfWriter.GetInstance(document, output); 
    document.Open();    
    document.NewPage(); 
    _pcb = writer.DirectContent; 
    _pcb.BeginText(); 
    _pcb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, x, y, 0); 
    _pcb.EndText(); 
    writer.Flush(); 
} 
catch(e) 
{ 

} 
finally 
{ 
    document.Close(); 
} 

這是工作正常,我多頁PDF多頁PDF文件。當我試圖在同一文檔上添加新頁面時,它將用新頁面替換現有的書寫文本,並且不會添加新頁面。下面是不工作的代碼。

_pcb.EndText(); 
writer.Flush(); 
document.NewPage(); 
_pcb = writer.DirectContent; 
_pcb.BeginText(); 
_pcb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, x, y, 0); 
_pcb.EndText(); 
writer.Flush(); 
+0

這裏刷新我想要一個新的頁面添加到文檔 – amesh

回答

7

下面是我嘗試清理和統一你的代碼。一般情況下,避免嘗試趕上,直到你真的必須,你會經常錯過一些非常重要的錯誤。 (例如,你實際上並沒有設置所需的字體和大小,但也許你只是省略了這些代碼。)另外,除非你正在編寫一個非常大的PDF,否則真的沒有理由刷新緩衝區,將它留給OS必要時爲你做。

當我運行下面的代碼時,我會在兩頁上看到兩頁文字,它對您有用嗎? (靶向iTextSharp的5.2.0.0)

 var output = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Output.pdf"); 
     var bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); 
     using (FileStream fs = new FileStream(output, FileMode.Create, FileAccess.Write, FileShare.None)) { 
      using (Document doc = new Document(PageSize.A4, 2, 2, 10, 10)) { 
       PdfContentByte _pcb; 
       using (PdfWriter writer = PdfWriter.GetInstance(doc, fs)) { 
        //Open document for writing 
        doc.Open(); 
        //Insert page 
        doc.NewPage(); 
        //Alias to DirectContent 
        _pcb = writer.DirectContent; 
        //Set the font and size 
        _pcb.SetFontAndSize(bf, 12); 
        //Show some text 
        _pcb.BeginText(); 
        _pcb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "Page 1", 40, 600, 0); 
        _pcb.EndText(); 
        //Insert a new page 
        doc.NewPage(); 
        //Re-set font and size 
        _pcb.SetFontAndSize(bf, 12); 
        //Show more text on page 2 
        _pcb.BeginText(); 
        _pcb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "Page 2", 100, 400, 0); 
        _pcb.EndText(); 
        doc.Close(); 
       } 
      } 
     } 
+0

我得到了我的問題。而使用_pcb.BeginText()我沒有使用_pcb.EndText以及沒有設置一個字體,然後再寫一些文本..謝謝.. – amesh

3

爲什麼使用DirectContent?如果您只是想從頭開始創建PDF,只需將內容添加到Document即可。

try 
{ 
    iTextSharp.text.Document doc = new iTextSharp.text.Document(); 
    PdfWriter.GetInstance(doc, new FileStream("HelloWorld.pdf", FileMode.Create)); 
    doc.Open(); 
    doc.Add(new Paragraph("Hello World!")); 
    doc.NewPage(); 
    doc.Add(new Paragraph("Hello World on a new page!")); 
} 
catch (Exception ex) 
{ 

} 
finally 
{ 
    doc.Close(); 
} 
+0

感謝Alexis..Here我基於座標位置呈現文本的第一頁文本後。如何使用PdfContentByte的相同和什麼時候應該沖洗文本?一旦完成文檔或每頁。 – amesh

+0

請告訴我有沒有其他的方法可以在基於座標系統上打印文本。 – amesh

+0

使用'ColumnText'將文本放在絕對位置。看看[這個例子](http://itextpdf.com/examples/iia.php?id=27)。儘管被編寫爲Java,但對C#的適應應該相當容易。 –