将HTML 转为pdf

将HTML 转为pdf


项目中有需求把 html页面显示转为pdf, 于是找了个例子,具有可行性的是这个
JS 如何将 HTML 页面导出为 PDF 该博主给了方法,使用了 html2canvas 和 jspdf 两个js 库来操作的,两个库的github地址分别是
1. https://github.com/niklasvh/html2canvas
2. https://github.com/MrRio/jsPDF

博主核心方法:

document.getElementById("btn-html2canvas").onclick = function(){

    html2canvas(document.getElementById("content"), {
        onrendered: function(canvas) {

            //通过html2canvas将html渲染成canvas,然后获取图片数据
            var imgData = canvas.toDataURL('image/jpeg');

            //初始化pdf,设置相应格式
            var doc = new jsPDF("p", "mm", "a4");

            //这里设置的是a4纸张尺寸
            doc.addImage(imgData, 'JPEG', 0, 0,210,297);

            //输出保存命名为content的pdf
            doc.save('content.pdf');
        }
    });

}

本人在实际中使用发现无法实现功能,继续翻了github 该项目文档,发现写法已经变了,原来是和博主使用的版本不一致导致的:
github上

  1. html2canvas 官方例子:
html2canvas(document.body).then(function(canvas) {
    document.body.appendChild(canvas);
});
  1. jspdf 官方例子:
//Then you're ready to start making your document:

// Default export is a4 paper, portrait, using milimeters for units
var doc = new jsPDF()

doc.text('Hello world!', 10, 10)
doc.save('a4.pdf')

//If you want to change the paper size, orientation, or units, you can do:

// Landscape export, 2×4 inches
var doc = new jsPDF({
  orientation: 'landscape',
  unit: 'in',
  format: [4, 2]
})

doc.text('Hello world!', 1, 1)
doc.save('two-by-four.pdf')

于是本人改进了方法如下:

html2canvas(document.getElementById("content")).then(function(canvas){
            var imgData = canvas.toDataURL('image/jpeg');
            //初始化pdf,设置相应格式
            var doc = new jsPDF("p", "mm", "a4");

            //这里设置的是a4纸张尺寸
            doc.addImage(imgData, 'JPEG', 0, 0,210,297);

            //输出保存命名为content的pdf
            doc.save('content.pdf');
        });

这里只改变了html2canvas 的方法就生效了。

### 将HTML文件转换为PDF的方法 #### 方法一:使用 `node-html-pdf` 库 通过安装并配置 `node-html-pdf` 可以方便地实现HTMLPDF的转换。此方法适用于Node.js环境下的应用开发。 ```javascript const fs = require('fs'); const pdf = require('html-pdf'); // 定义要转换成PDFHTML内容 let htmlContent = '<h1>Hello, world!</h1>'; // 创建PDF选项对象 var options = { format: 'Letter' }; // 调用create函数生成PDF pdf.create(htmlContent, options).toFile('./result.pdf', function(err, res) { if (err) return console.log(err); console.log(res); // 输出结果路径 }); ``` 该代码片段展示了如何利用简单的几行JavaScript语句完成从字符串形式的HTML至本地磁盘上存储的PDF文件之间的转变过程[^1]。 #### 方法二:采用 `PDF-Puppeteer` 工具 对于更复杂的场景或是追求更高性能的应用来说,可以考虑使用基于Puppeteer构建而成的 `PDF-Puppeteer` 。它不仅支持基本功能还提供了更多自定义参数设置的可能性。 ```javascript const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); // 加载远程网页或直接传入内联HTML作为页面源码 await page.setContent('<div style="color:red">Hello Red World</div>'); // 设置纸张大小和其他打印属性 await page.emulateMedia('screen'); await page.pdf({path: 'output.pdf', format: 'A4'}); await browser.close(); })(); ``` 这段脚本说明了怎样借助浏览器自动化技术来捕获渲染后的HTML视图,并将其保存为高质量的PDF文档[^3]。 #### 方法三:在线服务与API接口调用 除了上述两种依赖于服务器端编程的方式外,还有许多第三方服务商提供RESTful API供开发者快速集成进自己的产品里去。这些平台通常具备良好的用户体验界面以及详尽的帮助文档指导用户上传待处理的数据资源(如URL链接指向的目标网站),随后按照指定格式导出最终产物——即一份完整的PDF版本副本。 然而值得注意的是,在选择具体实施方案之前应当充分评估各方案的成本效益比及其适用范围等因素后再做决定;另外也要关注目标平台上是否存在任何潜在的安全隐患问题以免造成不必要的损失。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值