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

boyanx22小时前技术教程3

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

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、导出效果

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

标签: html转canvas

相关文章

Web设计练习:制作人脸识别网页(基于TensorFlow的开源模型)

宇哥闲着没事做了一个人脸识别网页,练练手。(懒人看过来:完整代码贴在最后,想要的拿走直接用不必客气,反正都是开源的) 这个人脸识别模型的语言是JavaScript,从网上找的开源模型,基于Tensor...

前端【Canvas】基础教程示例集锦(前端开发canvas)

Canvas是HTML5中新增的元素,它是一个可以使用JavaScript绘制图像的区域。Canvas可以用来绘制简单的图形、动画、游戏、数据可视化等等。它是一个非常强大的工具,可以让我们在网页中展示...

使用canvas实现简单的贪吃蛇游戏,html+css+js

一.话不多,先瞅效果:又在别的地方嫖到了这个效果研究了亿下下,制作过程如下(超详细):二.实现过程(源码在最后):1.定义canvas标签: <canvas id="canvas"...

使用 HTML 和 CSS 绘制卡哇伊鲨鱼和海洋生物

这个过程是这样进行的(或多或少):首先,我创建了一个用作画布的容器(绘画画布而不是 HTML <canvas>),并通过添加适用于该容器内所有元素的样式来设置舞台。然后我为身体添加了一个椭...

OpenAI技术直播第四弹!推出ChatGPT内置工具Canvas,有三大核心功能

每经编辑:毕陆名昨天的Sora掀起热潮,今天OpenAI又给我们带来了升级版Canvas。Canvas正式向所有用户开放,并与OpenAI的主要模型深度集成。Canvas内置在ChatGPT中,打开C...

Canvas怎样修改线条的宽度、颜色和形状?

在Canvas中,线的默认颜色为黑色,宽度为lpx,但我们可以使用相关属性为线添加不同的样式。下面我们将从宽度、描边颜色、端点形状3方面详细讲解线条样式的设置方法。1.设置线条宽度使用lineWidt...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。