使用itextpdf完成打印预览功能
程序员文章站
2022-06-01 08:36:22
...
使用itextpdf完成打印预览功能
1、在pom文件添加itextpdf的jar(版本可以根据项目里面取定)
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
2、编写代码 (直接上我写的小案例了)
@GetMapping("/caseMixPrint")
public void caseMixPrint(HttpServletResponse response) {
try {
//设置中文
BaseFont bfComic = BaseFont.createFont("STSong-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
//字体
Font font1 = new Font(bfComic, 8, Font.NORMAL);
//字体
Font font2 = new Font(bfComic, 15, Font.NORMAL);
// 告诉浏览器用什么软件可以打开此文件
response.setHeader("content-Type", "application/pdf");
response.setCharacterEncoding("utf-8");
// 下载文件的默认名称
Paragraph par = new Paragraph("这是标题啊" + "\n\n", new Font(bfComic, 18, Font.BOLD));
//设置局中对齐
par.setAlignment(Element.ALIGN_CENTER);
PdfPCell pdfPCell19 = new PdfPCell(par);
Document document = new Document();
//将纸张设置为A4纸
document.setPageSize(PageSize.A4);
//设置上下左右边距
//document.setMargins(35,30,0,0);
PdfWriter.getInstance(document, response.getOutputStream());
document.open();
document.add(par);
//每列宽度
int widths[] = {10, 10, 10, 10};
//列
PdfPTable table = new PdfPTable(4);
table.setWidthPercentage(98);
PdfPCell pdfPCell = new PdfPCell();
table.setWidths(widths);
pdfPCell = new PdfPCell(new Paragraph("统计日期:" + new Date(), font2));
pdfPCell.setVerticalAlignment(Element.ALIGN_LEFT);
pdfPCell.setPaddingBottom(20);
share(pdfPCell);
pdfPCell.setColspan(2);
table.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Paragraph("打印日期:" + new Date(), font2));
pdfPCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
pdfPCell.setVerticalAlignment(Element.ALIGN_RIGHT);
pdfPCell.setPaddingBottom(20);
pdfPCell.setPaddingLeft(20);
share(pdfPCell);
pdfPCell.setColspan(2);
table.addCell(pdfPCell);
/** 第一行 表头*/
pdfPCell = new PdfPCell(new Paragraph("编号", font1));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
pdfPCell.setBorderWidthRight(0);
table.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Paragraph("姓名", font1));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
pdfPCell.setBorderWidthRight(0);
pdfPCell.setFixedHeight(20);
table.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Paragraph("性别", font1));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
pdfPCell.setBorderWidthRight(0);
pdfPCell.setFixedHeight(20);
table.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Paragraph("年龄", font1));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);
pdfPCell.setVerticalAlignment(Element.ALIGN_CENTER);
pdfPCell.setFixedHeight(20);
table.addCell(pdfPCell);
/** 添加数据*/
pdfPCell = new PdfPCell(new Paragraph("01", font1));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
pdfPCell.setBorderWidthRight(0);
pdfPCell.setBorderWidthTop(0);
table.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Paragraph("张三", font1));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
pdfPCell.setBorderWidthRight(0);
pdfPCell.setBorderWidthTop(0);
pdfPCell.setFixedHeight(20);
table.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Paragraph("男", font1));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);
pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
pdfPCell.setBorderWidthRight(0);
pdfPCell.setBorderWidthTop(0);
pdfPCell.setFixedHeight(20);
table.addCell(pdfPCell);
pdfPCell = new PdfPCell(new Paragraph("12", font1));
pdfPCell.setHorizontalAlignment(Element.ALIGN_CENTER);
pdfPCell.setVerticalAlignment(Element.ALIGN_CENTER);
pdfPCell.setFixedHeight(20);
pdfPCell.setBorderWidthTop(0);
table.addCell(pdfPCell);
document.add(table);
document.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void share(PdfPCell pdfPCell) {
//去除上下左右的边框
pdfPCell.setBorderWidthRight(0);
pdfPCell.setBorderWidthBottom(0);
pdfPCell.setBorderWidthLeft(0);
pdfPCell.setBorderWidthTop(0);
}
3、注意:
-
你可以在纸上大概画出来你想要的模样,每行有几列等
-
第一行的统计日期和打印日期一定要沾满设计的列(我这里是四列)这个属性是合并列 后面数字是合并几列 两个刚好四列
-
在变写成功之后可能会出现列重合,也就是有的线条粗有的线条细,可以通过 pdfPCell.setBorderWidthRight(0);
pdfPCell.setBorderWidthBottom(0);
pdfPCell.setBorderWidthLeft(0);
pdfPCell.setBorderWidthTop(0);来设置那里为0
还可以pdfPCel.setVerticalAlignment(PdfPCell.ALIGN_CENTER);//设置单元格的垂直对齐方式
pdfPCel.setHorizontalAlignment(Element.ALIGN_RIGHT);//设置单元格的水平对齐方式
里面还有很多属性,目前用的就是这么多,需要的还可以继续查询,祝你成功!