JAVA HTML 转 PDF

Posted l_learning

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA HTML 转 PDF相关的知识,希望对你有一定的参考价值。

JAVA 通过 itext,wkhtmltopdf 等,将 HTML 转成 PDF。
这里通过 wkhtmltopdf 实现HTML转PDF

wkhtmltopdf 是一个开源的,使用Qt WebKit 渲染引擎,把 html 转换为 pdf 文件的命令行工具。

wkhtmltopdf官网地址

wkhtmltopdf

下载

下载地址:https://wkhtmltopdf.org/downloads.html根据系统选择相应的版本
这里以Linux为例:
版本:wkhtmltox-0.12.6-1.centos7.x86_64.rpm

安装

  1. 上传rpm文件到安装目录 /usr/local
cd /usr/local
  1. 安装 rpm
rpm -ivh wkhtmltox-0.12.6-1.centos7.x86_64.rpm
  1. 查看安装路径
whereis wkhtmltopdf
  1. 字体安装(Linux)
    将 simsum.ttc 字体上传至 /usr/share/fonts/chinese/TrueType
    注:没有该路径就 mkdir 创建,字体也可以去windows系统 C:\\Windows\\Fonts 目录下找

卸载

rpm -qa |grep wkhtmlto
rpm -e wkhtmltox-0.12.6-1.centos7.x86_64

wkhtmltopdf自动生成文档

方式一:通过wkhtmltopdf -H查看自动生成文档

wkhtmltopdf -H

方式二:访问官方查看自动生成文档
https://wkhtmltopdf.org/usage/wkhtmltopdf.txt

JAVA集成wkhtmltopdf

HtmlToPdf拦截器

/**
 * HtmlToPdf拦截器
 */
public class HtmlToPdfInterceptor extends Thread 

    private InputStream inputStream;

    public HtmlToPdfInterceptor(InputStream is)
        this.inputStream = inputStream;
    

    public void run()
        InputStreamReader inputStreamReader = null;
        BufferedReader bufferedReader = null;
        try
            inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            bufferedReader = new BufferedReader(inputStreamReader);
            String line = null;
            while ((line = bufferedReader.readLine()) != null) 
                //打印内容
                System.out.println(line.toString());
            
        catch (IOException e)
            e.printStackTrace();
        finally 
            try
                if(null != inputStreamReader)
                    inputStreamReader.close();
                
                if(null != bufferedReader)
                    bufferedReader.close();
                
            catch (IOException e)
                e.printStackTrace();
            
        
    


wkhtmlltopdf操作类

public class HtmlToPdfOperator 

    /**
     * html转pdf
     * @param fromPath html路径,可以是磁盘路径,也可以是网络路径
     * @param toPath pdf保存路径
     * @return 转换成功返回true
     */
    public void convert(String fromPath, String toPath)
        File file = new File(toPath);
        File parent = file.getParentFile();
        //如果pdf保存路径不存在,则创建路径
        if(!parent.exists())
            parent.mkdirs();
        
        StringBuilder cmd = new StringBuilder();
        //加载wkhtmltopdf
        cmd.append(getWkhtmltopdfPath());
        //将纸张大小设置为自定义宽高的A4
        cmd.append(" --print-media-type");
        cmd.append(" --page-size A4");
        cmd.append(" --page-width 270mm");
        cmd.append(" --page-height 382mm");

        cmd.append(" ");
        cmd.append(fromPath);
        cmd.append(" ");
        cmd.append(toPath);

        try
            Process proc = Runtime.getRuntime().exec(cmd.toString());
            HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream());
            HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream());
            error.start();
            output.start();
            proc.waitFor();
        catch(Exception e)
            e.printStackTrace();
        

    

    /**
     * 获取wkhtmltopdf路径
     * @return
     */
    private String getWkhtmltopdfPath() 
        String wkhtmltopdfPath = "D:\\\\applocation\\\\wkhtmltopdf\\\\bin\\\\wkhtmltopdf.exe";
        return wkhtmltopdfPath;
    


以上是关于JAVA HTML 转 PDF的主要内容,如果未能解决你的问题,请参考以下文章

别人编写好的jasper,Java调用打印pdf怎么控制其纸张大小

acrobat 8转word为PDF文件后,文字变浅?怎么办?

如何在无头 Chrome 中更改纸张尺寸 --print-to-pdf

java将html文件转成pdf

如何用纯java代码实现word转pdf?

如何用纯java代码实现word转pdf