JAVA HTML 转 PDF
Posted l_learning
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA HTML 转 PDF相关的知识,希望对你有一定的参考价值。
JAVA 通过 itext,wkhtmltopdf 等,将 HTML 转成 PDF。
这里通过 wkhtmltopdf 实现htmlHTML转PDF
wkhtmltopdf 是一个开源的,使用Qt WebKit 渲染引擎,把 html 转换为 pdf 文件的命令行工具。
wkhtmltopdf
下载
下载地址:https://wkhtmltopdf.org/downloads.html根据系统选择相应的版本
这里以Linux为例:
版本:wkhtmltox-0.12.6-1.centos7.x86_64.rpm
安装
- 上传rpm文件到安装目录 /usr/local
cd /usr/local
- 安装 rpm
rpm -ivh wkhtmltox-0.12.6-1.centos7.x86_64.rpm
- 查看安装路径
whereis wkhtmltopdf
- 字体安装(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路径,可以是磁盘s的路径,也可以是网络路径
* @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文件后,文字变浅?怎么办?