在当今数字化时代,PDF文件因其跨平台兼容性和固定格式的特性,成为了文档分享和打印的首选格式。然而,对于Web开发者来说,将HTML内容转换为PDF文件并非易事,尤其是当需要在客户端直接生成PDF时。无论是生成报告、发票,还是将网页内容保存为PDF,开发者们常常面临诸多挑战,如CSS样式丢失、文本不可选、内容对齐不准确等问题。
本文将深入探讨如何使用JavaScript将HTML内容转换为PDF文件,并介绍两种主流库——html2pdf和jsPDF的使用方法。
文章目录
html2pdf.js
是一个流行的JavaScript库,它可以将任何网页或元素转换为PDF文件。它基于html2canvas
和jsPDF
,完全在客户端运行。let element = document.getElementById('div-to-print');
html2pdf().from(element).save();
0.9.3
版本可以解决这个问题。<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.9.3/html2pdf.bundle.min.js"></script>
html2pdf
会下载PDF文件。如果希望在新标签页中打开PDF,可以使用Blob
和URL.createObjectURL
。async function printHTML() {
let worker = await html2pdf().from(element).toPdf().output('blob').then((data) => {
let fileURL = URL.createObjectURL(data);
window.open(fileURL);
});
}
html2pdf
不支持外部CSS文件。为了解决这个问题,可以使用内联CSS或<style>
标签。<div id="div-to-print" style="color: red;">
<p>This is a sample text.</p>
</div>
html2pdf
将HTML转换为Canvas图像,因此生成的PDF文本不可选。如果需要可选的文本,可以考虑使用jsPDF
。jsPDF
是另一个常用的JavaScript库,它可以直接生成PDF文件,并且支持文本可选。let doc = new jsPDF();
doc.fromHTML(document.getElementById("div-to-print"), 22, 17, {'width': 400}, function (a) {
let blobPDF = new Blob([doc.output()], { type: 'application/pdf' });
let blobUrl = URL.createObjectURL(blobPDF);
window.open(blobUrl);
});
jsPDF
原生不支持CSS。如果需要使用CSS,可以结合html2canvas
来实现。jsPDF
提供了text
API,可以通过计算布局来实现内容的居中对齐。let pageHeight = doc.internal.pageSize.height || doc.internal.pageSize.getHeight();
let pageWidth = doc.internal.pageSize.width || doc.internal.pageSize.getWidth();
let recipientBlock = document.querySelector(".div2-block");
let rHeight = recipientBlock.clientHeight;
let rWidth = recipientBlock.clientWidth;
doc.fromHTML(document.querySelector(".div1-block"), 22, 17, { 'width': 200, 'height': 200 }, function (a) {
doc.fromHTML(document.querySelector(".div2-block"), pageWidth / 2 - rWidth / 4, pageHeight / 2 - rHeight / 4, { 'width': 200, 'height': 200 }, function (a) {
let blobPDF = new Blob([doc.output()], { type: 'application/pdf' });
let blobUrl = URL.createObjectURL(blobPDF);
window.open(blobUrl);
});
});
jsPDF
允许设置PDF的宽度和高度。建议使用pt
作为单位,因为px
可能会导致问题。let doc = new jsPDF({orientation: 'l', unit: 'pt', format: [widthForJsPDF, heightForJsPDF]});
html2pdf
和jsPDF
,我们可以轻松地将HTML内容转换为PDF文件。尽管这两个库在处理CSS和文本可选性方面存在一些限制,但通过适当的调整和配置,我们仍然可以实现复杂的需求。希望本文能帮助你在项目中成功实现HTML到PDF的转换。Clash for Windows 现在会偷跑流量?v2ray vpn for pc综合指南VPN翻墙App: 功能、安装和使用教程深入了解节点池:概念、作用、优势与选择指南tennis clash游戏总是断网:常见问题与解决方法green vpn 下载使用指南如何卸载ClashX: 完整教程及常见问题解答v2rayng连不上网问题排查与解决教程shadowsocks免费节点使用指南什么是IPsec?它适用的场景有哪些?Shadowsocks 4.0 10全面指南Opera VPN如何使用V2ray连接后无法上外网:解决方法与常见问题FAQClash Mixin配置指南跳板机和堡垒机的区别机场测速观察---忍者云网站文章使用代码生成本文目录V2RayNG 新手教程指南︱安卓翻墙插件白月光机场发布旧不限时流量包套餐调整通知高速稳定老牌trojan机场推荐:红莓网络机场怎么样?