在日常开发过程中,若是想要把java中的某个对象中的内容,按某种排列方式输出到PDF中,有几种方式,此处只使用了itextpdf的方式。
itext pdf 文档
一、加入依赖
在gradle中只需要加入
compile group: 'com.itextpdf', name: 'itextpdf', version: '5.5.6'
二、创建一个Document,并加入内容
public void createPdf() {
Document document = new Document();
try {
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf"));
document.open();
document.add(new Paragraph("Some content here"));
settings(document);
style(document);
document.close();
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
新建一个Document对象,再定义PdfWriter,把document中的内容写入HelloWorld.pdf文件。
在添加内容到document之前需要执行document.open()才可以。
document可以添加Paragraph、PdfPTable等元素。
三、踩过的坑
- 问题:使用PdfPTable来构造整体结构时,如何设置行间距?
解决方案:在给cell中添加内容的时候有两种方式,一种是直接初始化的时候添加,另一种是调用addElement方法添加内容。
PdfPCell cell = new PdfPCell(new Paragraph(100,"Table 1"));
PdfPCell cell= new PdfPCell();
cell.addElement(new Paragraph(100,"Table 1"));
这两种方法中第一种不支持设置Leading为100,第二种方法支持设置Leading为100。除了在初始化Paragraph时可以设置Leading,还可以调用setLeading()来设置,第一个参数是固定的行间距,第二个参数是行间距为行高的倍数。
Paragraph element = new Paragraph("Some content here");
element.setLeading(0,2);
- 问题:如何给PdfPTable设置每列的宽度?
解决方案:设置table的列宽时,需要把所有列的宽度放进数组列表中,缺一不可,如果数组的大小和table的列数不匹配则整体都不会显示出来。
PdfPTable table = new PdfPTable(3);
table.setWidths(new int[]{2, 1, 1});
- 问题:如何设置边框?
解决方案:边框的值不一样,当setBorder()函数的参数为0时,没有边框,1为上边框TOP,2为下边框BOTTOM,4为左边框LEFT,8为右边框RIGHT。具体的可以调用Rectangle中的固定值。
PdfPCell cell = new PdfPCell(new Phrase("StackOverflow"));
cell.setBorder(Rectangle.NO_BORDER);