实现pdf导出(前端)

关于这excel的pdf导出一问题,正常情况下都会伴随一个点击事件的按钮,为什么?因为你不去点他,让他自己导出吗,用户体验感能好?本内存就小,这倒好,打开一次自动下载并生成一个pdf,就连刷新也是,想想,都有点难以接受。所以自己好,用户好,才是真的好。所以我们excel表实现pdf导出必然和前端有所联系,那前端写什么?刚不是说了吗?不会有人忘了吧。。。当然作者比较宠读者,所以这里再说一次,前端,写按妞哇!!!   说到按钮了,有人直接想到button了吗,但是今天可不用它哦,直接上代码:

<div id='exclepdf'  class="buttoncss"  onclick="tableToPdf()">
	<img src="...."><span>导出</span>
</div>

  css又怎么写呢?它来了

.buttoncss{
	height:35px;
	width:100px;
	text-align:center;
	margin:10px 0px 0px 15px;
	border:1px solid;
	float:right;
	margin-bottom:15px;
}
#excelpdf:hover {
	cursor:pointer;
}
.buttoncss img{
	width:25px;
	padding-top:5px;
	display:inline-block;
}
.buttoncss span{
	display:inline-block;
	padding-left:5px;
	vertical-align:super;
}

 到了这里呢,body的内容就差不多可以了,那这实现了就能导出pdf了吗?不能吧,就好像饭在哪,你不去吃,能不中国人不骗中国人说一句我吃饱了吗?所以这时候我们是不是还缺个过程 ,是不是有了这个过程就可以说吃饱了呢,这是不可以的哦,我们可是高智慧的结晶,要懂得吃饭需用筷子、勺子等等,不然怎么绅士一般的吃饱呢

现在就让我们请出我们的吃饭工具人js文件 :

<script src="jquery-3.4.1.js"><script>
<script src="jspdf.debug.js"><script>
<script src="html2canvas.min.js"><script>

.接下来就到了不能丢掉的过程了,没了这个,有再好的吃饭工作,你没那过程,又怎会吃饱呢?         

function tableToPdf(){
	html2canvas(
	//这个是后期想要导入的DOM元素的id
		document.getElementById("")	
		{
			dpi:300, //导出pdf清晰度
			onrendered:function(canvas){
				var contentWidth = canvas.width;
				var contentHeight = canvas.height;
				//一页pdf显示html页面生成的canvas高度
				var pageHeight = contentWidth / 592.28 * 841.89;
				//为生成pdf的html页面高度
				var leftHeight = contentHeight;
				//pdf页面偏移
				var position = 0;
				//html页面生成的canvas在pdf中图片的宽高(a4纸的尺寸[595.28,841.89])
				var imgWidth = 595.28;
				var imgHeight = 592.28 / contentWidth * contentHeight;
				var pageDate = canvas.toDataURL('imge/jpeg',1.0);
				var pdf = new jsPDF('','pt','a4');
				//有两个高度需要区分,一个是html页面的实际高度,和生成pdff的页面高度(841.89)
				//当内容未超过pdf一页显示的范围,无需分页
				if(leftHeight < pageHeight){
					pdf.addImage(pageData , 'JPEG' , 0 , 0 , imgWidth , imgHeight);
				}else{
					while(leftHeight > 0){
						pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
						leftHeight -=pageHeight;
						position -= 841.89;
						//避免添加空白页
						if(leftHeight > 0){
							pdf.addPage();
						}
					}
				}
				//设置下载pdf后显示的name名
				pad.save(item.JJInspectionRrecordList[0].WaterIntakeName + item.JJInspectionRrecordList[0].Datetime.substring(0,10).replace(/-/g,'/') + '.pdf');
			},
			//默认是黑色,这里背景设置为白色
			background:'#fff'
		})
}

到这里,一个差不多按钮外加实现点击按钮打印pdf就成功啦,麻烦老爷们觉得可以就点点赞吧!!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现前端layui后端Java实现PDF导出,可以使用以下步骤: 1. 前端使用layui中的表格组件展示需要导出的数据。 2. 前端通过Ajax请求将数据发送到后端,后端使用Java处理数据。 3. 后端使用Java PDF库(如iText)生成PDF文件。 4. 后端将生成的PDF文件发送到前端前端通过浏览器下载即可。 以下是大致的代码实现前端代码: ```html <table id="tableData" lay-filter="tableData"></table> <button id="exportBtn" class="layui-btn layui-btn-normal">导出PDF</button> <script> // 初始化表格 layui.use('table', function(){ var table = layui.table; table.render({ elem: '#tableData', url: 'data.json', // 数据接口 cols: [[ {field: 'id', title: 'ID'}, {field: 'name', title: '名称'}, {field: 'price', title: '价格'} ]] }); // 导出按钮点击事件 $('#exportBtn').click(function() { // 获取表格数据 var data = table.cache.tableData; // 发送数据到后端 $.ajax({ type: 'POST', url: '/export/pdf', data: JSON.stringify(data), contentType: 'application/json', success: function(res) { // 下载PDF文件 window.location.href = res.url; } }); }); }); </script> ``` 后端代码: ```java @PostMapping("/export/pdf") public ResponseEntity<Resource> exportPdf(@RequestBody List<Map<String, Object>> data) throws Exception { // 生成PDF文件 ByteArrayOutputStream baos = new ByteArrayOutputStream(); PdfDocument pdf = new PdfDocument(new PdfWriter(baos)); Document document = new Document(pdf); Table table = new Table(3); table.addCell(new Cell().add(new Paragraph("ID"))); table.addCell(new Cell().add(new Paragraph("名称"))); table.addCell(new Cell().add(new Paragraph("价格"))); for (Map<String, Object> row : data) { table.addCell(new Cell().add(new Paragraph(row.get("id").toString()))); table.addCell(new Cell().add(new Paragraph(row.get("name").toString()))); table.addCell(new Cell().add(new Paragraph(row.get("price").toString()))); } document.add(table); document.close(); // 构建响应体 ByteArrayResource resource = new ByteArrayResource(baos.toByteArray()); HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=data.pdf"); headers.add(HttpHeaders.CONTENT_TYPE, "application/pdf"); return ResponseEntity.ok() .headers(headers) .contentLength(resource.contentLength()) .body(resource); } ``` 注意事项: 1. 要使用iText库,需要在项目中添加对应的依赖,可以在Maven中添加以下依赖: ```xml <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext7-core</artifactId> <version>7.1.15</version> </dependency> ``` 2. 前端需要使用jQuery库和layui框架,需要在HTML文件中添加对应的依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许豪平安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值