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);
        }
    }
}
相关推荐
GlobalTradercrb14 小时前
独立站SEO先写博客还是先优化产品页?看站点阶段
数据库·人工智能·google·pdf·go·seo
热爱生活的五柒17 小时前
zotero能导入已经下载好的pdf文件嘛,并且点击条目时,能直接看到下载的pdf文件嘛,我还希望能在里面做笔记
笔记·pdf
开开心心就好20 小时前
白天晚上自动调蓝光,护眼工具亮度可调
服务器·开发语言·算法·pdf·ocr·intellij-idea·idea
asdzx6720 小时前
C# 将 HTML 转换为 PDF:基于 Chrome 的转换方案
pdf·c#·html
电子阿板1 天前
Altium Designer 横向纵向图纸混合时,输出PDF时让每个图纸自动方向方法
pdf
andrsted1 天前
练题簿在线免费刷题:将资料、Word 和 PDF导入小程序练习
学习·微信小程序·小程序·pdf·word·学习方法
Eyfcom1 天前
〖实战〗跨境报关单证自动化:XML 报文生成、PDF 套打与单一窗口同步上传的工程实现
xml·pdf·自动化·报关单证·清关自动化
开开心心就好1 天前
安卓PDF处理工具,免费无广告零弹窗
android·服务器·开发语言·算法·pdf·ocr
原子延迟2 天前
iLovePDF免费吗?不限次数的PDF压缩5款(2026)
图像处理·人工智能·计算机视觉·pdf
2601_965454232 天前
AI视频制作:券商研报怎么转口播视频:PDF 解读、配音和图表自动成片的方法
人工智能·pdf·音视频