百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案

csdh11 2025-01-16 19:11 29 浏览

(坑给你踩完,可行的结果给你探明,让你的方向明确,存在的小问题自行解决)

1、不要考虑前端转pdf了,我已经帮您爬过坑了。

前端转PDF,本质就是把网页通过canvas转成图片,图片转成PDF。

坑1:PDF文件占内存很大,本来应该是500kb的pdf,直接给你转出20M的pdf。
坑2:PDF很模糊,文字重影,各种控制画质的参数都无法解决。
坑3:PDF中其实就是一张图片,文字无法复制。


2、不要考虑后端PHP转PDF了,我已经帮您爬过坑了。

后端转PDF,本质就是用PHP干HTML的事情。

坑1:PHP去写html那种苦,只有苦命人能吃,特别是遇到JS图表等样式,直接生无可恋。
坑2:PHP去干html的事情无法在浏览器上预览,只有写一下导出pdf看效果,一套开发下来,导几百个pdf,这种苦您能吃不?
坑3:还要求你引入字体包等,麻烦死了。

3、不要考虑后端调用HTML转PDF了,我已经帮您爬过坑了。

后端调用HTML转PDF,本质就是PHP是识别HTML,再转出来。

坑1:大部分HTML不支持,不支持css文件,不支持js等图表,只能写行内样式。
坑2:写出来的浏览器预览效果和导出来的PDF不一致,试着去调样式,再导出pdf看效果,一套开发下来,导几百个pdf,这种苦您能吃不?


今天,亮哥从万坑从中爬出来,为广大劳苦程序猿献上一份:终极解决HTML/CSS/JS网页转PDF(高质量)的终极解决方案,请官人怜惜。

1、准备工作:待转网页、服务器环境。

(1)、待转网页:把你要转出的网页样式,用html、css、js排版出来,不用去在乎兼容性,您能想到的效果都支持。如果您是在网站中弹窗页面预览,网页套在ifram中弹窗即可。
(2)、服务器环境:建议使用傻瓜式维护linux的宝塔,如果您是的linux命令高手也可以不用宝塔。


2、安装wkhtmltopdf:在服务器上安装wkhtmltopdf软件。

安装软件过程中可能会出现各种各样的linux提示报错,因为报错多种多样,我没办法给您一一列举,您根据linux的报错去自行爬文档处理,我这里只给一个我探明可行,可用的思路,你顺着思路走即可。

A、 打开服务器终端。

B、下载wkhtmltopdf复制运行命令:

wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm

C、安装wkhtmltopdf复制运行命令:

sudo yum localinstall -y wkhtmltox-0.12.5-1.centos7.x86_64.rpm

D、检测wkhtmltopdf是否安装成功,复制运行命令:

wkhtmltopdf -V

3、用PHP创建一个超出的API接口

function PDF()
    {
        $inputFile = 'https://baidu.com'; //您要转出的网页路径
        $outputFile = ROOT_PATH . 'public/uploads/pdf/xxxx.pdf'; //存放PDF的物理路径
        $url =  '/public/uploads/pdf/xxxx.pdf'; //定义相对路径
        $wkhtmltopdfBinary = '/usr/local/bin/wkhtmltopdf --margin-top 5mm --margin-bottom 5mm --margin-left 5mm --margin-right 5mm'; //wkhtmltopdf命令的路
        $command = $wkhtmltopdfBinary . ' ' . escapeshellarg($inputFile) . ' ' . escapeshellarg($outputFile); //构建命令
        exec($command, $output, $returnCode); //执行命令行

        //执行失败暴露错误,用于debug
        if ($returnCode !== 0) { 
            $obj['output']=$output;
            $obj['returnCode']=$returnCode;
            return $obj;
        };
        //执行成功,如果有数据库操作,请在下面写你的数据操作

    }
}

4、导出效果

写作最后:如果你在操作的过程中遇到问题,私信联系我即可。

相关推荐

手机最强Python编程神器,在手机上运行Python

手机编程软件有很多,大部分都很难使用,操作不灵活,甚至不能安装第三方库。...

centos7上安装python3

centos7上默认安装的是python2,要使用python3则需要自行下载源码编译安装。1.安装依赖...

python详细安装教程

本章开始,我们将详细介绍Python编程环境的搭建,工欲善其事必先利其器,所以我们这里先介绍python详细安装教程。由于Python是跨平台的,他可以运行在Windows、Linux、Mac等系统上...

再见!Python 3.6

到上月为止,Python3.6对我来说已经死掉了。...

手把手教你使用Python网络爬虫下载一本小说(附源码)

大家好,我是Python进阶者。前言前几天【磐奚鸟】大佬在群里分享了一个抓取小说的代码,感觉还是蛮不错的,这里分享给大家学习。...

Windows系统下载安装Python3.9(安装Python3.11同理)

本节我们将向大家介绍如何在Windows系统安装Python3.9开发环境,安装Python3.11下载Python3.11安装包即可,安装流程都是一样的下载安装Python3.9环境...

使用python3爬取网页,aria2下载最新电影,Jellyfin播放电影

前言:在我搭建好Jellyfin软件后,因为只能播放本地视频,就想能不能播放网络上的电影,可以每天自动下载并更新,这样就不用我手工下载好,再上传到NAS中播放。或许有更好的方法,那就是直接用电影播放源...

Python第一课:下载与安装

Python自学靠不靠谱?容易上手么?掌握周期长么?如果你真的有兴趣学习Python,那么可以告诉你,只要你兴趣还在,那么你的Python就会了一半,没错,Python就是如此简单,废话不多说,下面跟...

CentOS 7下安装Python 3.10的完整过程

1.安装相应的编译工具yum-ygroupinstall"Developmenttools"yum-yinstallzlib-develbzip2-develope...

Ubuntu 25.04发行版登场:Linux 6.14内核,带来多项技术革新

IT之家4月18日消息,科技媒体linuxiac昨日(4月17日)发布博文,报道称代号为PluckyPuffin的Ubuntu25.04发行版正式上线,搭载最新Linu...

解放双手!Python 自动化下载邮件附件,可自定义时间段

在日常工作中,我们经常需要从邮箱里下载特定日期范围内的邮件附件。想象一下,你需要收集过去几个月内客户发送的报价单、合同等附件,如果手动一个个去查找和下载,那得花费多少时间和精力呀!今天就给大家分享一个...

Python爬取下载m3u8加密视频,原来这么简单

1.前言爬取视频的时候发现,现在的视频都是经过加密(m3u8),不再是mp4或者avi链接直接在网页显示,都是经过加密形成ts文件分段进行播放。...

Python3 网络爬虫:漫画下载,动态加载、反爬虫这都不叫事

一、前言作者:JackCui经过上两篇文章的学习,Python爬虫三步走:发起请求、解析数据、保存数据,已经掌握,算入门爬虫了吗?不,还远远不够!只掌握这些,还只能算门外汉级别。今天,就来带大家继续...

win7装DeepseeK的方法

DeepSeek是一个基于Python的工具或库,因此能否在Windows7上运行取决于以下因素:---###1.**Python版本支持**-DeepSeek需要Python...

Linux环境中利用curl和wget命令下载文件的使用技巧

简介:Linux里常常用来下载文件的命令有curl命令和wget命令。wget命令一般是从特定的URL下载文件。wget有个优点,就是比较稳当,特别适合网络带宽窄或者网络不太稳定的情...