文章

html转pdf服务api

html转pdf服务api

有些人是使用网页当做简历,可以有比较不错的观感和更新体验,但是如果要频繁的导出pdf就比较麻烦了,所以我搭建了一个可以动态将html转为pdf的工具,不需要每次手动导出。

直接使用

vercel部署版

1
https://pdf.masterke.cn/url/?url=https%3A%2F%2Fblog.masterke.cn%2Fabout%2F&format=A4

docker版

1
docker run -d --name html2pdf -p 4000:4000 masterke2003/html2pdf:latest

项目介绍

突然发现https://github.com/juicyfx/juicy这个项目更好用,已经转战这边了!!!

开源地址:https://github.com/MasterKe2003/html2pdf

项目结构:本项目是基于运行在docker的puppeteer,然后编写了一个基于express的web服务(感谢rongfengliang-荣锋亮大佬开源,原文链接)监听服务请求,本文只是将原项目二次封装为一个新的docker镜像,集成到一块了。

部署步骤:

Dockerfile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 基于官方 Node.js 镜像
FROM node:18-slim

# 设置工作目录
WORKDIR /app

# 安装依赖,包含 Puppeteer 和其所需的 Chromium 依赖
RUN apt-get update && apt-get install -y \
    fonts-liberation \
    fonts-dejavu \
    fonts-freefont-ttf \
    fonts-droid-fallback \
    fonts-noto-color-emoji \
    fonts-liberation \
    libappindicator3-1 \
    libasound2 \
    libatk-bridge2.0-0 \
    libatk1.0-0 \
    libcups2 \
    libdbus-1-3 \
    libdrm2 \
    libgbm1 \
    libnspr4 \
    libnss3 \
    libxcomposite1 \
    libxdamage1 \
    libxrandr2 \
    xdg-utils \
    --no-install-recommends && \
    rm -rf /var/lib/apt/lists/*

# 安装应用依赖
COPY package*.json ./
RUN npm install

# 复制应用代码
COPY . .

# 暴露服务端口
EXPOSE 4000

# 启动应用
CMD ["npm", "start"]

遇到的坑

网页中懒加载的图片:https://stackoverflow.com/questions/60954346/puppeteer-lazy-images-not-loading-in-headless-mode

waitfortimeout不是可用函数:https://stackoverflow.com/questions/64805395/puppeteer-waitfortimeout-is-not-a-function

附言

是真的肝啊,从下午肝到凌晨两点,哎。因为这个网页下面的懒加载图片pdf一直加载不出来,而image却可以,二者使用的相同的策略,有大佬会的可以交流交流。

QQ20241125-005428

本文由作者按照 CC BY 4.0 进行授权