近期由于工作需要,需要将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的经历相关推荐

  1. java导出pdf_一次java导出pdf的经历

    近期由于工作需要,需要将html代码导入到pdf中,经过了几种pdf的方案对比后发现IText是最简单和便捷的一种方式,于是乎采用了Itext. PDF生成 第一步:导入Maven依赖 com.ite ...

  2. java导出pdf_一张PDF了解JDK11 GC调优秘籍-附PDF下载

    简介 JDK11相比JDK10,添加了一个新的Source-File Mode,可以直接通过java来运行单个java源文件,而不需要进行编译.同时还提供了新的HTTP API,支持响应性stream ...

  3. Java 使用 iText5 API 根据需求导出 PDF

    iText 目前有两套版本,分别是 iText5 和 iText7.iText5 应该是网上用的比较多的一个版本.iText5 因为是很多开发者参与贡献代码,因此在一些规范和设计上存在不合理的地方.i ...

  4. java使用freemark实现word(.doc/.docx)/pdf生成和导出(附源码和模板文件)

    freemark生成word/pdf 一. 背景 二.实现的技术选型以及遇到的坑 三.最终的效果 2.1 `.doc` word效果展示 2.1 `.docx` word效果展示 2.2 docx w ...

  5. 【原创】Java开发word模板转html导出pdf

    使用iText5来导出pdf,具体操作步骤如下: 1.首先创建一个doc格式的word文档,转换为html格式 word模板转html链接地址 2.替换要填充的内容,把html文件后缀改为ftl并放在 ...

  6. 硬核!Java 实现数据动态插入,生成 PDF、EXECL,完美导出功能!

    >>号外:关注"Java精选"公众号,回复"面试资料",免费领取资料!"Java精选面试题"小程序,3000+ 道面试题在线刷, ...

  7. Java POI 导出EXCEL经典实现 Java导出Excel

    转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...

  8. JAVA实现创建Excel表并导出(转发)

    JAVA实现创建Excel表并导出(转发) 最近在做毕设,要求导出word,excel,pdf,这是excel. 原文是:http://blog.csdn.net/u014621859/article ...

  9. java word 题目导入_Java导入导出Excel和Word

    目的 实现Excel/Word导入导出,分以下步骤 导入 上传文件 解析Excel/Word里面的内容 导出 生成Excel/Word文件 文件下载 如何实现 上传文件----------Common ...

最新文章

  1. ibatis example Class 使用
  2. 唠唠SE的集合-10——Collections工具类
  3. tensorflow怎样调用gpu_tensorflow基本用法(图,会话,tensor,变量等)
  4. 用python向mongodb插入数据_Python操作MongoDB数据库(一)
  5. 服务器采购项目技术方案,小型机服务器采购项目技术方案.doc
  6. mysql df_MySQL主从复制实战
  7. php hibernate,Hibernate总结
  8. 那么多人吹Python,但我真怕你不知道是为什么!
  9. 图像分割matlab阈值自动计算,图像分割的阈值算法matlab实现.doc
  10. class构造函数实现接口数据整合
  11. 运动社交或将成为“反科技”先锋
  12. Atitit rpc之道 attilax著 艾龙 著 1. 远程过程调用协议 1 2. 历史 2 2.1. RPC的早期发展 3 3. RPC这种编程范式存在的三大问题以及这些问题 5 3.1.
  13. matlab 图片保存pdf,matlab中的图片保存技巧.pdf
  14. 警报:愚人节中国黑客可能发动史上最强病毒攻击
  15. matlab倒立摆pid仿真,一级倒立摆课程设计--倒立摆PID控制及其Matlab仿真
  16. html象棋游戏源码分享
  17. 西游记中揭示的深刻人生哲理
  18. 百度地图定位不准的问题
  19. Linux怎么进入根目录查看文件
  20. SpringBoot项目中华为云 内容审核的使用(内附代码)

热门文章

  1. 轻松高效玩转DTO(Data Transfer Object)
  2. 微信团队放大招!他们为了小程序居然...
  3. java poi excel读写_JAVA-POI操作Excel读写
  4. 领克linux系统怎么下载软件,新升级的领克车机系统好用吗?我们来盘一下
  5. windows 安装cython-bbox
  6. EfficientNetv2测试
  7. xface 远程桌面 无法使用tab键盘
  8. ncnn windows
  9. relu与maxpool
  10. Expected a default value of type Tensor on parameter residual: