1.需要的工具包:
<dependency>2.开始写了:
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.8</version>
</dependency>
先建立一个文档
Document document = new Document(PageSize.A4, 50, 50, 50, 50);用A4纸建立了一个文档,页边距都是50;
建立一个输出流
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("D:\\aaa.pdf"));如果在web项目中获得了response,第二个参数
new FileOutputStream("D:\\aaa.pdf")可以写成
response.getOutputStream()引用字体
BaseFont baseFontChinese = BaseFont.createFont("C:\\Windows\\Fonts\\simfang.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);注意用的是中文字体,这样写就不会出现乱码或者不显示的情况
为字体设置样式
Font mtext= new Font(baseFontChinese , 24 , Font.BOLD,BaseColor.BLUE);在这里设置了三种样式的字体以便作为pdf文档的标题,副标题和内容的字体样式来用,第一个参数是字体的类型,第二个参数字体大小,第三个参数字体的粗细,倾斜,第四个参数字体的颜色.
Font ftext = new Font(baseFontChinese , 15 , Font.NORMAL,BaseColor.BLACK);
Font ctext = new Font(baseFontChinese , 10 , Font.NORMAL,BaseColor.BLACK);
建立一个文本块
<pre name="code" class="java">Chunk title = new Chunk("大标题",mtext);
Chunk类似html中的span,第二个参数就是要用的字体样式,刚才定义了三种,这里用最大号的.
建立一个段落
Paragraph p = new Paragraph();
p.add(<span style="font-family: Arial, Helvetica, sans-serif;">title</span><span style="font-family: Arial, Helvetica, sans-serif;">);</span>将文本块添加到段落中,段落是块级别的,如果在表格中要实现水平或垂直对齐,需要将chunk添加到段落中,将段落添加到表格的单元格中.
建立一个表格
PdfPTable table = new PdfPTable(2);这里新建了一个表格,共2列,两列的比例是2:8,表格宽度设置成了A4纸的可用宽度.这里的表格没有行的概念,单元格填充满一行后会从下一行开始.
int[] ints = {2,8};
table.setWidthPercentage(100);
table.setWidths(ints);
建立单元格
PdfPCell pdfPCell = new PdfPCell(p);设置单元格中文本的垂直和水平对齐方式,设置单元格的内边距,跨2列,还可以设置边框等.
pdfPCell.setVerticalAlignment(1);
pdfPCell.setHorizontalAlignment(1);
pdfPCell.setPadding(5.0f);
pdfPCell.setColspan(2);
将单元格添加到表格
table.add(pdfPCell);将表格添加到文档
document.add(table);写完所有想写的内容后要记住关闭文档;
document.close();
3.总结
有时候用ireport做较灵活的报表时(比如动态改变布局)很困难,自己用itext提供的pdf工具可以做出更复杂的报表.另外用itext的渲染工具去渲染html转换成pdf速度会慢.建议直接用itext提供的工具做.