itext pdf文档生成

在日常开发过程中,若是想要把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);

你可能感兴趣的:(itext pdf文档生成)