使用Itext 进行PDf导出功能
2016-11-06 21:58
302 查看
最近项目要用到pdf导出功能,这个功能此前一直都没接触过,最近通过Itext实现了,特此记录一下,方便日后需要。话不多说:
maven 依赖
这里使用的itext的版本不是最新的itext7,但是能够使用,完成功能。
代码
这里只是简单的一个实例,其中需要注意的是
这句主要是用来解决中文字体的问题,关于pdf上的文字的排版需要去查看API了,对于段前段后距离多少,居中还是距离左边的距离等都有相应的方法。
这里的PDFTable和PDFColumn是自定义的表格JavaBean可以根据自己的需要自定义。
PDFTable
PDFColumn
个人站点
maven 依赖
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> <!-- https://mvnrepository.com/artifact/com.lowagie/itext --> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency>
这里使用的itext的版本不是最新的itext7,但是能够使用,完成功能。
代码
import com.itextpdf.text.*; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import com.origin.eurybia.utils.DateUtils; import javax.servlet.http.HttpServletResponse; import java.util.Date; import java.util.List; public class ExportReportPdfUtil { /** * 报表导出功能 * * @param fileName * @param tableList * @param response * @throws Exception */ public static void export(String fileName, List<PDFTable> tableList, HttpServletResponse response) throws Exception { Document document = new Document(); BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); Font titFont = new Font(bfChinese, 20, Font.NORMAL); Font docFont = new Font(bfChinese, 12, Font.NORMAL); Font subTitle = new Font(bfChinese, 16, Font.NORMAL); Font footnoteFont = new Font(bfChinese, 10, Font.NORMAL); // 设置response参数,可以打开下载页面 response.reset(); response.setContentType("application/pdf;charset=utf-8"); response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1")); PdfWriter.getInstance(document, response.getOutputStream()); //设置标题 document.addTitle("XXXXX"); //打开文档 document.open(); //设置title Paragraph header = new Paragraph("XXXXX", titFont); header.setAlignment(1); document.add(header); //设置报告出具时间 Paragraph time = new Paragraph("【报告出具时间:" + DateUtils.formatDate(new Date(), "yyyy 年 MM 月 dd") + " 】", docFont); time.setIndentationLeft(300); document.add(time); for (PDFTable table : tableList) { Paragraph title = new Paragraph(table.getTitle(), subTitle); document.add(title); if (table.getTextDescription() != null) { Paragraph textDescription = new Paragraph(table.getTextDescription() + "\n", docFont); textDescription.setSpacingBefore(10f); textDescription.setIndentationLeft(50); document.add(textDescription); } if (table.getFootnote() != null) { Paragraph footnote = new Paragraph(table.getFootnote(), footnoteFont); footnote.setIndentationLeft(50); document.add(footnote); } PdfPTable conTable = new PdfPTable(table.getConWidths()); conTable.setSpacingBefore(5f); conTable.setWidthPercentage(80); for (PDFColumn column : table.getColumns()) { PdfPCell cell = new PdfPCell(new Paragraph(column.getText(), docFont)); if (column.isBold) { cell.setBackgroundColor(BaseColor.LIGHT_GRAY); cell.setHorizontalAlignment(Element.ALIGN_CENTER); } cell.setSpaceCharRatio(10f); conTable.addCell(cell); } document.add(conTable); } String str = "\n" + "厂商确认(盖章)"; Paragraph strGaiZhang = new Paragraph(str, titFont); strGaiZhang.setIndentationLeft(250); document.add(strGaiZhang); //关闭文档 document.close(); } }
这里只是简单的一个实例,其中需要注意的是
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
这句主要是用来解决中文字体的问题,关于pdf上的文字的排版需要去查看API了,对于段前段后距离多少,居中还是距离左边的距离等都有相应的方法。
这里的PDFTable和PDFColumn是自定义的表格JavaBean可以根据自己的需要自定义。
PDFTable
import java.util.List; /** * Created by silence on 2016/11/1. * Desc : */ public class PDFTable { private String title; private int numColumns; private float widthPercent; private List<PDFColumn> columns; private float[] conWidths; private String textDescription; private String footnote; public String getTextDescription() { return textDescription; } public void setTextDescription(String textDescription) { this.textDescription = textDescription; } public String getFootnote() { return footnote; } public void setFootnote(String footnote) { this.footnote = footnote; } public float[] getConWidths() { return conWidths; } public void setConWidths(float[] conWidths) { this.conWidths = conWidths; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getNumColumns() { return numColumns; } public void setNumColumns(int numColumns) { this.numColumns = numColumns; } public float getWidthPercent() { return widthPercent; } public void setWidthPercent(float widthPercent) { this.widthPercent = widthPercent; } public List<PDFColumn> getColumns() { return columns; } public void setColumns(List<PDFColumn> columns) { this.columns = columns; } }
PDFColumn
/** * Created by silence on 2016/11/1. * Desc : */ public class PDFColumn { private String text; public boolean isBold = false; public boolean isHeader(){ return false; } public String getText() { return text; } public void setText(String text) { this.text = text; } }
个人站点
相关文章推荐
- 在MS CRM中使用Excel导入/导出的功能对数据进行批量处理
- 使用iText导出成PDF
- java使用itext导出PDF文本绝对定位
- Java使用IText PDF 导出报表
- c#使用输出html字符串进行导出excel功能时,常用到得几种格式:
- 使用iText导出PDF(含有Table)示例
- 关于使用itext导出PDF的具体实践
- 使用itext创建PDF文档-导出大表格-每页显示标题-项目实战
- java 使用itext导出PDF文件,图片文字左右布局
- 使用Lucene对doc、docx、pdf、txt文档进行全文检索功能的实现
- iText的使用例子说明(利用Itext画模板导出word、pdf,纯java实现)
- 使用ITEXT生成pdf文件,使用POI、jxl对excel文件进行读取
- 利用itext操作pdf从数据库导出大量数据--功能汇总(一)
- java iText 的jar导出pdf格式,禁止浏览器预览,直接下载功能
- 一个使用itext导出pdf的例子
- c#使用输出html字符串进行导出excel功能时,常用到得几种格式
- Java使用IText(VM模版)导出PDF,IText导出word(二)
- JAVA 使用iText导出PDF(含有Table)示例
- java使用itext导出PDF文本绝对定位(实现方法)
- 使用itext导出pdf