java 导出pdf_一次java导出pdf的经历
近期由于工作需要,需要将html代码导入到pdf中,经过了几种pdf的方案对比后发现IText是最简单和便捷的一种方式,于是乎采用了Itext。
PDF生成
第一步:导入Maven依赖
com.itextpdf
itextpdf
5.4.2
com.itextpdf.tool
xmlworker
5.4.1
com.itextpdf
itext-asian
5.2.0
org.xhtmlrenderer
flying-saucer-pdf
9.0.3
第二步:直接上代码
public static void main(String[] args) throws IOException
{
String html = PDFKit.readFileByUrl("http://127.0.0.1/export/1/1"); // 将html代码读取到html字符串中 try {
Document document = new Document();
PdfWriter mPdfWriter = PdfWriter.getInstance(document, new FileOutputStream(new File("C:\\data\\3.pdf")));
document.open();
ByteArrayInputStream bin = new ByteArrayInputStream(html.getBytes());
XMLWorkerHelper.getInstance().parseXHtml(mPdfWriter, document, bin, null, new ChinaFontProvide());
System.out.println("生成完毕");
document.close();
} catch (Exception e) {
e.printStackTrace();
}
} public static final class ChinaFontProvide implements FontProvider
{
@Override public boolean isRegistered(String s)
{ return false;
}
@Override public Font getFont(String arg0, String arg1, boolean arg2, float arg3, int arg4, BaseColor arg5)
{
BaseFont bfChinese = null; try
{ bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
} catch(Exception e)
{
e.printStackTrace();
}
Font FontChinese = new Font(bfChinese, 12, Font.NORMAL); return FontChinese;
}
}
另附PDFKit.java工具类
public static String readFileByUrl(String urlStr) {
String res=null; try {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置超时间为3秒
conn.setConnectTimeout(3*1000); //防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); //得到输入流
InputStream inputStream = conn.getInputStream();
res = readInputStream(inputStream);
} catch (Exception e) {
log.error("通过url地址获取文本内容失败 Exception:" + e);
} return res;
} /**
* 从输入流中获取字符串
* @param inputStream
* @return
* @throws IOException */
public static String readInputStream(InputStream inputStream) throws IOException { byte[] buffer = new byte[1024]; int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream(); while((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close(); //System.out.println(new String(bos.toByteArray(),"utf-8"));
return new String(bos.toByteArray(),"utf-8");
}
至此 dpf就可以到下面路径中查看了C:\\data\\3.pdf
PDF预览
只需在页面中增加如下代码即可
Title
注意:html文档一定是,不可以是 不然body的100% 会失去效果
预览效果
特别说明
如上代码生成的pdf,如果直接用工具打开后发现字体是没有问题,但是嵌套在网页后发现字体竟然不是宋体了,下面我们来介绍下IText输出中文的三种字体的选择方式
1、使用iTextAsian.jar中的字体
BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);2、使用Windows系统字体(TrueType)
BaseFont.createFont("C:/WINDOWS/Fonts/SIMLI.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
3、使用资源字体(ClassPath) BaseFont.createFont("/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); //下面着重介绍
上面是设置字体的方式,刚刚咱们用的第一种方式,所以pdf预览的的时候字体会变,改用下面的方式就没有任何问题了,下面咱们说下标红的是什么意思
由于项目使用的是springboot,所以发布到liunx后并不能直接从jar中查找相应的字体,要改用ClassPathResource的方式获取,因此更换代码如下:ClassPathResource resource = new ClassPathResource("static/STSONG.TTF");
bfChinese = BaseFont.createFont(resource.getURL().toString(), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
可将STSONG.TTF直接放入resources文件夹根目录即可
这样windows和linux都可以正确的生成pdf并预览了。更换后的效果:
另附:常用字体
//楷体字
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//simkai.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//方正舒体
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//FZSTK.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//方正姚体
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//FZYTK.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//仿宋体
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//黑体
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//华文彩云
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//STCAIYUN.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//华文仿宋
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//STFANGSO.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//华文细黑
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//STXIHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//华文新魏
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//STXINWEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//华文行楷
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//STXINGKA.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//华文中宋
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//STZHONGS.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//隶书
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//SIMLI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//宋体-方正超大字符集
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//SURSONG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//幼圆
BaseFont bfComic = BaseFont.createFont("c://windows//fonts//SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
java 导出pdf_一次java导出pdf的经历相关推荐
- java导出pdf_一次java导出pdf的经历
近期由于工作需要,需要将html代码导入到pdf中,经过了几种pdf的方案对比后发现IText是最简单和便捷的一种方式,于是乎采用了Itext. PDF生成 第一步:导入Maven依赖 com.ite ...
- java导出pdf_一张PDF了解JDK11 GC调优秘籍-附PDF下载
简介 JDK11相比JDK10,添加了一个新的Source-File Mode,可以直接通过java来运行单个java源文件,而不需要进行编译.同时还提供了新的HTTP API,支持响应性stream ...
- Java 使用 iText5 API 根据需求导出 PDF
iText 目前有两套版本,分别是 iText5 和 iText7.iText5 应该是网上用的比较多的一个版本.iText5 因为是很多开发者参与贡献代码,因此在一些规范和设计上存在不合理的地方.i ...
- java使用freemark实现word(.doc/.docx)/pdf生成和导出(附源码和模板文件)
freemark生成word/pdf 一. 背景 二.实现的技术选型以及遇到的坑 三.最终的效果 2.1 `.doc` word效果展示 2.1 `.docx` word效果展示 2.2 docx w ...
- 【原创】Java开发word模板转html导出pdf
使用iText5来导出pdf,具体操作步骤如下: 1.首先创建一个doc格式的word文档,转换为html格式 word模板转html链接地址 2.替换要填充的内容,把html文件后缀改为ftl并放在 ...
- 硬核!Java 实现数据动态插入,生成 PDF、EXECL,完美导出功能!
>>号外:关注"Java精选"公众号,回复"面试资料",免费领取资料!"Java精选面试题"小程序,3000+ 道面试题在线刷, ...
- Java POI 导出EXCEL经典实现 Java导出Excel
转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...
- JAVA实现创建Excel表并导出(转发)
JAVA实现创建Excel表并导出(转发) 最近在做毕设,要求导出word,excel,pdf,这是excel. 原文是:http://blog.csdn.net/u014621859/article ...
- java word 题目导入_Java导入导出Excel和Word
目的 实现Excel/Word导入导出,分以下步骤 导入 上传文件 解析Excel/Word里面的内容 导出 生成Excel/Word文件 文件下载 如何实现 上传文件----------Common ...
最新文章
- ibatis example Class 使用
- 唠唠SE的集合-10——Collections工具类
- tensorflow怎样调用gpu_tensorflow基本用法(图,会话,tensor,变量等)
- 用python向mongodb插入数据_Python操作MongoDB数据库(一)
- 服务器采购项目技术方案,小型机服务器采购项目技术方案.doc
- mysql df_MySQL主从复制实战
- php hibernate,Hibernate总结
- 那么多人吹Python,但我真怕你不知道是为什么!
- 图像分割matlab阈值自动计算,图像分割的阈值算法matlab实现.doc
- class构造函数实现接口数据整合
- 运动社交或将成为“反科技”先锋
- Atitit rpc之道 attilax著 艾龙 著 1. 远程过程调用协议	1 2. 历史	2 2.1. RPC的早期发展	3 3. RPC这种编程范式存在的三大问题以及这些问题	5 3.1.
- matlab 图片保存pdf,matlab中的图片保存技巧.pdf
- 警报:愚人节中国黑客可能发动史上最强病毒攻击
- matlab倒立摆pid仿真,一级倒立摆课程设计--倒立摆PID控制及其Matlab仿真
- html象棋游戏源码分享
- 西游记中揭示的深刻人生哲理
- 百度地图定位不准的问题
- Linux怎么进入根目录查看文件
- SpringBoot项目中华为云 内容审核的使用(内附代码)
热门文章
- 轻松高效玩转DTO(Data Transfer Object)
- 微信团队放大招!他们为了小程序居然...
- java poi excel读写_JAVA-POI操作Excel读写
- 领克linux系统怎么下载软件,新升级的领克车机系统好用吗?我们来盘一下
- windows 安装cython-bbox
- EfficientNetv2测试
- xface 远程桌面 无法使用tab键盘
- ncnn windows
- relu与maxpool
- Expected a default value of type Tensor on parameter residual: