java利用itext导出pdf
项目中有一功能是导出历史记录,可以导出pdf和excel,这里先说导出pdf。在网上查可以用那些方式导出pdf,用itext比较多广泛。
导出pdf可以使用两种方式,一是可以根据已有的pdf模板,进行生成文档。二是直接用代码生成pdf
一、使用模板生成pdf
1、添加依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
2、创建word,创建需要的样式,例如,保存为pdf格式,
3、使用Adobe Acrobat 打开,打开内容编辑,选择编辑域,编辑域的名称与代码的数据属性名对应。
4、java代码
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
/**
* @Title: CreatePdf.java
* @Description: TODO
* @author zhangjunhong
* @date 2018年10月22日
*/
public class CreatePdf {
public static void fillTemplate() throws Exception {
//读取的模板
String templatePath = "D:/mypdf1.pdf";
//生成的pdf存储的路径
String targetPath = "D:/test1.pdf";
PdfReader reader;
FileOutputStream outputStream;
ByteArrayOutputStream bos;
PdfStamper stamper;
reader = new PdfReader(templatePath);
outputStream = new FileOutputStream(targetPath);
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
//取得模板表单对应的域
AcroFields from = stamper.getAcroFields();
String[] strings = { "12222", "zahang", "男", "1992-09-12" };
int i = 0;
Iterator<String> iterator = from.getFields().keySet().iterator();
while (iterator.hasNext()) {
String name = iterator.next().toString();
System.err.println(name);
from.setField(name, strings[i++]);
}
stamper.setFormFlattening(true);
stamper.close();
Document document = new Document();
PdfCopy copy = new PdfCopy(document, outputStream);
document.open();
PdfImportedPage importedPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
copy.addPage(importedPage);
document.close();
}
public static void main(String[] args) throws Exception{
fillTemplate();
}
}
5、结果
二、根据数据生成pdf并导出,这个好像挺简单的,直接代码一波,看注释,也可以生成表格之类的
@RequestMapping("/export/pdf")
public void exPdf(HttpServletResponse response){
OutputStream os=null;
try {
// 指定解析器
System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
String filename = "大面积延误历史记录详情.pdf";
response.setContentType("application/pdf");
response.setHeader("Content-Disposition",
"attachment;fileName=" + URLEncoder.encode(filename, "UTF-8"));
os = new BufferedOutputStream(response.getOutputStream());
//生成pdf
Document document=new Document();
PdfWriter writer=PdfWriter.getInstance(document, os);
// 页面大小
Rectangle rectangle = new Rectangle(PageSize.A4);
// 页面背景颜色
rectangle.setBackgroundColor(BaseColor.WHITE);
document.setPageSize(rectangle);
// 页边距 左,右,上,下
document.setMargins(20, 20, 20, 20);
document.open();
//中文字体 ----不然中文会乱码
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
//设置字体
Font font = new Font(bf, 14, Font.BOLD, BaseColor.BLACK);
Paragraph p=new Paragraph("设置了字体样式的标题哈哈哈哈哈今天比较闲嘤嘤嘤", font);
document.add(p);
document.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
结果:访问路径http://127.0.0.1:8080/export/pdf,下载下来的pdf文档
还有很多对pdf的操作,如添加page,表格等,可查看itext的官方文档,
或者看这个博客:https://blog.csdn.net/weixin_36380516/article/details/76984283
最后是不是贴上我花了几天写的pdf导出,这个技术是简单了,尼玛项目业务逻辑贼复杂。周五任务完成截止日期,昨天写完啦,等前端对接接口,,就写写博客,算了,先不贴代码。我再整理整理
java利用itext导出pdf的更多相关文章
- Java利用IText导出PDF(更新)
我很久以前写的还是上大学的时候写的:https://www.cnblogs.com/LUA123/p/5108007.html ,今天心血来潮决定更新一波. 看了下官网(https://itextpd ...
- 新知识:Java 利用itext填写pdf模板并导出(昨天奋战到深夜四点,知道今天两点终于弄懂)
废话少说,不懂itext干啥用的直接去百度吧. ***************制作模板******************* 1.先用word做出界面 2.再转换成pdf格式 3.用Adobe Acr ...
- 利用itext导出PDF的小例子
我这边使用的jar包: itext-2.1.7.jar itextasian-1.5.2.jar 代码,简单的小例子,导出pdf: PdfService.java: package com.cy.se ...
- Itext导出PDF,word,图片案例
iText导出pdf.word.图片 一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生 ...
- 利用FR导出PDF汉字乱码的处理
利用FR导出pdf,然后在unigui中显示,发现汉字乱码,改成gb2312,不乱码,但不自动折行,最后是改成DefaultCharSet搞定.FR版本:5.4.6 后记:有的浏览器中还是乱码,把字体 ...
- java根据模板导出PDF(利用itext)
一.制作模板 1.下载Adobe Acrobat 9 Pro软件(pdf编辑器),制作模板必须使用该工具. 2.下载itextpdf-5.5.5.jar.itext-asian-5.2.0.j ...
- Java利用模板生成pdf并导出
1.准备工作 (1)Adobe Acrobat pro软件:用来制作导出模板 (2)itext的jar包 2.开始制作pdf模板 (1)先用word做出模板界面 (2)文件另存为pdf格式文件 (3) ...
- iText导出PDF(图片,水印,页眉,页脚)
项目需要导出PDF,导出的内容包含图片和文本,而且图片的数量不确定,在网上百度发现大家都在用iText,在官网发现可以把html转换为PDF,但是需要收费,那就只能自己写了. 在开始之前先在网上百度了 ...
- iText导出pdf、word、图片
一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...
随机推荐
- OO第二单元作业总结【自我反思与审视】
第二单元作业的完成史,就是一部心酸的血泪史…… 多线程的出现为我(们)打开一片广阔的天地,我也在这方天地摸爬滚打,不断成长!如果说第一单元之前还对Java语法有所了解的话,那么这单元学习多线程则完全是 ...
- Arthur and Walls CodeForces - 525D (bfs)
大意: 给定格点图, 每个'.'的连通块会扩散为矩形, 求最后图案. 一开始想得是直接并查集合并然后差分, 但实际上是不对的, 这个数据就可以hack掉. 3 3 **. .** ... 正解是bfs ...
- CF #552(div3)G 最小lcm
题目链接:http://codeforces.com/contest/1154/problem/G 题意:lcm是最小公倍数,本题就是给你一个数组(可能会重复),要求你判断出那两个数的最小公倍数最小, ...
- 人生苦短,我用python(目录)
一.python基础篇 python中闭包及延时绑定问题 python中的装饰器.生成器 二.前端 bootstrap框架 BOM&DOM JavaScript中的词法分析 三.数据库 mys ...
- php国家或者编码英文字母排序
1.直接复制传入需要排序的字符,然后可以把返回的数据当key,传送给前台function getFirstCharter($str){ if(empty($str)){return '';} $fch ...
- filebeat-kafka日志收集
filebeat-kafka日志收集 由于线上的logstash吃掉大量的CPU,占用较多的系统资源,就想找其它的组件替代.我们的日志需要收集并发送到kafka,生成的日志已经是需要的数据,不用过滤. ...
- Kafka分布式消息队列
基本架构 Kafka分布式消息队列的作用: 解耦:将消息生产阶段和处理阶段拆分开,两个阶段互相独立各自实现自己的处理逻辑,通过Kafka提供的消息写入和消费接口实现对消息的连接处理.降低开发复杂度,提 ...
- vue做的第二个app
用vue做应用最好的还是组件的复用上次做饿了吗的app封装了一个评分star的组件只要引入组件传入size大小和score分数就行了,这次做豆瓣直接就就用上了不用重复写代码.不过vue做单页应用全部挂 ...
- C# 操作数据库常用的 SqlDbHelper
原博客园转载于 https://www.cnblogs.com/felix-wang/p/6742785.html using System; using System.Collections.G ...
- Saku实力挖坑记!!(十八)
Saiku实力挖坑记!!!!!!! 我可真真真的是个挖坑小能手呀!不知道你们有没有遇到过这个异常: Enclosure class mondrian.olap.MondrianDef not foun ...