如何减少LineSeparator itext

时间:2016-11-15 10:51:55

标签: android itext

我正在开发一个构建自定义PDF的Android应用程序,我使用itext作为库支持,但我的分隔符存在很大问题。

要分隔数据我使用此功能:

public void addSeparator(PdfPCell cellToAdd){
    LineSeparator ls = new LineSeparator();
    ls.setLineWidth(1);
    cellToAdd.addElement(new Chunk(ls));
}

cellToAdd是我需要添加LineSeparator的单元格,结果的想法是:

my fantastic data

-----------------

Other data

我需要增加线和数据之间的空间,但我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:2)

看看下面的截图:

enter image description here

第一个单元格显示您描述的问题。第二行通过更改LineSeparator的属性来解决它。如果这还不够,则需要更改Paragraph个实例。

这是创建完整表格的代码:

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    PdfPTable table = new PdfPTable(1);
    table.addCell(getCell1());
    table.addCell(getCell2());
    table.addCell(getCell3());
    table.addCell(getCell4());
    document.add(table);
    document.close();
}

第一个单元格是这样创建的:

public PdfPCell getCell1() {
    PdfPCell cell = new PdfPCell();
    Paragraph p1 = new Paragraph("My fantastic data");
    cell.addElement(p1);
    LineSeparator ls = new LineSeparator();
    cell.addElement(ls);
    Paragraph p2 = new Paragraph("Other data");
    cell.addElement(p2);
    return cell;
}

我们只需添加LineSeparator,它就会粘贴到第一段。我们可以通过引入负偏移来避免这种情况:

public PdfPCell getCell2() {
    PdfPCell cell = new PdfPCell();
    Paragraph p1 = new Paragraph("My fantastic data");
    cell.addElement(p1);
    LineSeparator ls = new LineSeparator();
    ls.setOffset(-4);
    cell.addElement(ls);
    Paragraph p2 = new Paragraph("Other data");
    cell.addElement(p2);
    return cell;
}

如果需要更多空间,我们可以增加第二段的前导并增加偏移量:

public PdfPCell getCell3() {
    PdfPCell cell = new PdfPCell();
    Paragraph p1 = new Paragraph("My fantastic data");
    cell.addElement(p1);
    LineSeparator ls = new LineSeparator();
    ls.setOffset(-8);
    cell.addElement(ls);
    Paragraph p2 = new Paragraph("Other data");
    p2.setLeading(25);
    cell.addElement(p2);
    return cell;
}

这可能是不可接受的,因为如果其他数据包含多行,则前导也会对后续行产生影响。

最佳解决方案是使用setSpacingBefore()setSpacingAfter()(或两者):

public PdfPCell getCell4() {
    PdfPCell cell = new PdfPCell();
    Paragraph p1 = new Paragraph("My fantastic data");
    p1.setSpacingAfter(20);
    cell.addElement(p1);
    LineSeparator ls = new LineSeparator();
    cell.addElement(ls);
    Paragraph p2 = new Paragraph("Other data");
    p2.setSpacingBefore(10);
    cell.addElement(p2);
    return cell;
}