js实现html页面转为pdf下载

 这个资料是普通html的(比较原生老旧,此博客写于2018年),如果你用Vue.js开发的话,推荐用vue下载pdf,网上已经有很多关于vue下载pdf的资料了。

1、简单描述

最近做了一个项目,我也是刚学js才几个多月,对js不是很懂,但是我相信,只要肯学,总会进步的。项目里面要实现把网页的试题下载成pdf,所以我有个同事就实现了这个功能,然后我参考着他写的代码就总结了一下。网页渲染的过程中因服务器性能和图片的数量而定,图片太多的话渲染就比较慢了。

2、需要的js

(1)html2canvas.js

(2)jspdf.debug.js

(3)renderPDF.js(这个是一个博主写的:http://blog.csdn.net/pwc1996/article/details/70141383)

(4)paper_download.js(这个是我同事封装的,并且支持图片跨域获取)

3、demo的代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>生成pdf下载</title>
		<style type="text/css">
			.handle{
				margin: 0 auto;
				width: 500px;
				text-align: center;
				margin-bottom: 20px;
			}
			.download{
				cursor: pointer;
				padding: 4px 30px;
				border: 1px solid #008CCA;
				background: #01B9FF;
				color: #FFF;
				border-radius: 8px;
			}
			.download:active{
				background: #008CCA;
			}
			.page{
				margin: 0 auto;
				width: 1000px;
				border: solid 1px #000000;
			}
			.title{
				margin: 0 auto;
				width: 500px;
				text-align: center;
			}
			.content{
				margin: 0 auto;
				width: 800px;
				text-align: left;
			}
			.content img{
				max-width: 800px;
			}
		</style>
	</head>
	<body>
		<!--参考 http://blog.csdn.net/pwc1996/article/details/70141383-->
		<div class="handle"><span id="download-paper" class="download">下载为pdf</span></div>
		<div class="page">
			<div class="title"><h4>我的pdf下载测试(支持图片跨域)</h4></div>
			<div class="content">
				<p>
					语言优美:所谓优美,就是指散文的语言清新明丽(也美丽),生动活泼,富于音乐感,行文如涓涓流水,叮咚有声,如娓娓而谈,情真意切。所谓凝练,是说散文的语言简洁质朴,自然流畅,寥寥数语就可以描绘出生动的形象,勾勒出动人的场景,显示出深远的意境。散文力求写景如在眼前,写情沁人心脾。
					<img src="http://subangmedia.oss-cn-qingdao.aliyuncs.com/pdf/1.jpg" />
				</p>
				<p>
					形散神聚:”形散“既指题材广泛、写法多样,又指结构自由、不拘一格;“神聚”既指中心集中,又指有贯穿全文的线索。散文写人写事都只是表面现象,从根本上说写的是情感体验。情感体验就是“不散的神”,而人与事则是“散”的可有可无、可多可少的“形”。
					<img src="http://subangmedia.oss-cn-qingdao.aliyuncs.com/pdf/2.jpg" />
				</p>
				<p>
					散文素有“美文”之称,它除了有精神的见解、优美的意境外,还有清新隽永、质朴无华的文采。经常读一些好的散文,不仅可以丰富知识、开阔眼界,培养高尚的思想情操,还可以从中学习选材立意、谋篇布局和遣词造句的技巧,提高自己的语言表达能力。
					<img src="http://subangmedia.oss-cn-qingdao.aliyuncs.com/pdf/3.jpg" />
				</p>
				<p>
					至于“形”的含义,《乐记》里有“在天成象,在地成形”的话。钱钟书先生释为“‘形’者,完成之定状”。钱先生还引述亚里士多德论“自然”有五层含义。其四,是“相形之下,尚未成形之原料”,也就是“有质而无形”的状态;其五,是“止境宿归之形”。这种由“原质”,“原料”而“成形”的说法用之于文章写作,也如钱先生所阐述的,“春来花鸟,具‘形’之天然物色也,而性癖耽吟者反目为‘诗料’”。指明做为“诗料”的“形”,即包括着“题材”的内。“吟安佳句,具‘形’之词章也”。指明做为诗文的“形”即指“词章”,包括语言、结构等。我在上文所论“形”的概念,也具有同这里所引说法的一致性。
					<img src="http://subangmedia.oss-cn-qingdao.aliyuncs.com/pdf/4.jpg" />
				</p>
			</div>
		</div>
		
		<script src="../tools/jquery-1.12.4.js" type="text/javascript" charset="utf-8"></script>
		<script src="../tools/pdf_download/html2canvas.js" type="text/javascript" charset="utf-8"></script>
		<script src="../tools/pdf_download/jspdf.debug.js" type="text/javascript" charset="utf-8"></script>
		<script src="../tools/pdf_download/renderPDF.js" type="text/javascript" charset="utf-8"></script>
		<script src="../tools/pdf_download/paper_download.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			var imgArray = $('.page')[0].getElementsByTagName('img');
			var down = new downLoad(imgArray);
			down.init(document.getElementById('download-paper'),$('.page')[0],'pdf文件名称','a4');
		</script>
	</body>
</html>

4、demo在线查看地址

https://www.sqbang.cc/demo/html2pdf/index.html

阿里的学生机过期了,文章尾部可以下载

下载方式:在demo地址里按F12,切换到开发者工具的“source”选项卡,找到js这个目录,然后右键选择“sava as..”即可下载对应的js

5、参考

http://blog.csdn.net/pwc1996/article/details/70141383

6、demo资源下载

https://download.csdn.net/download/SQ_Bang/12705581

严重怀疑系统自动设置下载所需C币(广告一大堆,还莫名其妙设置了东西),明白编辑过设置为0个C币的,过一段时间回来看又变成所需50个C币

链接: https://pan.baidu.com/s/1rO0I8uKxtMbjOea1Vs7QWQ 提取码: cwrg

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
### 回答1: 在 JavaScript 中,可以使用以下两种方法将 HTML 页面换为 PDF 文件: 1. 使用第三方库,如 jsPDFhtml2canvas。 2. 使用浏览器的内置功能,如 window.print() 方法,可以将 HTML 页面换为 PDF 文件。 下面是使用 jsPDF 的例子: ``` // 引入 jsPDF 库 import jsPDF from 'jspdf'; // 创建一个新的 jsPDF 实例 const pdf = new jsPDF(); // 设置文档的页面大小为 A4 纸张 pdf.setProperties({ title: 'HTML to PDF', subject: 'Generated PDF file using jsPDF library', author: 'Your Name', keywords: 'html, pdf, javascript', creator: 'Your Name' }); // 使用 html2canvas 库将 HTML 页面换为 canvas 元素 html2canvas(document.querySelector('#html-to-pdf')).then(canvas => { // 将 canvas 元素换为图像数据 const imgData = canvas.toDataURL('image/png'); // 将图像数据添加到 PDF 文档中 pdf.addImage(imgData, 'PNG', 0, 0); // 下载 PDF 文件 pdf.save('html-to-pdf.pdf'); }); ``` 使用 window.print() 方法的例子: ``` // 在点击按钮时触发打印功能 document.querySelector('#btn-print').addEventListener('click', () => { window.print(); }); ``` 在浏览器中,你可以使用快捷键 Ctrl + P 或在浏览器菜单中点击“打印”来打开浏览器的打印对话框,然后选择“保存为 PDF”即可将当前页面保存为 PDF 文件。 ### 回答2: 要将HTML页面换为PDF,可以使用JavaScript和一些库或工具来完成。以下是一个基本的步骤: 1. 获取HTML页面的内容:使用JavaScript的内置方法(如 `querySelector`)或库(如jQuery)来获取HTML页面的内容。 2. 创建一个PDF文档:使用JavaScript中的一个PDF库,如pdfmake或jsPDF,来创建一个空的PDF文档。 3. 将HTML内容换为PDF格式:使用HTMLPDF换库,如html2pdf.jshtml-pdf,将获取到的HTML内容换为PDF格式,并将其添加到PDF文档中。 4. 添加其他内容(可选):如果需要,可以使用PDF库提供的方法来添加其他内容,例如页眉、页脚、水印等。 5. 下载或保存PDF文档:最后,将生成的PDF文档提供给用户下载或保存。可以使用JavaScript内置的方法(如 `a` 标签的 `download` 属性)或库(如FileSaver.js)来实现下载功能。 需要注意的是,因为换过程可能涉及到加载和渲染HTML内容,所以可能需要处理一些异步操作和事件处理程序来确保正确的换结果。 总结起来,使用JavaScript、PDF库和HTMLPDF换库,我们可以实现HTML页面换为PDF的功能。具体实现方法可以根据所选的库和工具来调整,并根据具体需求进行扩展和定制。 ### 回答3: 将HTML页面换为PDF是一种常见的需求,可以通过JavaScript来实现。下面是一种实现方法: 1. 首先,使用JavaScript中的HTML5 `canvas` 元素创建一个空白的画布。一个画布是一个可以用于进行绘制和呈现图像的容器。 2. 然后,使用 `html2canvas` 库将HTML页面的内容绘制到画布上。该库可以将整个HTML页面或指定的元素换为图像并渲染在画布上。 3. 接下来,使用 `jsPDF` 库创建一个PDF文档对象。该库提供了一系列API,可以用于创建和编辑PDF文档。 4. 使用 `canvas.toDataURL()` 方法将画布上的图像换为数据URL。数据URL是一种表示图像的字符串,可以嵌入到PDF文档中。 5. 使用 `jsPDF.addImage()` 方法将数据URL插入PDF文档。该方法在指定的位置和大小绘制图像。 6. 最后,使用 `jsPDF.save()` 方法将PDF文档保存到本地。 通过以上步骤,可以使用JavaScript将HTML页面换为PDF。这个方法广泛应用于需要在Web应用程序中生成PDF报告或保存网页内容的场景中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值