wkhtmltopdf服务

PHP将网页内容变成pdf(几乎无损) 前几天,做了一个小项目,全程几乎没什么太大的问题,但是在实现页面内容自动生成pdf 然后推送邮件这块感觉到一丝丝的麻烦,前前后后找过mpdf ,dompdf,fpdf等等。。。太多了,都是泪水。遇到了都是类似float定位的问题,不是中文字符不支持就是样式显示不准确。惨不忍睹! 然后呢。。开始找资料于是就有了新的办法–wkhtmltopdf 就是这个东西。几乎涵盖所有平台 简单介绍一下这个插件。只... 阅读详情

前言

之前写过一篇 《Lumen生成PDF》 的文章,当时在生成 PDF 的时候,遇到了一些问题,并加以解决了。

前段时间,项目组中的小伙伴发现了一个好项目 wkhtmltopdf/wkhtmltopdf。

可以直接将 HTML 转换成 PDF,这跟我们之前的诉求一致。

Docker版

KnpLabs/snappy 是基于 wkhtmltopdf/wkhtmltopdf 扩展而来的 PHP 项目。

我们通过加工,将其做成一个服务。

环境信息

  • PHP7.4+
  • swoole
  • composer
  • supervisor
  • wkhtmltopdf 0.12.15

项目地址

文件内容

composer.json:

{
  "name": "imjcw/wkhtml2x",
  "description": "html2pdf",
  "require": {
    "php": "^7.4",
    "knplabs/knp-snappy": "^1.2"
  }
}

wkhtml2x.php:

#!/usr/bin/env php
<?php

include_once './vendor/autoload.php';

define('WKHTMLTOPDF', '/usr/bin/wkhtmltopdf');
// define('WKHTMLTOIMAGE', '/usr/bin/wkhtmltoimage');

$http = new \Swoole\Http\Server('0.0.0.0', 80);

$http->on('request', function (\Swoole\Http\Request $request, \Swoole\Http\Response $response) {
    $uri = $request->server['path_info'];
    if ($uri == '/pdf') {
        try {
            $content = $request->post['file'] ?? '';
            if ($request->files['file'] ?? '') {
                $content = @file_get_contents($request->files['file']);
            }
            $url = $request->post['url'] ?? '';
            if (!$content && !$url) {
                throw new \Exception('没有需要转换的内容');
            }

            $snappy = new \Knp\Snappy\Pdf(WKHTMLTOPDF, $request->post['options'] ?? []);
            $response->header('Content-Type', 'application/pdf');
            if ($url) {
                $response->end($snappy->getOutput($url));
            } else {
                $response->end($snappy->getOutputFromHtml($content));
            }
        } catch (\Throwable $t) {
            $response->status(500);
            $response->end(str_replace('__ERROR__', $t->getMessage(), '<!DOCTYPE html><html><head><title>Internal Server Error</title></head><body><h1>Internal Server Error</h1><p>__ERROR__</p></body></html>'));
        }
    } else {
        $response->status(404);
        $response->end('<!DOCTYPE html><html><head><title>404 Not Found</title></head><body><h1>404 Not Found</h1></body></html>');
    }
});

$http->start();

使用方法

# 获取镜像
docker pull imjcw/wkhtml2x:latest
# 前面的80端口为宿主机端口,可以变更
docker run -p 80:80 --name=wkhtml2x imjcw/wkhtml2x:latest

请求地址:127.0.0.1/pdf

请求方式:POST

请求参数:

参数必填说明
file和 url 二选一文件内容
url和 file 二选一网址
options否PDF参数

其中,options 的一些定义,需要参考对应文档

wkhtmltopdf 官方参数文档:传送门

wkhtmltopdf Knp/Snappy 参数文档:传送门

返回的是文件流

待提升

目前支持了 pdf,并未支持 image 的生成。

容器因 swoole 变大了不少,而我们只是用了其中的一个小功能,这里也可以优化。

最后

处理问题的方式多种多样,在上次写 Lumen生成PDF 的时候,并没有想太多,在后续出现类似需求的时候,才发现做事情不能只顾眼前。

Snappy:用于生成缩略图,快照,PDF,URL或HTML页面的php类库 Snappy是PHP5用于生成缩略图,快照,PDF,URL或HTML页面。它采用了优秀的基于WebKit的wkhtmltopdf和wkhtmltoimage可以适应在OSX,Linux的窗口。 立即下载

相关推荐

Simulink中为Scope模块添加图例的方法

比如我要在Scope模块输出三轴加速度的数据,但三轴数据波形混杂在一起不太好看,此时就需要在Scope模块中添加图例来使波形看起来更加清晰明了。 注:我这里使用的Matlab版本为2019a 1.首先在simulink中打开,需要添加图例的Scope,如图示: 2.在Matlab,command窗口输入: >> set(0,'ShowHiddenHandles','On'); >> set(gcf,'menubar','figure'); 此时你会发现Scope窗口菜单栏多了好几

Kunfly的博客 1万+

html 后端生成 PDF

1. 使用thinkphp + knplabs/knp-snappy2. 安装软件 wkhtmltopdf提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

weixin_46197288的博客 801

sap销售发货的流程_SAP销售订单发货后如何实现发票的自动创建?

问SAP销售订单发货后如何实现发票的自动创建?答业务场景有些快消零售企业,SAP系统单据量大,单据金额少,一般在销售发货后即可确认收入。此时无需人工在系统内操作VF01或者VF04进行开票操作,可将该操作设置成后台作业进行自动批量开票,具体操作如下:1、定义任务:VF06输入完以上信息,点击保存进入以下界面:说明:当前日期的意思是“开票的日期”等于“系统电脑中的当前日期”当前日期+/-...

weixin_42358409的博客 3363

Snappy 开源项目使用教程

Snappy 是一个由 KnpLabs 开发的高速压缩/解压缩库。它旨在提供极快的压缩和解压缩速度,尽管压缩后的文件大小可能会比原始文件大20%到100%。Snappy 的设计目标是稳定、快速且鲁棒,适用于处理大量数据的生产环境。 ## 项目快速启动 ### 安装 Snappy 首先,确保你已经安装了 Composer,然后通过以下命令安装 Snappy: ```bash composer...

gitblog_00251的博客 709

从零玩转Vitis裸机开发:手把手教你创建、移植与实战优化

✅ Vitis裸机开发全流程✅ 中断系统配置技巧✅ 跨平台移植方法论✅ 性能优化实战经验研究FreeRTOS移植探索AMP(非对称多处理)架构学习使用Vitis Analyzer进行性能分析技术雷达:关注Xilinx最新推出的Vitis Unified IDE,其集成了更强大的调试和分析工具。立即动手实践吧!

QQ_778132974的博客 584

基于卷积神经网络CNN实现电力负荷多变量时序预测(PyTorch版)

随着智能电网的发展,精准的电力负荷预测对能源调度和电网稳定具有重要意义。本文基于PyTorch框架,提出一种基于卷积神经网络(CNN)的多变量时间序列预测模型,用于电力负荷的短期预测。

时序笔记 988

使用PHP将HTML转换为PDF或图片:分析

使用别人的程序,发现将求职者在线简历,可以生成 PDF 简历,以及简历图片,供求职者下载。 这样,求职者也有兴趣完善自己的在线简历了,可以根据所选的模板,生成各种漂亮的简历,然后下载下来。 公司也打算做一下,这个功能交给同事做了,这里我也稍微了解下。 思考: 生成图片: 后端:我们使用 GD 库、Imagick 等图片库,来通过坐标来生成图片,自己实现相当麻烦! 前端:现在经常使用的...

beyond__devil的博客 4396

提示工程ROI计算模板:架构师私藏Excel表(含自动计算)

花3个人力优化提示词,到底能带来多少实际收益?“这个提示工程项目值得做吗?投入10万成本,多久能回本?“不同LLM应用的提示词优化优先级怎么排?全凭经验拍脑袋?当前90%的企业在提示工程投入上缺乏标准化的量化评估方法,导致资源浪费(盲目投入无回报项目)或错失机会(低估高价值优化点)。ROI = (总收益 - 总成本) / 总成本 × 100%对于提示工程,总成本=显性成本+隐性成本,总收益=直接收益+间接收益(后文会详细拆解)。提示工程的价值不是“玄学”,而是可以用数据量化的投资行为。本文分享的。

AI开发架构师 1074

云服务器安装wkhtmltopdf示例

本文介绍了在CentOS 8服务器上安装wkhtmltopdf工具及中文字体的完整流程,并提供了基于Flask的远程PDF生成服务实现方案。主要内容包括:1) 下载安装wkhtmltopdf RPM包并验证安装;2) 安装思源宋体和黑体中文字体;3) 部署Python Flask服务接收HTML内容并返回PDF文件;4) 服务器端口配置和防火墙设置;5) 服务启动与管理方法。该方案解决了HTML转PDF过程中的中文显示问题,为远程PDF生成提供了可靠的实现路径。

weixin_41286767的博客 828

【2026年阿里巴巴集团暑期实习- 4月25日-算法岗-第二题- 矩阵计数】(题目+思路+Java&C++&Python解析+在线测试)

摘要: 给定两个非负整数序列a和b,构造n×m矩阵C,其中C[i][j]=a[i]×b[j]。统计矩阵中元素≥k的数量。解法是先对数组b排序,然后对于每个a[i],若k=0则直接累加m;若a[i]=0且k>0则跳过;否则计算需要的最小b[j]值,在排序后的b中使用二分查找确定满足条件的元素数量。时间复杂度为O((n+m)log m),空间复杂度O(1)。代码实现了排序和二分查找的高效组合。

m0_73659489的博客 65

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)linux驱动由浅入深系列:块设备驱动之二(块设备驱动结构分析)块设备驱动的模型还是基本基于字符设备驱动的,可以简单理解为块设备仅仅增加了操作缓冲区,对用户请求顺序进行队列重拍等等。字符设备驱动的相关分析可以查看本博客相关的博文。 按照本博客的行文习惯,在具体分析块设备驱动代码之前,我们会从整体上了解一下研究对象的特征,以及用户空间...

Radia的专栏 1万+

wkhtmltopdf服务自动扩缩容:基于K8s HPA的实现

你是否遇到过wkhtmltopdf服务在业务高峰期响应缓慢,而低谷期资源浪费的问题?本文将介绍如何利用Kubernetes的Horizontal Pod Autoscaler(HPA,水平Pod自动扩缩器)实现wkhtmltopdf服务的自动扩缩容,确保服务稳定性的同时优化资源利用率。读完本文后,你将能够: - 理解wkhtmltopdf服务的资源需求特点 - 配置基于CPU和内存指标的HPA策略...

gitblog_01130的博客 294

YOLOv8全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题

DEGConv通过方向先验嵌入、边缘增强卷积和动态门控三大机制,针对性解决了YOLO在处理裂缝类细长、多方向、低对比度目标时的特征提取不足问题,显著提升了裂缝检测的精度与鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 518

从Docker到K8s:wkhtmltopdf容器编排与服务发现

在现代应用架构中,将HTML内容转换为PDF格式是许多业务系统的常见需求。无论是生成报表、发票还是文档导出,wkhtmltopdf作为一款强大的命令行工具,能够利用QT Webkit渲染引擎将HTML页面高效转换为PDF文件。然而,随着应用规模的扩大和部署环境的复杂化,如何在容器化环境中高效运行wkhtmltopdf并实现服务的可靠编排,成为了开发者面临的重要挑战。 wkhtmltopdf是一款...

gitblog_00213的博客 451

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

wkhtmltopdf容器化部署:Docker Compose多服务配置全指南

你是否还在为wkhtmltopdf环境依赖冲突、多实例部署复杂而烦恼?本文将带你通过Docker Compose实现一站式容器化部署方案,彻底解决环境一致性问题,同时支持API服务、定时任务和监控告警的多场景应用。读完本文你将获得:完整的Docker镜像构建方案、多服务编排配置、性能优化技巧以及生产级监控告警实现。 ## 一、容器化部署优势与架构设计 ### 1.1 为什么选择容器化 传统部...

gitblog_00222的博客 553

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MAS 激活脚本:免费一键永久激活 Windows 与 Office 的 4 种完整方案

重装完系统,右下角立刻弹出"激活 Windows"水印,Office 一打开就提示激活错误。**Microsoft Activation Scripts(MAS)** 是一款免费开源的一键激活工具,覆盖 Windows 8.1–11 与 Office 2013–2024,内置 HWID、Ohook、TSforge、Online KMS 共 4 种激活方式,双击就能跑,个人电脑一次做永久。 ##

gitblog_00261的博客 547

HTML转PDF微服务设计:基于gRPC的wkhtmltopdf服务实现

你是否还在为以下问题困扰? - 单实例wkhtmltopdf在高并发下频繁崩溃 - 转换任务阻塞主线程导致系统响应延迟 - 多语言客户端集成困难,接口兼容性差 - 资源隔离不足,恶意HTML可能耗尽服务器资源 本文将详细介绍如何构建一个高性能、可扩展的HTML转PDF微服务,通过gRPC实现跨语言调用,结合线程池和资源限制确保服务稳定性。**读完本文你将掌握**: - 基于C API封装wkht...

gitblog_00928的博客 394

Docker容器化wkhtmltopdf:微服务架构下的PDF生成最佳实践

你是否还在为微服务架构下的PDF生成服务稳定性发愁?是否遭遇过环境依赖冲突、资源占用过高或部署复杂等问题?本文将详细介绍如何通过Docker容器化wkhtmltopdf,解决这些痛点,实现轻量级、可扩展的PDF生成服务。读完本文,你将掌握Docker容器化wkhtmltopdf的完整流程,包括镜像构建、多阶段优化、服务编排及性能调优技巧。 ## wkhtmltopdf简介 wkhtmltopd...

gitblog_00295的博客 804

从命令行到企业服务:Go语言集成wkhtmltopdf构建高性能PDF生成系统

你是否还在为PDF生成服务的高延迟、低并发问题烦恼?本文将带你从基础命令行工具开始,逐步构建一个基于Go语言和wkhtmltopdf的企业级PDF生成系统,解决动态内容转换、大规模并发和资源优化等核心痛点。读完本文你将掌握: - wkhtmltopdf核心功能与命令行参数优化 - C API调用流程与Go语言绑定实现 - 高性能服务架构设计与性能调优技巧 - 企业级部署最佳实践与监控方案 ##...

gitblog_00519的博客 463

wkhtmltopdf服务自动扩缩容:Kubernetes HPA配置实践

在大规模HTML转PDF服务部署中,固定资源分配面临双重困境:业务高峰期请求堆积导致超时(平均响应延迟>30s),低谷期资源利用率不足(CPU使用率

gitblog_01195的博客 298

如何使用AWS Lambda与wkhtmltopdf构建无服务器PDF转换服务:完整指南

在现代应用开发中,将HTML内容转换为PDF格式是许多业务场景的常见需求。无论是生成报告、发票还是电子书,高效可靠的PDF转换工具都是开发者的重要帮手。wkhtmltopdf作为一款强大的开源工具,能够将HTML页面直接转换为高质量PDF文件。本文将详细介绍如何将wkhtmltopdf与AWS Lambda结合,构建一个可扩展、低成本的无服务器PDF转换服务,让你轻松实现按需生成PDF文档的功能。

gitblog_00754的博客 331

wkhtmltopdf与Java集成:Spring Boot应用中的PDF生成服务

你是否还在为Java应用中的PDF生成功能烦恼?无论是电商订单、财务报表还是用户合同,高质量的PDF文档都是业务系统不可或缺的组成部分。本文将带你一步到位实现基于wkhtmltopdf的PDF生成服务,通过Spring Boot框架构建可靠、高效的PDF解决方案。读完本文你将掌握: - wkhtmltopdf核心功能与Java调用原理 - Spring Boot环境配置与依赖管理 - 三种PDF...

gitblog_00825的博客 574

服务器端java转pdf_java使用wkhtmltopdf实现Html转pdf,并在centos服务器部署步骤。

下面是java调用方法:public static void main(String[] args) {String tmpFileName = UUID.randomUUID().toString();String htmlUrl = "http://36kr.com/";String pdfFilePath = tmpFileName + ".pdf";try {pdfTest(htmlUrl...

weixin_34515452的博客 174

linux服务器Wkhtmltopdf 安装

1、下载wkhtmltopdfwget http://download.gna.org/wkhtmltopdf/obsolete/linux/wkhtmltopdf-0.10.0_rc2-static-amd64.tar.bz2 2、解压压缩包tar jxvf wkhtmltopdf-0.10.0_rc2-static-amd64.tar.bz2 -C /opt3、重命名文件夹,移动文件夹## F...

weixin_39833195的博客 1495

wkhtmltopdf灾备方案:高可用PDF生成服务架构设计

在数字化转型加速的今天,PDF文档作为信息载体的重要性日益凸显。电商平台的订单确认、金融机构的电子合同、业务系统的证明文件,都依赖PDF生成服务的稳定运行。然而,单节点的wkhtmltopdf服务面临三大核心风险:资源耗尽导致的服务崩溃、网络波动引发的渲染失败、硬件故障造成的服务中断。本文将基于[wkhtmltopdf](https://link.gitcode.com/i/b8eb3e1a011...

gitblog_00623的博客 418
上一篇: ELKF日志学习(十四)Kibana基于Sentinl实现钉钉告警
下一篇: PHP 限制定时任务进程数量
IMJCW
博客等级 码龄10年 13粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值