- 浏览: 282279 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
狼子六:
已经开始用了
Java 枚举7常见种用法 -
相约的旋律:
方法一下面的"public static fianl ...
Java 枚举7常见种用法 -
kiddy2012:
...
[转载]程序员装B指南 -
fancy105:
写得很好,简单明了双全面!
Java 枚举7常见种用法 -
he_wen:
请问一下 G1算法是否在线上使用了?
Garbage First(G1) 日志分析工具
PDF是目前为止最流行的文档格式之一。通常情况下,想要创建一个PDF文档,需要使用Adobe的API来生成,但这非常麻烦。为了能方便的将HTML(XHTML)生成PDF文档,下面介绍两个开源的java库:Flying Saucer和iText。
Flying Saucer和iText介绍:
Flying Saucer(或者叫xhtmlrender project on java.net)是一个基于iText的开源java库,能够轻松的将html(带css2.1)生成pdf。
iText是一个生成PDF文档的开源java库,能够动态从XML或者数据库生成PDF,同时它具备PDF文档的绝大多数属性(比如加密……),支持java,C#等。
生成简单的PDF
下面我们首先创建一个简单的带css的html,代码如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>My First Document</title> <style type="text/css"> b { color: green; } </style> </head> <body> <p> <b>Greetings Earthlings!</b> We've come for your Java. </p> </body> </html>接下来生成一个pdf
package oliver.itext.html2pdf; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import org.xhtmlrenderer.pdf.ITextRenderer; import com.lowagie.text.DocumentException; public class FirstDoc { public static void main(String[] args) throws DocumentException, IOException { String path = System.getProperty("user.dir") + "/src/"; String inputFile = path + "samples/firstdoc.html"; String url = new File(inputFile).toURI().toURL().toString(); String outputFile = path + "outputs/fistdoc.pdf"; OutputStream os = new FileOutputStream(outputFile); ITextRenderer render = new ITextRenderer(); render.setDocument(url); render.layout(); render.createPDF(os); os.close(); } }
结果如下:
用Fly生成内容
下面的我们先用StringBuilder生成一个HTML的字符串,然后用DOM解析,生成PDF。
com.sankuai.meituan.ct.doamin; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.StringBufferInputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.xhtmlrenderer.pdf.ITextRenderer; @SuppressWarnings("deprecation") public class OneHundredBottles{ public static void main(String[] args) throws Exception { String path =System.getProperty("user.dir")+"/src/"; StringBuffer buf = new StringBuffer(); buf.append("<html>"); // put in some style buf.append("<head><style language='text/css'>"); buf.append("h3 { border: 1px solid #aaaaff; background: #ccccff; "); buf.append("padding: 1em; text-transform: capitalize; font-family: sansserif; font-weight: normal;}"); buf.append("p { margin: 1em 1em 4em 3em; } p:first-letter { color: red; font-size: 150%; }"); buf.append("h2 { background: #5555ff; color: white; border: 10px solid black; padding: 3em; font-size: 200%; }"); buf.append("</style></head>"); // generate the body buf.append("<body>"); buf.append("<p><img src='"+path+"samples/100bottles.jpg'/></p>"); for(int i=99; i>0; i--) { buf.append("<h3>"+i+" bottles of beer on the wall, " + i + " bottles of beer!</h3>"); buf.append("<p>Take one down and pass it around, " + (i-1) + " bottles of beer on the wall</p>/n"); } buf.append("<h2>No more bottles of beer on the wall, no more bottles of beer. "); buf.append("Go to the store and buy some more, 99 bottles of beer on the wall.</h2>"); buf.append("</body>"); buf.append("</html>"); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(new StringBufferInputStream(buf.toString())); ITextRenderer renderer = new ITextRenderer(); renderer.setDocument(doc, null); String outputFile = path+"outputs/100bottles.pdf"; OutputStream os = new FileOutputStream(outputFile); renderer.layout(); renderer.createPDF(os); os.close(); } }效果如下:
在服务端创建PDF
下面展示在servlet里面创建pdf
public class PDFServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/pdf"); StringBuffer buf = newStringBuffer(); buf.append("<html>"); String css = getServletContext().getRealPath("/PDFservlet.css"); // put in some style buf.append("<head><link rel='stylesheet' type='text/css' "+"href='"+css+"' media='print'/></head>"); ... //generate the rest of the HTML // parse our markup into an xml Document try{ DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(new StringBufferInputStream(buf.toString())); ITextRenderer renderer = new ITextRenderer(); renderer.setDocument(doc, null); renderer.layout(); OutputStream os = response.getOutputStream(); renderer.createPDF(os); os.close(); } catch(Exception ex) { ex.printStackTrace(); } }原文地址:http://today.java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html
发表评论
-
Java压缩/解压缩二进制文件
2013-02-08 13:56 5681在Java中提供Deflater和Inflater工具类来 ... -
java常用并发工具介绍
2013-02-06 23:22 1567本文主要介绍的工具包括: CountDownLa ... -
Garbage First(G1) 日志分析工具
2012-12-22 22:35 2140G1介绍:http://softbeta.iteye.com/ ... -
Spring源码阅读——Ioc初始化过程
2012-11-20 21:52 1219以web项目启动为例,介绍一下Ioc容器的初始化。 下面这个 ... -
Spring源码阅读——获得bean
2012-10-20 20:57 3124已XmlWebApplicationContext为例,从ge ... -
Spring源码阅读——BeanFactory体系结构
2012-10-10 18:10 2167以下是看代的码随笔,想到哪写到哪,没有组织逻辑,见谅见谅。 ... -
生成随机数组
2012-09-11 20:23 10181.要求生成一组n位的数字,0-9...(n个)之间的稠密集合 ... -
O(1)复杂度获得栈中的极值
2012-09-09 23:47 1199设计一个栈,O(1)复杂度实现入栈,出栈,栈中最大值,栈中最小 ... -
ubuntu12.04上编译openjdk7
2012-06-13 15:31 4824获取源码 从openjdk代码仓库获取(比较慢) ... -
jinfo 查看、设置JVM参数
2012-04-25 15:36 5101用法: # jinfo -h Usage: ... -
一些参数,弥补CMS(Concurrent Mark-Sweep)收集器的缺点
2012-03-28 21:11 1637CMS缺点:http://softbeta.iteye ... -
[转载]PrintCompilation 参数解释
2012-03-27 13:59 1506英文不好,所以就不翻译了: b Blocking co ... -
《Head First 设计模式》读书笔记
2012-03-01 11:30 15091.策略模式(Strategy) ... -
解决jrobin图像中文乱码
2012-02-14 23:31 1118目前发现一种方法可以解决,做个标记。 利用字体: RrdG ... -
Java内存管理——垃圾收集概念及特点
2012-02-03 12:37 1014碎碎念,介绍Java内存管 ... -
[转载]hotspot源码(JDK7)
2012-01-19 19:25 1498源码结构图,方便理解: ├─agent ... -
跨平台获取java进程id(Process ID in Java)
2012-01-18 19:20 9091原创地址:http://blog.lichengwu.cn/ ... -
了解CMS(Concurrent Mark-Sweep)垃圾回收器
2011-12-27 20:13 120191.总体介绍: CMS(Concurrent Mark- ... -
fail-fast
2011-12-13 19:34 1014fail-fast:快速失败 一般情况下,在对集合进行迭代( ... -
利用VisualVM监视远程JVM
2011-11-17 20:06 4610VisualVM介绍 VisualVM是集成了多个JDK命令 ...
相关推荐
Flying Saucer和iText介绍: A. iText是一个生成PDF文档的开源java库,能够动态从XML或者数据库生成PDF,同时它具备PDF文档的绝大多数属性(比如加密……),支持java,C#等。官网:http://www.itextpdf.com/ B. ...
flying-saucer-pdf-itext5-9.0.3.jar
flying-saucer-pdf-9.0.9.jar; flying-saucer-core-9.0.9.jar; freemarker.jar; itext-2.1.7.jar;
基于iText 和 flying saucer结合freemark java 生成 pdf
而目前开源的组件中,Itext的确是一个First Choice,如果各位单纯是做把图片转成PDF或者自己写了Velocity或者FreeMarker模板生成了HTML是非常推荐直接用Itext来进行的。而如果,大家像我这样已经有前人写好了HTML...
基于iText 和 flying saucer 结合 freemark java 生成 pdf
flying sauser,基于iText自身的问题,让我们开始寻求可以真正意义上模版技术,那么flying sauser就是为了这个问题出现的产品,能解析HTML和CSS,而且能输出成image,PDF等格式。具体使用,请访问:...
但是导出一篇文章到pdf里面,就需要借助core-render.jar包,但是一行中文过长,不会自动换行,在pdf文件里面把过长的字符给截取,这样很不友好,修改Flying Saucer的源码,解决了这个中文不换行问题。希望能给大家...
flying saucer把html生成PDF,感觉还不错,支持css样式,itext 和 pd4ml好像对于复杂样式不能支持
java生成pdf需要的包(支持中文,表格换行亲测),支持css,用到的是freemarker ,flying-saucer,itext
java语言动态生成html串,通过flying saucer动态生成PDF文件;处理图片大小及坐标等信息...
java html生成pdf的解决方案,包括常见错误的处理,如中文问题、css路径、图片,内有测试例子等。是java中pdf方案的好帮手哦
该代码提供了word、excel、pdf三种类型的文档生成方案,其中word文档使用“freemarker + xml + 模板”技术;excel使用“POI + 模板”技术;pdf使用“freemarker + itext + flying saucer”技术
word源码java acp v6.5.4 ...flying-saucer-pdf-itext5 knife4j junit5 nacos sentinel spring-cloud-alibaba spring-cloud spring-boot spring-aop spring-data-jpa spring-security spring-security-oa