Adding a New Line in iTextSharp

后端 未结 10 1707
伪装坚强ぢ
伪装坚强ぢ 2021-02-19 00:36

I’ve been trying to solve this problem for a while now to no avail. I have some text in iTextSharp I’m trying to put on a newline. I’ve tried using the \\n escape c

相关标签:
10条回答
  • 2021-02-19 01:02

    Try something like this:

    document.Add(new Chunk("\n"));
    
    0 讨论(0)
  • 2021-02-19 01:03

    With the addition of the spacing attriubtes, you can precisely set the height of the break...

    var spacerParagraph = new Paragraph();
    spacerParagraph.SpacingBefore = 4f;
    spacerParagraph.SpacingAfter = 0f;
    document.Add(spacerParagraph);
    
    0 讨论(0)
  • 2021-02-19 01:03

    This works perfectly for me.

    Dim chunkNewLine As Chunk = New Chunk(Chunk.NEWLINE)
    Dim addressPhrase As New Phrase
    addressPhrase.Add(chunkNewLine)
    
    0 讨论(0)
  • 2021-02-19 01:18

    There's two main ways to work with text in iTextSharp, either through the abstractions like Paragraph and Phrase or by manually executing commands using a PdfContentByte. The abstractions will handle things like margins, line breaks and spacing while the manual route is all up to you. You can't really mix the two which is what you are doing. I'd highly recommend using the abstractions instead of the manual route unless you have a specific need for granular control. Below is a sample showing both off.

    But to answer your question specifically, raw PDF commands (which you are using) draw text at certain x,y coordinates from left to right and they do not support the concept of "returns" or "line breaks". To do this you need to manually move the current text cursor to a new line. See the code below for a sample of that.

            string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.pdf");
            using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
                using (Document doc = new Document(PageSize.LETTER)) {
                    using (PdfWriter writer = PdfWriter.GetInstance(doc, fs)) {
                        doc.Open();
    
                        //This creates two lines of text using the iTextSharp abstractions
                        doc.Add(new Paragraph("This is Paragraph 1"));
                        doc.Add(new Paragraph("This is Paragraph 2"));
    
                        //This does the same as above but line spacing needs to be calculated manually
                        PdfContentByte cb = writer.DirectContent;
                        cb.SaveState();
                        cb.SetColorFill(BaseColor.BLACK);
                        cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 12f);
                        cb.BeginText();
                        cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "This is cb1", 20, 311, 0);
                        cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "This is cb2", 20, 291, 0);//Just guessing that line two should be 20px down, will actually depend on the font
                        cb.EndText();
                        cb.RestoreState();
                        doc.Close();
                    }
                }
            }
    
    0 讨论(0)
  • 2021-02-19 01:20
    document.Add(new Paragraph("\n"));
    

    EDIT:

    cb.BeginText();
    string text = "";
    text = "F\n";           
    text += "o\n";            
    text += "o";
    cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, 85, 311, 0);
    cb.EndText();
    
    
    //Create the new page
    PdfImportedPage page = writer.GetImportedPage(reader, 1);
    cb.AddTemplate(page, 0, 0);
    
    Paragraph p = new Paragraph(text);
    document.Add(p);
    
    //Close all streams
    document.Close();
    fs.Close();
    writer.Close();
    reader.Close();
    
    0 讨论(0)
  • 2021-02-19 01:20

    Maybe it's an iText 7 thing (which is the version I am using), but the suggestions above did not work for me. What did was:

    PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
    Document doc = new Document(pdfDoc);
    Paragraph p = new Paragraph();
    . . .
    p.Add("WHEELWORK!");
    p.Add("\n\n"); // break two lines
    p.Add("Ezekiel's Vision");
    p.Add("\n"); // break one line
    . . .
    doc.Add(p);
    
    0 讨论(0)
提交回复
热议问题