2012-07-03 3 views
3

Я пытаюсь создать PDF-файл с несколькими страницами, используя iTextSharpСоздание нескольких PDF страницы с помощью 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(); 
} 

Это работает хорошо для меня. Когда я пытаюсь добавить новую страницу в тот же документ, она заменяет существующий письменный текст на новую страницу и никакая новая страница не добавляется. Ниже приведен код, который не работает.

_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-файл, по-настоящему нет причин для сброса буферов, оставьте это в ОС делать для вас, когда это необходимо.

Когда я запускаю код ниже, я получаю две страницы с текстом на обеих страницах, это сработает для вас? (Ориентация 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# должна быть довольно простой. –