Как вставить пустые строки в PDF?

Я создаю PDF с помощью iText. Я хочу вставить пустые строки между абзацами и таблицами.

Как я могу этого добиться?


person Thanuja    schedule 11.11.2010    source источник
comment
Вы пытались на самом деле вставить пустые строки? Буквально " ".   -  person BeemerGuy    schedule 12.11.2010
comment
@Beemer: Это первое, что я тоже попробовал, но пустые строки просто не отображаются. Я попытался добавить их как голые строки и как новые пустые абзацы. Решение, которое я добавил ниже, — это первое, что я нашел работающим.   -  person Bill the Lizard    schedule 17.11.2010
comment
@Ящерица Билл; Я предполагаю, что iText игнорирует любую пустую строку или строку с пробелами. Хорошо знать. Спасибо!   -  person BeemerGuy    schedule 18.11.2010
comment
Просто вставьте \n, должно помочь.   -  person Jes    schedule 19.11.2010
comment
Как поступить в случае с PDFAWriter?   -  person S_S    schedule 11.10.2018


Ответы (12)


Вы можете активировать новую строку, вставив Chunk.NEWLINE в свой документ. Вот пример.

public static void main(String args[]) {
    try {
        // create a new document
        Document document = new Document( PageSize.A4, 20, 20, 20, 20 );
        PdfWriter.getInstance( document, new FileOutputStream( "HelloWorld.pdf" ) );

        document.open();

        document.add( new Paragraph( "Hello, World!" ) );
        document.add( new Paragraph( "Hello, World!" ) );

        // add a couple of blank lines
        document.add( Chunk.NEWLINE );
        document.add( Chunk.NEWLINE );

        // add one more line with text
        document.add( new Paragraph( "Hello, World!" ) );

        document.close();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

Ниже приведен снимок экрана, показывающий часть PDF-файла, созданного приведенным выше кодом.

Привет, PDF со вставленными пустыми строками

person Bill the Lizard    schedule 17.11.2010
comment
public static final Chunk NEWLINE = new Chunk("\n");. Джес был прав, как и ты. Кстати: add(new Chunk(\n\n\n) должен создавать три новые строки, хотя я это не проверял. - person Mark Storer; 23.11.2010

И чтобы вставить пустую строку между таблицами, вы можете использовать эти оба метода.

table.setSpacingBefore();      

table.setSpacingAfter();       
person rgksugan    schedule 02.01.2011
comment
По крайней мере, в версии 5.1.1 iText# этих методов не существует; однако есть свойства: SpacingBefore и SpacingAfter. - person JYelton; 23.08.2011
comment
Это намного полезнее, чем Chunk.NEWLINE, если вы используете таблицы. - person Jordan.J.D; 23.04.2014

Вы можете использовать "\n" в абзаце

document.add(new Paragraph("\n\n"));
person Atif Mahmood    schedule 13.07.2016

Можно попробовать пустую фразу:

document.add(new Phrase("\n"));
person umanganiello    schedule 12.11.2013

Вы можете добавить класс PdfContentByte пустой строки в itextPdf. Как показано ниже:

package com.pdf.test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;

import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

public class Ranvijay {

    public static final String RESULT = "d:/printReport.pdf";

    public void createPdf(String filename) throws Exception {
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document,
                new FileOutputStream(filename));
        document.open();

        Font bold = new Font(Font.FontFamily.HELVETICA, 8f, Font.BOLD);
        Font normal = new Font(Font.FontFamily.HELVETICA, 8f, Font.NORMAL);
        PdfPTable tabletmp = new PdfPTable(1);
        tabletmp.getDefaultCell().setBorder(Rectangle.NO_BORDER);
        tabletmp.setWidthPercentage(100);
        PdfPTable table = new PdfPTable(2);
        float[] colWidths = { 45, 55 };
        table.setWidths(colWidths);
        String imageUrl = "http://ssl.gstatic.com/s2/oz/images/logo/2x/googleplus_color_33-99ce54a16a32f6edc61a3e709eb61d31.png";
        Image image2 = Image.getInstance(new URL(imageUrl));
        image2.setWidthPercentage(60);
        table.getDefaultCell().setBorder(Rectangle.NO_BORDER);
        table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
        table.getDefaultCell().setVerticalAlignment(Element.ALIGN_TOP);
        PdfPCell cell = new PdfPCell();
        cell.setBorder(Rectangle.NO_BORDER);
        cell.addElement(image2);
        table.addCell(cell);
        String email = "[email protected]";
        String collectionDate = "09/09/09";
        Chunk chunk1 = new Chunk("Date: ", normal);
        Phrase ph1 = new Phrase(chunk1);

        Chunk chunk2 = new Chunk(collectionDate, bold);
        Phrase ph2 = new Phrase(chunk2);

        Chunk chunk3 = new Chunk("\nEmail: ", normal);
        Phrase ph3 = new Phrase(chunk3);

        Chunk chunk4 = new Chunk(email, bold);
        Phrase ph4 = new Phrase(chunk4);

        Paragraph ph = new Paragraph();
        ph.add(ph1);
        ph.add(ph2);
        ph.add(ph3);
        ph.add(ph4);

        table.addCell(ph);
        tabletmp.addCell(table);
        PdfContentByte canvas = writer.getDirectContent();
        canvas.saveState();
        canvas.setLineWidth((float) 10 / 10);
        canvas.moveTo(40, 806 - (5 * 10));
        canvas.lineTo(555, 806 - (5 * 10));
        canvas.stroke();
        document.add(tabletmp);
        canvas.restoreState();
        PdfPTable tabletmp1 = new PdfPTable(1);
        tabletmp1.getDefaultCell().setBorder(Rectangle.NO_BORDER);
        tabletmp1.setWidthPercentage(100);

        document.add(tabletmp1);

        document.close();
    }

    /**
     * Main method.
     * 
     * @param args
     *            no arguments needed
     * @throws DocumentException
     * @throws IOException
     */
    public static void main(String[] args) throws Exception {
        new Ranvijay().createPdf(RESULT);
        System.out.println("Done Please check........");
    }

}
person Ranvijay    schedule 02.07.2014

document.add(new Paragraph("")) 

Это неэффективно выше, необходимо добавить пустую строку, например:

document.add(new Paragraph(" "));
person hyman zhang    schedule 03.06.2015

Вы можете добавить пустую строку;

 Paragraph p = new Paragraph();
 // add one empty line
  addEmptyLine(p, 1);
 // add 3 empty line
  addEmptyLine(p, 3);


private static void addEmptyLine(Paragraph paragraph, int number) {
    for (int i = 0; i < number; i++) {
      paragraph.add(new Paragraph(" "));
    }
  }
person Adel    schedule 17.01.2014

Вы также можете использовать

document.add(new Paragraph());
document.add(new Paragraph());

перед разделителем, если вы используете любой из них, это нормально.

person Sumit Kumar    schedule 17.04.2017

Вместо использования:

document.add( Chunk.NEWLINE );

использовать это:

document.add(new Paragraph(""));

это делает маленькое пространство

person user2782717    schedule 13.05.2015
comment
добавить пробел при создании нового абзаца document.add(new Paragraph()); - person abh22ishek; 08.02.2016

Я разместил это в другом вопросе, но я считаю, что использование таблиц с iTextSharp обеспечивает высокий уровень точности.

document.Add(BlankLineDoc(16));

public static PdfPTable BlankLineDoc(int height)
{
    var table = new PdfPTable(1) {WidthPercentage = 100};
    table = BlankLineTable(table, height);
    return table;
}

public static PdfPTable BlankLineTable(PdfPTable table, int height, int border = Rectangle.NO_BORDER)
{
    var cell = new PdfPCell(new Phrase(" "))
    {
        Border = border,
        Colspan = table.NumberOfColumns,
        FixedHeight = height
    };
    table.AddCell(cell);
    return table;
}

BlankLineTable можно использовать непосредственно при работе с таблицами.

person Jason Butler    schedule 30.08.2017

непосредственно использовать

paragraph.add("\n");

чтобы добавить пустую строку.

person Prasanna Akolkar    schedule 06.05.2020

Мне пришлось добавить пустые строки после таблицы, и мне удалось добавить много div, как мне нужно, с помощью стиля css с настройкой padding-top, вот так. Я использовал механизм шаблонов (подчеркивание), чтобы просмотреть количество строк, которые мне нужно добавить.

 <% var maxRow = 30; var pos = items.models.length; %>
 <% for( pos; pos < maxRow; pos++ ){ %>
       <div class="blankRow"></div>
 <% }; %>

Мой css-файл:

 .blankRow:{ padding-top: 15px;}
person miguel.angel    schedule 14.12.2015