JAVA使用wkhtml 将html转成pdf或Image文件

linux的wkhtml 安装:

linux安装wkhtmltopdf(清晰明了)_sout-lanys的博客-CSDN博客

win的wkhtml安装:

直接下载:wkhtmltopdf

html 必须加UTF-8编码

<head>

<meta charset="utf-8">

</head>

java代码:

复制代码
import lombok.extern.log4j.Log4j2;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

/**
 * <p>
 *   html转换工具
 * </p>
 *
 * @author Garcia
 * @since 2023-09-12
 */

@Log4j2
public class HtmlUtils {

    private final static String WIN_PDF_TOOL = "D:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";

    private final static String WIN_IMAGE_TOOL = "D:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltoimage.exe";

    private final static String LINUX_PDF_TOOL = "/usr/local/bin/wkhtmltopdf";

    private final static String LINUX_IMAGE_TOOL = "/usr/local/bin/wkhtmltoimage";


    /**
     * html转PDF
     *
     * @param htmlPath html路径
     * @param pdfPath  pdf路径
     */
    public static void htmlToPdf(String htmlPath, String pdfPath) {
        File file = new File(pdfPath);
        File parent = file.getParentFile();
        //如果pdf保存路径不存在,则创建路径
        if (!parent.exists()) {
            parent.mkdirs();
        }
        String tool;
        StringBuilder cmd = new StringBuilder();
        if (System.getProperty("os.name").contains("Windows")) {
            //非windows 系统
            tool = WIN_PDF_TOOL;
        }else {
            tool = LINUX_PDF_TOOL;
        }
        cmd.append(tool);
        cmd.append(" ");
        cmd.append("-B 0 -L 0 -R 0 -T 0 ");
        //开启本地文件访问
        cmd.append("--enable-local-file-access ");
        //cmd.append(" --header-line");//页眉下面的线
        //cmd.append(" --header-center 这里是页眉这里是页眉这里是页眉这里是页眉 ");//页眉中间内容
        //cmd.append(" --margin-top 3cm ");//设置页面上边距 (default 10mm)
        //cmd.append(" --header-html file:///" + WebUtil.getServletContext().getRealPath("") + FileUtil.convertSystemFilePath("\\style\\pdf\\head.html"));// (添加一个HTML页眉,后面是网址)
        //cmd.append(" --header-spacing 5 ");// (设置页眉和内容的距离,默认0)
        //cmd.append(" --footer-center (设置在中心位置的页脚内容)");//设置在中心位置的页脚内容
        //cmd.append(" --footer-html file:///" + WebUtil.getServletContext().getRealPath("") + FileUtil.convertSystemFilePath("\\style\\pdf\\foter.html"));// (添加一个HTML页脚,后面是网址)
        //cmd.append(" --footer-line");//* 显示一条线在页脚内容上)
        //cmd.append(" --footer-spacing 5 ");// (设置页脚和内容的距离)
        cmd.append(htmlPath);
        cmd.append(" ");
        cmd.append(pdfPath);

        try {
            Process proc = Runtime.getRuntime().exec(cmd.toString());
            InputStreamReader isr = new InputStreamReader(proc.getInputStream(), StandardCharsets.UTF_8);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null) {
                System.out.println("html转pdf进度和信息:"+ line);
            }
            proc.waitFor();
        } catch (Exception e) {
            log.error("HTML转PDF失败",e);
        }
    }

    public static void htmlToImg(String srcPath, String destPath) {
        try {
            File file = new File(destPath);
            File parent = file.getParentFile();
            //如果pdf保存路径不存在,则创建路径
            if (!parent.exists()) {
                parent.mkdirs();
            }
            String tool;
            StringBuilder cmd = new StringBuilder();
            if (System.getProperty("os.name").contains("Windows")) {
                //非windows 系统
                tool = WIN_IMAGE_TOOL;
            }else {
                tool = LINUX_IMAGE_TOOL;
            }
            cmd.append(tool);
            cmd.append(" ");
            cmd.append(srcPath);
            cmd.append(" ");
            cmd.append(destPath);

            Process proc = Runtime.getRuntime().exec(cmd.toString());
            InputStreamReader isr = new InputStreamReader(proc.getInputStream(), StandardCharsets.UTF_8);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null) {
                System.out.println("html转jpg进度和信息:"+ line);
            }
            proc.waitFor();
        } catch (Exception e) {
            log.error("HTML转IMAGE失败",e);
        }
    }
}
相关推荐
鲲穹AI种草2 天前
PDF 文档多格式转换处理,多款 PDF 处理工具能力客观记录
pdf·文档格式转换
Felicia-侧听2 天前
PDF怎么转换成OFD?在线PDF转OFD方法
pdf·pdf转换·ofd·电子发票·文件格式转换·pdf转ofd·ofd格式
开开心心_Every3 天前
实现鼠标键盘动作录制与重复播放的工具
微信·jupyter·pycharm·pdf·计算机外设·word·excel
2601_962299493 天前
使用 Python 将 CSV 转为 PDF(含表格样式美化)
python·pdf·csv·spire.xls·表格样式
tianyue1003 天前
PDFsam Basic PDF 分割、合并
pdf
SunnyDays10113 天前
如何使用 Python 给 PDF 添加附件:文档附件与附件注释
开发语言·python·pdf
SamChan903 天前
PDF翻译服务端到端基准测试:4款主流方案的吞吐量、延迟、内存占用对比
服务器·网络·python·ai·pdf·wpf
Felicia-侧听3 天前
PDF怎么转换成Word?3种方法实现PDF转可编辑Word
pdf·word·pdf转word
乘风归趣3 天前
spire.doc.free将word中占位符替换为pdf文件,以及合并PDF
pdf·word
庖丁AI4 天前
PDF 转 Markdown 工具怎么选?AI 知识库和 RAG 场景要注意什么
人工智能·pdf·文档解析