`
sealbird
  • 浏览: 586186 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用java实现html转pdf

    博客分类:
  • JAVA
阅读更多
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import com.lowagie.text.pdf.BaseFont;

public class TestFlyingSauser
{

    public static void main( String[] args ) throws Exception
    {
//        demo_1();
        demo_2();
    }

    // 不支持中文
    public static void demo_1() throws Exception
    {
        String inputFile = "D:/Test/flying.html";
        String url = new File( inputFile ).toURI().toURL().toString();
        String outputFile = "D:/Test/flying.pdf";
        OutputStream os = new FileOutputStream( outputFile );
        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocument( url );
        renderer.layout();
        renderer.createPDF( os );
        os.close();
    }

    // 支持中文
    public static void demo_2() throws Exception {  
        String outputFile = "G:/demo_3.pdf";  
        OutputStream os = new FileOutputStream(outputFile);  
        ITextRenderer renderer = new ITextRenderer();  
        ITextFontResolver fontResolver = renderer.getFontResolver();  
        fontResolver.addFont("C:/Windows/fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);  
        StringBuffer html = new StringBuffer();  
        // DOCTYPE 必需写否则类似于 这样的字符解析会出现错误  
        html.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");  
        html.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">").
             append("<head>")  
            .append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />")
            .append("<style type=\"text/css\" mce_bogus=\"1\">body {font-family: SimSun;}</style>") 
            .append("</head>")  
            .append("<body>");  
        html.append("<div>支持中文!</div>");  
        html.append("</body></html>");  
        renderer.setDocumentFromString(html.toString());  
        // 解决图片的相对路径问题  
        // renderer.getSharedContext().setBaseURL("file:/F:/teste/html/");  
        renderer.layout();  
        renderer.createPDF(os);  
        os.close();  
    }}




import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

public class HTML2PDF {

/**
  * 调用方式 htmlToPDF(response.getOutputStream(), htmlstr, "C:/WINDOWS/Fonts/simfang.ttf", "FangSong_GB2312", "GB2312", "http://xxxx/dtd/xhtml1-transitional.dtd");
  * 
  * 相关图片必须使用绝对路径才能显示 如果要下载生成的文件,在此方法上方加上:
  * response.setHeader("Content-disposition",
  * "attachment;filename=英文文件名.pdf");
  * 
  * @param 参数
  * @param OutputStream out 输出流
  * @param String htmlcode html代码。
  * 
  * @param String fontName 字体名称 如:FangSong_GB2312
  * @param String fontpath windows 字体路径 如:C:/WINDOWS/Fonts/simfang.ttf
  * @param String encoding 编码 如:GB2312。
  * @param String htmlDTDURL  如:http://xxxx/xhtml1-transitional.dtd
  * version 2009.03.05
  */
public void htmlToPDF(OutputStream out, String htmlcode, String fontpath,
  String
  fontName, String encoding, String htmlDTDURL) throws Exception {
  DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
  ByteArrayOutputStream bos = new ByteArrayOutputStream();
  Transformer transformer = TransformerFactory.newInstance()
    .newTransformer();
  ITextRenderer renderer = new ITextRenderer();
  ITextFontResolver resolver = renderer.getFontResolver();
  InputStream intream = null;
  Document doc = null;
  Document doc2 = null;
  try {
  htmlcode = this.filterHeader(htmlcode,

  encoding, fontName, htmlDTDURL);
  
  intream = new ByteArrayInputStream(htmlcode.getBytes(encoding));
  doc = (Document) builder.parse(intream);
  transformer.setOutputProperty("encoding", encoding);
  new DOMSource(doc);
  transformer.transform(new DOMSource(doc), new StreamResult(bos));
  intream = new ByteArrayInputStream(bos.toString().getBytes());
  doc2 = (Document) builder.parse(intream);
  
  resolver.addFont(fontpath, BaseFont.IDENTITY_H,
    BaseFont.NOT_EMBEDDED);
  
  renderer.setDocument(doc2, null);
  renderer.layout();
  
  renderer.createPDF(out, true);
  
  out.flush();
  out.close();
  } catch (Exception ex) {
  
  throw new Exception(ex.getMessage());
  }
}
/**
  *文件头 
*/
private String filterHeader(String htmlcode, String encoding,String fontName,String htmlDTDURL) {
  htmlcode="<table style=\"font-family:FangSong_GB2312\" width=\"100%\" height=\"100%\" border=\"0\"><tr><td>"+htmlcode+"</td></tr></table>";
  htmlcode="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"  \""+htmlDTDURL+"\" >\n"+htmlcode;
  htmlcode = "<?xml version=\"1.0\" encoding=\"" + encoding + "\" ?>\n"
    + htmlcode;
  return htmlcode;
}
}
分享到:
评论
1 楼 xtso520ok 2011-05-10  
很给力

相关推荐

    JAVA实现PDF转HTML

    本项目提供了使用Java实现的PDF转HTML的功能。 首先,我们要理解PDF转HTML的基本原理。这个过程通常涉及解析PDF文档的布局、文本、图像和样式,然后将其重构为HTML元素。Java中有很多库可以帮助我们完成这项任务,...

    JAVA使用itextpdf实现HTML转PDF

    要使用iTextPDF在Java中实现HTML到PDF的转换,首先确保项目中引入了所需的依赖。在Maven项目中,可以在`pom.xml`文件中添加如下依赖: ```xml &lt;groupId&gt;com.itextpdf&lt;/groupId&gt; &lt;artifactId&gt;itextpdf &lt;version&gt;...

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

    本文将详细讲解如何使用Java实现这一功能,包括HTML转PDF以及在PDF中添加印章。 首先,我们需要一个库来处理HTML转PDF的任务。在Java中,一个常用的库是`Flying Saucer`,它能够将HTML渲染为PDF格式。`Flying ...

    java实现HTML页面转PDF亲测好用

    总的来说,Java实现HTML页面转PDF主要涉及以下几个步骤: 1. 安装`wkhtmltopdf`并确保其可执行文件在系统路径中或在代码中指定。 2. 使用Java的Runtime或第三方库执行`wkhtmltopdf`命令。 3. 处理命令的输出和错误...

    java实现office、wps转pdf,pdf转word

    标题“java实现office、wps转pdf,pdf转word”指的是利用Java编程来实现在不同办公文档格式间的转换,特别是从Microsoft Office和WPS格式转换为PDF,以及从PDF反向转换为Word文档。 首先,让我们讨论从Office和WPS...

    Java实现将html转PDF

    本项目提供了一个Java实现HTML转PDF的解决方案,适用于Eclipse开发环境。 1. **Java与PDF库** Java中用于生成PDF的库有很多,如iText、Flying Saucer、PDFBox等。其中,Flying Saucer是一个常用的库,它可以将HTML...

    Java实现HTML转PDF的解决方案.docx

    Java 实现 HTML 转 PDF 的解决方案是指使用 Java 语言将 HTML 页面转换为 PDF 文档的技术方案。本解决方案通常用于生成 PDF 报表、证书、合同等需要保留固定格式的文档。 在本解决方案中,使用了 Spring 框架来实现...

    Java 使用itext将html转pdf并下载demo

    这个“Java使用iText将html转pdf并下载demo”的主题将深入讲解如何使用iText库实现这一功能。 首先,我们需要理解iText的基本用法。iText库提供了多种API,可以用来创建PDF文档、添加文本、图像、表格等元素。在...

    java后端实现html转pdf的工具类,pd4ml

    Java后端实现HTML转PDF是常见的需求,尤其在生成报告、文档或网页打印场景中。PD4ML是一款高效且功能强大的Java库,专门用于将HTML内容转换为高质量的PDF文档。这个工具类的出现,使得开发者能够利用Java方便地处理...

    Java代码实现txt文件转pdf文件

    在Java中实现TXT到PDF的转换,我们可以使用Apache PDFBox、iText或 Flying Saucer 这样的第三方库。本案例中,由于描述中提到“代码一目了然”,我们可能会使用相对简单易用的Flying Saucer库。Flying Saucer可以将...

    java测试工具html转pdf

    在“java测试工具html转pdf”这个主题中,我们主要关注的是如何使用Java来实现HTML文档向PDF格式的转换。这涉及到对HTML的理解、PDF的生成原理以及Java中的相关库和框架。 首先,HTML(超文本标记语言)是网页设计...

    java URL转PDF文件

    在Java中,我们可以使用`java.net.URL`和`java.net.HttpURLConnection`类来实现。以下是一个简单的示例: ```java URL url = new URL("http://example.com"); HttpURLConnection connection = (HttpURLConnection) ...

    java 实现word 转PDF

    全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换 ,word转pdf已做测试很好用!

    URL转换为PDF的Java实现

    总的来说,Java环境下URL转PDF的方法多样,可以根据具体需求和环境选择合适的方式。无论是通过解析HTML内容、使用渲染引擎还是借助Web自动化工具,Java都能提供相应的库和支持来满足这些需求。在实际应用中,可能还...

    利用Itext实现html转pdf

    在这个场景中,我们将讨论如何利用Itext库在不修改源代码的情况下,实现HTML到PDF的转换,并处理换行问题。 首先,我们需要理解Itext不直接支持HTML到PDF的转换,但它可以通过其他方式间接实现。通常,我们会借助一...

    java的html转pdf

    java实现html转pdf,包括解决base64图片以及中文不显示问题

    如何解决java html转pdf图片不显示问题的源码范例合集new(由浅入深代码范例和详细说明).docx

    为了解决这个问题,本文将介绍使用 iText 和 FlyingSaucer 两个第三方库来实现 Java 中的 HTML 转 PDF 图片显示。 使用 iText 库 iText 库是一个功能强大的开源库,提供了许多实用的功能,可以方便地将 HTML 转换...

    java URL转PDF文件(完美支持中文)

    "java URL转PDF文件(完美支持中文)"的主题着重于如何利用Java库来实现这一功能,并且确保中文字符能够正确显示。在Linux环境下,由于字符编码的问题,中文字符可能会出现乱码,但通过特定的方法和库可以解决这个问题...

    Java-html转pdf文件

    至于提供的压缩包文件"Java-html转pdf"和"Java-htmlתpdf",它们可能是示例代码、依赖库或者其他与转换相关的资源。要使用这些文件,你需要将它们解压缩,并按照项目的结构和需求进行整合。 总之,Java结合Flying ...

Global site tag (gtag.js) - Google Analytics