ColumnText.ShowTextAligned() cuts off text after linebreak

前端 未结 2 1679
孤街浪徒
孤街浪徒 2021-01-29 03:55

I have the following code to print a text onto a PDF document using iTextSharp:

canvas = stamper.GetOverContent(i)
watermarkFont = iTextSharp.text.pdf.BaseFont.C         


        
相关标签:
2条回答
  • 2021-01-29 04:08

    As documented, the ShowTextAligned() method can only be used to draw a single line. If you want to draw two lines, you have two options:

    Option 1: use the method twice:

    ColumnText.ShowTextAligned(canvas, Element.ALIGN_TOP, new Phrase("line 1"), 0, 50, 0)
    ColumnText.ShowTextAligned(canvas, Element.ALIGN_TOP, new Phrase("line 2"), 0, 25, 0)
    

    Option 2: use ColumnText in a different way:

    ColumnText ct = new ColumnText(canvas);
    ct.SetSimpleColumn(rect);
    ct.AddElement(new Paragraph("line 1"));
    ct.AddElement(new Paragraph("line 2"));
    ct.Go();
    

    In this code snippet, rect is of type Rectangle. It defines the area where you want to add the text. See How to add text in PdfContentByte rectangle using itextsharp?

    0 讨论(0)
  • 2021-01-29 04:12

    ColumnText.ShowTextAligned has been implemented as a short cut for the use case of adding a single line at a given position with given alignment. Confer the source code documentation:

    /** Shows a line of text. Only the first line is written.
     * @param canvas where the text is to be written to
     * @param alignment the alignment
     * @param phrase the <CODE>Phrase</CODE> with the text
     * @param x the x reference position
     * @param y the y reference position
     * @param rotation the rotation to be applied in degrees counterclockwise
     */    
    public static void ShowTextAligned(PdfContentByte canvas, int alignment, Phrase phrase, float x, float y, float rotation)
    

    For more generic use cases please instantiate a ColumnText, set the content to draw and the outlines to draw in, and call Go().

    0 讨论(0)
提交回复
热议问题