利用Flying Saucer 和 iText 实现HTMl转PDF(java)
来源:互联网 发布:linux cp 不覆盖 编辑:程序博客网 时间:2024/04/28 03:38
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。
package 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
- 利用Flying Saucer 和 iText 实现HTMl转PDF(java)
- 利用Flying Saucer 和 java iText 实现HTMl转PDF
- 利用Flying Saucer 和 iText 实现生成PDF报表
- 使用 itext、flying-saucer 实现html转PDF
- itext+Flying Saucer生成pdf
- 基于flying-saucer和freemark实现HTML导出pdf
- Flying Saucer实现html转pdf(一些问题,持续更新)
- 利用Freemarker、itext和Flying saucer导出复杂表格的PDF格式文档
- 使用Itext-Flying Saucer将Html转PDF的font-family问题
- iText和flying saucer结合生成pdf的技术
- iText和flying saucer结合生成pdf的技术
- iText和flying saucer结合生成pdf的技术
- iText和flying saucer结合生成pdf的技术
- iTextRenderer(Flying Saucer) HTML转PDF
- iTextRenderer(Flying Saucer) HTML转PDF
- 基于iText和flying saucer结合freemark java生成pdf 范例
- itext+flying saucer 生成PDF不换行
- 使用flying-saucer-pdf将html转pdf
- 关于PE病毒编写的学习(九)——追加病毒的编写(上)
- 如何调出调试中的即时窗口?
- 思考mysql内核之初级系列1--- mysql的启动过程(摘自老杨)
- ASP.NET操作EXCEL时出现的错误 Retrieving the COM class factory for component with CLSID(转)
- 中文化和国际化问题权威解析之四:Java中文化和国际化攻略
- 利用Flying Saucer 和 iText 实现HTMl转PDF(java)
- 判断浏览器的类型
- BaseAdapter notifyDataSetChanged()
- 思考mysql内核之初级系列2---我可以为你服务什么?(摘自老杨)
- 电源通知 RequestPowerNotifications
- c# 十六进制字串 转 Byte数组
- 从GoogleMap的金字塔模型到无限级索引数据结构(一)
- 思考mysql内核之初级系列3---办理业务的流程(摘自老杨)
- ARM工具链安装笔记