我正在开发一个构建自定义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
我需要增加线和数据之间的空间,但我不知道如何做到这一点。
答案 0 :(得分:2)
看看下面的截图:
第一个单元格显示您描述的问题。第二行通过更改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;
}