【JAVA秒会技术之玩转PDF】IText转PDF秒会
来源:互联网 发布:阿里云售后工程师 编辑:程序博客网 时间:2024/04/30 22:44
IText转PDF秒会
最近在开发过程中,碰到了这样的需求:将图片及相关文字信息,按视觉标准,排版后直接转成PDF。因为之前没接触过,乍一听很懵,感觉会很难。但经过一番网上搜索学习后,发现其实很简单!
(一)Maven引入依赖
注意:一定要按此版本号引入,不然会出现很多错误,包括“中文乱码、中文不输出或直接报错”等异常!
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.4.3</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.4.1</version></dependency><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.1</version></dependency>
(二)快速入门 —— Hello Word!
package com.netease.test;import java.io.FileOutputStream;import com.itextpdf.text.Document;import com.itextpdf.text.Paragraph;import com.itextpdf.text.pdf.PdfWriter;public class ITextTest {public static void main(String[] args) throws Exception {//第一步,创建一个 iTextSharp.text.Document对象的实例: Document document = new Document(); //第二步,为该Document创建一个Writer实例: PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\HelloWorld.pdf")); //第三步,打开当前Document document.open(); //第四步,为当前Document添加内容; document.add(new Paragraph("Hello World")); //第五步,关闭Document document.close(); System.out.println( "OK!" );}}去C盘下找找,打开你的第一个用ITextTest生成的PDF吧,就这么简单,有没有爱上它?
(三)HTML转PDF之快速入门 —— Hello Word!
1.先写一个简单的HelloWorld.html
<!DOCTYPE html><html><head><meta charset="UTF-8"/><title>Insert title here</title></head><body><h1>Hello Word!</h1><h2>Hello Word!</h2><h3>Hello Word!</h3><h4>Hello Word!</h4><h5>Hello Word!</h5><h6>Hello Word!</h6><h7>Hello Word!</h7></body></html>注:此处一定要注意,所有标签最终必须全部封闭!比如<meta charset="UTF-8"/>没有封闭,写成了<meta charset="UTF-8">。转换时,会如下错误:
Exception in thread "main" com.itextpdf.tool.xml.exceptions.RuntimeWorkerException: Invalid nested tag head found, expected closing tag meta.2.Java代码
import java.io.FileInputStream;import java.io.FileOutputStream;import com.itextpdf.text.Document;import com.itextpdf.text.pdf.PdfWriter;import com.itextpdf.tool.xml.XMLWorkerHelper;public class ITextTest {public static void main(String[] args) throws Exception {//第一步,创建一个 iTextSharp.text.Document对象的实例: Document document = new Document(); //第二步,为该Document创建一个Writer实例: PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\HelloWorld2.pdf")); //第三步,打开当前Document document.open(); //第四步,为当前Document添加内容: //document.add(new Paragraph("Hello World")); XMLWorkerHelper.getInstance().parseXHtml(writer, document, new FileInputStream("C:\\HelloWorld.html")); //第五步,关闭Document document.close(); System.out.println( "OK!" );}}去C盘下找找,打开你的第二个用ITextTest生成的PDF,看看效果吧:
(四)直接向PDF中写入html代码
package com.netease.test;import java.io.ByteArrayInputStream;import java.io.FileOutputStream;import com.itextpdf.text.BaseColor;import com.itextpdf.text.Document;import com.itextpdf.text.Font;import com.itextpdf.text.FontProvider;import com.itextpdf.text.pdf.BaseFont;import com.itextpdf.text.pdf.PdfWriter;import com.itextpdf.tool.xml.XMLWorkerHelper;public class PdfTest {public static void main(String[] args) {try {Document document = new Document();PdfWriter mPdfWriter = PdfWriter.getInstance(document, new FileOutputStream("C:\\test.pdf"));document.open();String s = getHtml();ByteArrayInputStream bin = new ByteArrayInputStream(s.getBytes());XMLWorkerHelper.getInstance().parseXHtml(mPdfWriter, document, bin, null, new ChinaFontProvide());System.out.println("OK");document.close();} catch (Exception e) {e.printStackTrace();}}/** * 拼写html字符串代码 * <p>Title: getHtml</p> * @author Liyan * @date 2017年4月1日 下午6:30:30 */public static String getHtml() {StringBuffer html = new StringBuffer(); html.append("<div>咆哮的黄河</div>"); html.append("<div><img src='http://www.photo0086.com/member/5758/pic/2013081217201520156.JPG'/></div>"); return html.toString();}/** * 解决中文字体 * <p>Title: ChinaFontProvide</p> * @author Liyan * @date 2017年4月1日 下午6:30:48 */public static final class ChinaFontProvide implements FontProvider {@Overridepublic 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);//也可以使用Windows系统字体(TrueType) //bfChinese = BaseFont.createFont("C:/WINDOWS/Fonts/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); } catch (Exception e) {e.printStackTrace();}Font FontChinese = new Font(bfChinese, 20, Font.NORMAL);return FontChinese;}@Overridepublic boolean isRegistered(String arg0) {return false;}}}注意:IText并不是支持所有前端的标签!
去C盘下找找,打开你的第三个用ITextTest生成的PDF,看看效果吧:
如果你还有进一步需求,想详细了解IText的强大功能,可以下载下面的两个文档,进行参考!
点击下载:
《iText-手札》
《iText中文文档》
2 1
- 【JAVA秒会技术之玩转PDF】IText转PDF秒会
- 【JAVA秒会技术之玩转SQL】MySQL优化技术(一)
- 【JAVA秒会技术之玩转SQL】MySQL优化技术(二)
- 【JAVA秒会技术之玩转高效分页】EasyUI + PageHelper实现分页
- 【JAVA秒会技术之玩转多线程】多线程那些事儿(一)
- 【JAVA秒会技术之分布式锁】玩转Redis分布式锁
- 【JAVA秒会技术之玩转图片】图片下载和等比或指定大小压缩快速实现
- 【JAVA秒会技术之玩搞定GC】GC算法与种类
- 【JAVA秒会技术之ActiveMQ】ActiveMQ的快速入门
- 【JAVA秒会技术之秒杀面试官】集合篇(二)
- 【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(一)
- 【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(二)
- 【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(三)
- 【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(四)
- 【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(五)
- 【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(六)
- 【JAVA秒会技术之秒杀面试官】JavaSE常见面试题(一)
- 【JAVA秒会技术之秒杀面试官】JavaSE常见面试题(二)
- 开发项目步骤
- win7操作系统平台中安装ORACLE 10G所注意事项
- SSH整合(Spring4.3.7+Hibernate5.2.8+Struts2.5)
- 【LeetCode】130. Surrounded Regions
- fedora25桌面圖標
- 【JAVA秒会技术之玩转PDF】IText转PDF秒会
- Android之使用RecyclerView出现脏数据解决
- ubantu14.04 启动mongo db
- Flask--学习笔记--上传、下载文件
- BZOJ P3631[JLOI2014]松鼠的新家
- 代理与反向代理
- Struts2学习随笔
- jdk1.8新特性(转载)
- 区间最值查询 --RMQ算法