`
高军威
  • 浏览: 181030 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

html 转换成pdf

阅读更多
解决需求:

1.字符串html代码转换成pdf文件
2.根据FreeMarker模板动态生成静态html文件
3.把静态html文件装换成pdf文件
4.解决html编写不够严谨规范的问题,自动转换为符合规范的格式
5.支持中文及换行
6.pdf文件打水印 - (html文件设置背景图片即可)
7.使用用户根据自己的需求改写jar包中的代码添加 页眉页脚,及当前第几页


注意:

使用jar包的版本,特定的jar包是经过改写而实现支持中文及换行问题,附件中给出的就是一组特定版本的jar包,能够解决以上需求

还是有点毛病:
加粗不管用,css样式和B标签都不管用这。。


参考了很多网上的文章:

http://swordshadow.iteye.com/blog/1983935#comments等等。。。

先来个效果图:



1.得到html的文本内容
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/**
 * <ul>
 * <li>功能描述: 工具类 得到html内容</li>
 * </ul>
 * @author gjw
 */
public class GetHtmlContent{
    /**
     * <ul>
     * <li>功能描述: 得到html内容</li>
     * </ul>
     * @param ******
     * @param ******
     * @return ******
     * @author gjw
     */
    public static String getHtmlContent(String tender_id,String invest_id)
    {
        try
        {
            String path = "./upload/44/445/"+tender_id+"/"+invest_id;
            File f = new File(path+"/ceshi.html");
            if (f.exists())
            {
                FileInputStream ism = new FileInputStream(f);
                InputStreamReader isr = new InputStreamReader(ism,"utf-8");
                BufferedReader bs = new BufferedReader(isr);
                String info;
                info = bs.readLine();
                String content = "";
                while(info!=null){
                    content+=info;
                    info =   bs.readLine();
                }
                return content;
            }
            return null;
        } catch (IOException e)
        {
            e.printStackTrace();
            return null;
        }
    }
}

2.String类型的html转换成pdf
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.xml.parsers.ParserConfigurationException;

import org.htmlcleaner.CleanerProperties;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.PrettyXmlSerializer;
import org.htmlcleaner.TagNode;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import org.xml.sax.SAXException;

import LuceneDAO.BaseDAO;

import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;


public class PdfRenderer {
 public static void main(String[] args) throws IOException, DocumentException, ParserConfigurationException, SAXException {

     // Create a buffer to hold the cleaned up HTML 将不严格的html编写方式转为严谨的html编码方式
     ByteArrayOutputStream out = new ByteArrayOutputStream();
     
     // Clean up the HTML to be well formed
     HtmlCleaner cleaner = new HtmlCleaner();
     CleanerProperties props = cleaner.getProperties();
     
     TagNode node = cleaner.clean(getcontext());
     // Instead of writing to System.out we now write to the ByteArray buffer
     new PrettyXmlSerializer(props).writeXmlToStream(node, out);

     // Create the PDF
     ITextRenderer renderer = new ITextRenderer();
     renderer.setDocumentFromString(new String(out.toByteArray()));
     //BaseFont fontResolver = renderer.getFontResolver();
     ITextFontResolver fontResolver = renderer.getFontResolver(); 
     //解决中文不显示问题
     fontResolver.addFont("C:/Windows/Fonts/arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);  
     //设置资源路径 如图片样式文件
     //renderer.getSharedContext().setBaseURL("C:\\htmltopdf\\");
     renderer.layout();
     OutputStream outputStream = new FileOutputStream(".\\towork\\HTMLasPDF.pdf");
     renderer.createPDF(outputStream);

     // Finishing up
     renderer.finishPDF();
     out.flush();
     out.close();
 }
 public static String getcontext()
 {
      Connection con = null;
      PreparedStatement ps = null;
      ResultSet rs = null;
      String sql = "select * from post where fileid = 1";
      BaseDAO baseDao = null;
      try{
          baseDao = new BaseDAO();
          con = baseDao.getConnection();
          ps = con.prepareStatement(sql);
          rs = ps.executeQuery();
          while(rs.next()){
              return rs.getString("fdesc").toString();
          }
      }catch(Exception e){
          e.printStackTrace();
      }finally{
          try
         {
             ps.close();
         } catch (SQLException e)
         {
             e.printStackTrace();
         }
          try
         {
             rs.close();
         } catch (SQLException e)
         {
             e.printStackTrace();
         }
          try
         {
             con.close();
         } catch (SQLException e)
         {
             e.printStackTrace();
         }
      }
      return"";
 }
}

连接数据库类文件
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class BaseDAO {
	// 必须参数
	public static final String DRIVER = "com.mysql.jdbc.Driver"; // 驱动名称
	public static final String URL = "jdbc:mysql://localhost:3306/lucene"; // 数据库地址
	public static final String DBNAME = "root"; // 用户名
	public static final String PASSWORD = "tiger"; // 密码

	/**
	 * 获取数据库连接
	 * 
	 * @return con
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public Connection getConnection() throws ClassNotFoundException,
			SQLException {
		Class.forName(DRIVER);
		Connection con = DriverManager.getConnection(URL, DBNAME, PASSWORD);
		return con;
	}

}

3.html静态文件生成pdf
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.xml.parsers.ParserConfigurationException;

import org.htmlcleaner.CleanerProperties;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.PrettyXmlSerializer;
import org.htmlcleaner.TagNode;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import org.xml.sax.SAXException;

import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;


public class PdfRenderer {
 public static void main(String[] args) throws IOException, DocumentException, ParserConfigurationException, SAXException {

     // Create a buffer to hold the cleaned up HTML将不严格的html编写方式转为严谨的html编码方式
     ByteArrayOutputStream out = new ByteArrayOutputStream();
     
     // Clean up the HTML to be well formed
     HtmlCleaner cleaner = new HtmlCleaner();
     CleanerProperties props = cleaner.getProperties();
     InputStream inputStream = new FileInputStream(".\\towork\\user.html");
     
     TagNode node = cleaner.clean(inputStream, "utf-8");
     // Instead of writing to System.out we now write to the ByteArray buffer
     new PrettyXmlSerializer(props).writeXmlToStream(node, out);

     // Create the PDF
     ITextRenderer renderer = new ITextRenderer();
     renderer.setDocumentFromString(new String(out.toByteArray()));
     
     ITextFontResolver fontResolver = renderer.getFontResolver(); 
     fontResolver.addFont("C:/Windows/Fonts/arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);  

     renderer.layout();
     OutputStream outputStream = new FileOutputStream(".\\towork\\HTMLasPDF.pdf");
     renderer.createPDF(outputStream);

     // Finishing up
     renderer.finishPDF();
     out.flush();
     out.close();
 }
}

4.利用freemark生成静态的html文件
//工具类
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
/**
 * 生成 静态html文件的方法
 * */
public class FreeMarkerUtil{
//templatePath模板文件存放路径
//templateName 模板文件名称
//filename 生成的文件名称
public static void analysisTemplate(String templatePath,String templateName,String fileName,Map<?,?>root){
try {
   Configuration config=new Configuration();
  //设置要解析的模板所在的目录,并加载模板文件
  config.setDirectoryForTemplateLoading(new File(templatePath));
   //设置包装器,并将对象包装为数据模型
   config.setObjectWrapper(new DefaultObjectWrapper());
   
   //获取模板,并设置编码方式,这个编码必须要与页面中的编码格式一致
   //否则会出现乱码
   Template template=config.getTemplate(templateName,"UTF-8");
   //合并数据模型与模板
   FileOutputStream fos = new FileOutputStream(fileName);
   Writer out = new OutputStreamWriter(fos,"UTF-8");
      template.process(root, out);
      out.flush();
      out.close();
  } catch (IOException e) {
   e.printStackTrace();
  }catch (TemplateException e) {
   e.printStackTrace();
  }
 }
}

//测试类
import java.util.HashMap;
import java.util.Map;

import com.seening.utils.SWResultList;
import com.sinocec.model.xrwd.SWAreaFactory;
/**
 * 测试ftl生成html文件
 * */
public class ClientTest{
    public static void main(String[] args){
        User user=new User();
        user.setUserName("李四");
        user.setUserPassword("123");
          
        Map<String,Object> root=new HashMap<String, Object>();
        root.put("user", user);;
        String templatesPath="./WEB-INF/templet";
        String templateFile="templet.ftl";
        String htmlFile="./upload/templet/commontemplet.html";
        FreeMarkerUtil.analysisTemplate(templatesPath,templateFile,htmlFile,root);
    }
}


    core-renderer3.jar
    htmlcleaner.jar
    iText-2.0.8.jar
    iTextAsian.jar
    jtidy-r8-21122004.jar
    mysql-connector-java-5.1.6-bin.jar

下面有测试项目
http://www.micmiu.com/opensource/expdoc/itext-xml-worker-cn/
分享到:
评论
2 楼 wenjiao8204322 2015-12-16  
不好意思说错了,是变量替换后,如果是英文和数字,是不换行的,如果是中文是换行的、,那请问英文和数字太长,该怎么解决换行问题,如果可以的话加下我qq 3227632996
1 楼 wenjiao8204322 2015-12-16  
楼主你好,有问题、一直难以解决,我们项目上线后,就遗留在这就是,生成pdf的时候,写模板表格能够换行,但是变量比如很长,是说明的那种,导出来的pdf就不换行。就直接戳到表格外面去了,一直很费解,求楼主帮忙,该如何解决。如果可以的话加下我qq 3227632996

相关推荐

    poi创建word、生成html、itext将html转换成pdf。pd4ml将jsp转成pdf

    1.用户导入word生成pdf -首先导入word的时候读取word里面的全部内容。调用(ReadAndWriteDoc)然后将内容 传送到createPdf里面生成pdf。导入的时候读取采用poi /生成的时候采用的是...4.将html转换成pdf(itext)

    html转换成PDF文件demo.zip

    本示例("html转换成PDF文件demo.zip")提供了一个实现这一功能的演示,主要涉及到HTML解析、PDF生成以及相关的Java编程技术。 1. **HTML解析**:HTML是用于构建网页的标记语言,包含结构和样式信息。在这个示例中...

    word、生成html,html转换成pdf

    1.用户导入word生成pdf -首先导入word的时候读取word里面的全部内容。调用(ReadAndWriteDoc)然后将内容 传送到createPdf里面生成pdf。导入的时候读取采用poi /生成的时候采用的是itext ...4.将html转换成pdf(itext)

    html转化成PDF

    ### HTML转换为PDF的核心原理 HTML转PDF的过程实质上是将网页布局、样式以及可能包含的图片、字体等资源转换为PDF格式,以便于离线阅读和打印。这个过程可以通过不同的方式实现,包括使用服务器端渲染、客户端...

    html转换成pdf

    HTML到PDF转换是一种常见的需求,尤其在Web开发和文档生成领域。HTML是一种标记语言,用于构建网页,而PDF(Portable Document Format)则是一种通用格式,能够保持文档的原始布局和样式,便于打印和分发。在给定的...

    Html 转换成PDF

    NULL 博文链接:https://zhangwenlongchina.iteye.com/blog/2108509

    HTML转化成PDF

    HTML转PDF 需要jar包 iText-2.0.8.jar,core-renderer.jar(有支持中文和换行的)

    将html转换成pdf

    本文将详细介绍如何将HTML转换为PDF,以及这个过程中的关键技术和注意事项。 首先,我们要理解HTML和PDF两种格式的区别。HTML是超文本标记语言,主要用于创建网页,它的特点是动态和灵活,可以适应不同设备的屏幕...

    使用iText-2.0.8将Html转换为pdf,带图片功能

    在版本2.0.8中,它提供了将HTML转换为PDF的功能,这对于从网页内容生成打印版或者提供离线阅读材料非常有用。这个过程涉及到多个步骤和技术,下面将详细阐述如何使用iText 2.0.8实现HTML到PDF的转换,并特别关注其中...

    JAVA使用itextpdf实现HTML转PDF

    因此,将HTML转换为PDF需要正确处理CSS样式、图像、链接等元素。 要使用iTextPDF在Java中实现HTML到PDF的转换,首先确保项目中引入了所需的依赖。在Maven项目中,可以在`pom.xml`文件中添加如下依赖: ```xml ...

    Android平台下,将Html文本转换为PDF格式并输出

    在Android平台上,将HTML文本转换为PDF格式是一个常见的需求,特别是在开发阅读应用或者需要将网页内容保存为离线文档时。这个过程涉及到多个技术环节,包括HTML解析、CSS样式处理、图像渲染以及PDF生成。本篇文章将...

    itext+flaying saucer把html转化成pdf所有jar包

    在IT行业中,将HTML转换为PDF是常见的需求,特别是在生成报告、文档或电子书时。iText和Flying Saucer是两个强大的Java库,它们可以协同工作来实现这一目标。本篇将详细介绍这两个库以及如何利用它们处理中文内容,...

    WORD转换成PDF的软件

    比如word转成pdf,rtf转换成pdf,txt转成pdf,html转换成pdf,xls转换成pdf,ppt转换成pdf,xml转换成pdf,使用word 转 pdf软件无需安装Adobe Acrobat,Acrobat Reader pdf软件。  word转pdf(pdftoword)工具是一款Word...

    HTML转换成PDF和压缩包的方法

    总之,将HTML转换为PDF和打包成压缩包是常见的需求,可以通过各种开源工具、API或编程接口来实现。选择哪种方式取决于具体的应用场景,例如自动化需求、跨平台兼容性、性能要求等因素。了解并掌握这些方法,可以帮助...

    可以将html转成pdf的代码.rar

    在这个名为"可以将html转成pdf的代码.rar"的压缩包中,包含的资源可以帮助开发者在VB环境中实现HTML到PDF的转换。 首先,pdflib.dll是一个PDF库,它可能包含了用于创建、编辑和处理PDF文档的API函数。这个动态链接...

    html转换pdf 页面抓取内容,分页进行处理,后台进行处理,功能效果不错

    HTML转换为PDF是一种常见的需求,尤其在Web应用和文档生成中。这个过程涉及到页面抓取、内容解析以及分页处理,通常由后台服务执行以确保高效性和稳定性。本篇文章将详细探讨这一技术领域,主要围绕Java后台实现HTML...

    vue,html转pdf,下载导出及打印

    "Vue 实现 HTML 转 PDF 下载导出及打印" 在本文中,我们将介绍如何...在上面的代码中,我们使用了 img2base64 函数将图片转换为 base64 编码的字符串,然后使用 getPdf 函数将 HTML 转换为 PDF,并将 PDF 下载或打印。

Global site tag (gtag.js) - Google Analytics