`
ol_beta
  • 浏览: 287699 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

利用Flying Saucer 和 iText 实现HTMl转PDF(java)

    博客分类:
  • java
阅读更多

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
  • 大小: 12.1 KB
  • 大小: 34.5 KB
分享到:
评论

相关推荐

    java实现将html转pdf,并在指定位置添加印章

    总的来说,Java结合Flying Saucer和iText库,可以很好地实现HTML到PDF的转换,并在指定位置添加印章,满足电子文档签署和安全认证的需求。在实际项目中,还需要考虑错误处理、资源管理以及性能优化等因素,以确保...

    利用Itext实现html转pdf

    以下是一个简单的示例,展示了如何使用Itext和Flying Saucer进行HTML到PDF的转换: ```java import org.xhtmlrenderer.pdf.ITextRenderer; // 创建一个ITextRenderer实例 ITextRenderer renderer = new ...

    使用 itext、flying-saucer 实现html转PDF

    ITextRenderer renderer = new ITextRenderer(); ITextFontResolver fontResolver = renderer.getFontResolver()...String htmlstr = "你的HTML字符串"; renderer.setDocumentFromString(htmlstr); renderer.layout();

    SpringBoot集成Freemarker+FlyingSaucer实现pdf在线预览.pdf

    本文讲述如何使用SpringBoot集成Freemarker和FlyingSaucer实现PDF在线预览、打印和下载的功能。该技术方案可以应用于各种在线文档预览、报表生成、电子邮件发送等场景。 一、Freemarker模板引擎 Freemarker是Java...

    JAVA使用itextpdf实现HTML转PDF

    总之,使用iTextPDF库在Java中实现HTML到PDF的转换是一项实用的技能,但需要注意库对HTML和CSS的支持限制。根据实际需求,可能需要对HTML源码进行调整,或者考虑使用其他兼容性更强的库来实现更丰富的转换效果。

    iText+Flying Saucer生成pdf文档所需要的jar包

    iText和Flying Saucer是两个非常流行的Java库,用于生成高质量的PDF文档。这两个库结合使用,可以有效地处理HTML内容并将其转换为PDF格式,同时支持中文字符集,解决了在生成PDF时中文显示不正常的问题。 首先,...

    flyingsaucer转html为PDF(中文可用)

    `Flyingsaucer`是一个开源Java库,专门用于将HTML内容转换为PDF或其他格式,它支持CSS2.1标准,使得网页的布局和样式能够很好地在PDF中保留。在处理中文内容时,`Flyingsaucer`可能面临一些挑战,但通过正确的配置,...

    flying-saucer-pdf 生成pdf解决图片问题 解决中文问题

    `flying-saucer-pdf` 是一个强大的Java库,它允许开发者将HTML内容转换为高质量的PDF文档。这个库特别适合那些需要从网页或者动态生成的HTML中创建PDF的项目。本文将详细探讨`flying-saucer-pdf`如何解决图片问题...

    flying-saucer-pdf-9.0.9转pdf相关包

    标题中的“flying-saucer-pdf-9.0.9转pdf相关包”指的是使用`flying-saucer`库的特定版本9.0.9来将HTML转换为PDF的工具集。 1. **flying-saucer-pdf-9.0.9.jar**:这是`flying-saucer`的核心组件,负责将HTML渲染成...

    用flying saucer将html生成pdf的例子

    在与flying saucer结合使用时,iText通常用来完成最后的PDF生成步骤,将flying saucer处理后的页面流转换为完整的PDF文档。 【freemarker】是一个模板引擎,常用于生成HTML、XML或其他文本格式的文档。开发者可以...

    flying-saucer生成pdf

    在pom.xml文件中,引入flying-saucer和相关的转换库,如itext。然后,创建一个服务类,使用Java ITextRenderer进行转换操作,接收HTML字符串或文件,生成PDF并返回或保存到服务器。 5. **Freemarker模板引擎**: ...

    利用flying saucer 生成Pdf的例子

    Flying Saucer扩展了IText的功能,使得我们可以利用HTML和CSS这种更熟悉的Web开发语言来生成PDF,这样可以利用已有的前端资源快速生成PDF。 在生成PDF过程中,中文显示问题是一个常见的挑战。由于PDF标准和Unicode...

    flyingsaucer html转pdf demo

    Flyingsaucer的核心在于它使用了开源的Web渲染引擎IText,它能够解析HTML并将其转化为高质量的PDF文档。通过这个工具,我们可以将网页设计精确地复刻到PDF中,包括字体、颜色、图像、表格等元素。这为开发者提供了一...

    flying-saucer-pdf-itext5-9.0.3.jar

    flying-saucer-pdf-itext5-9.0.3.jar

    flyingsaucer-R8.zip

    Flyingsaucer和iText就是两个强大的工具,它们能帮助我们轻松实现这一目标。本篇文章将详细介绍这两个库的功能、使用方法以及它们如何协同工作,以满足PDF生成的需求。 首先,让我们了解下Flyingsaucer。Flying...

    flyingsaucer

    Flying Saucer和iText介绍: A. iText是一个生成PDF文档的开源java库,能够动态从XML或者数据库生成PDF,同时它具备PDF文档的绝大多数属性(比如加密……),支持java,C#等。官网:http://www.itextpdf.com/ B. ...

    iText html转pdf jar包

    iText是一款广泛使用的Java库,专门用于创建和处理PDF文档。在这个特定的场景中,我们关注的是它在HTML转换为PDF的功能。iText库提供了一种高效且灵活的方式来将HTML内容转换成高质量的PDF格式,这在需要将网页或...

    flying-saucer-core+flying-saucer-pdf-itext5.jar

    总之,"flying-saucer-core"和"flying-saucer-pdf-itext5"是Java开发中处理HTML转PDF问题的得力助手,特别是对于处理中文字符的换行问题,它们提供了有效的解决方案。通过合理运用这两个库,我们可以创建出符合预期...

    Flying Saucer ,简单实用的pdf转换api

    - **添加依赖**: 在Java项目中,需要添加Flying Saucer和iText的Maven或Gradle依赖。 - **创建转换器**: 创建`ITextRenderer`实例,这是Flying Saucer的主要类。 - **设置源文件**: 指定要转换的HTML文件路径或者...

Global site tag (gtag.js) - Google Analytics