使用wkhtmltopdf实现HTML转PDF

news2024/9/25 21:20:04

wkhtmltopdf注意事项

1.webkit内核的,所以建议使用之前用谷歌浏览器开发好网页

2.目前这个插件不再更新,所以内核老旧,只支持ES5的代码,所以ES6及以上的代码统统不支持,还有字符串拼接的 `` 符号也不能使用,只能使用单双引号。如果使用了,转出的pdf就是一块白板。(不支持的方法,filter,forEach  ,for ... of  ,map,includes 等等)

3.同样css3以上的也不能用,比如display:flex  ;transition 等等,这个不会白板,但是样式会乱,建议用老版本css重新写

4.如果是内容数量不确定的情况下,还要保证不被pdf隔断图形或者照片(如下),这时候要做到溢出检测换行。这个我没想当办法,只能说是将已有的组件固定高度,然后通过循环迭代去渲染。并且初步计算,不算准确,大家可以确定更准确的值讨论一下,一页PDF = HTML 2050px,所以按照这个计算一页即可

	for(var i=0;i<reportData.sort.length;i++){
			var classItem = reportData[reportData.sort[i]];
	
			if(i==0){
				h=checkHeight(h,topH);
			}
			h=checkHeight(h,bigTitle,"title",reportData.sort[i]);
			for(var j=0;j<classItem.length;j++){
				if(classItem[j].name!="charts"){
					if(isArray(classItem[j])){
							h=checkHeight(h,titleGap);
							h=checkHeight(h,classItem[j].length * sTitle,'gapRows',classItem[j]);
					}else{
						h=checkHeight(h,sTitle,'row',classItem[j]);
					}
				}else{
					for(var k=0;k<classItem[j]['value'].length;k++){
						h=checkHeight(h,chartHight,'chart',classItem[j]['value'][k]);
					}
				}
				
			}
		}
		checkHeight(h,9999);
  }

	function checkHeight(h,addH,type,obj){//检测高度
		h+=addH;
		if(h>maxHeight){//下一页
			h=0;
			h+=addH;
			pdfData.push(page);
			page=[];
		}
		if(obj){
			page.push({type:type,value:obj})
		}
		return h;
	}	

以上是我的,业务代码,主要就是,分开一个一个模块进行计算,重新排列数据,在渲染的时候按照这个数据渲染,渲染代码采用HTML拼接等方式。具体不展示了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JMeter录制HTTPS脚本解决办法

目录 前言&#xff1a; 背景 解决方法 前言&#xff1a; 在使用JMeter录制HTTPS脚本时&#xff0c;可能会遇到一些问题&#xff0c;例如SSL证书错误或请求失败等。解决这些问题的一种常见的方法是通过安装并信任服务器的SSL证书来解决。 背景 在对某项目进行脚本录制的时…

银河麒麟服务器v10 sp1 部署 Net6.0 项目

上一篇已经部署了Net6.0环境&#xff0c;本节将实现Net6.0程序部署&#xff0c;打开或新建项目&#xff0c;修改appsettings.json配置&#xff1a; 添加&#xff1a;"urls": "http://*:8061",//linux部署使用&#xff0c;端口可根据需求修改为自己的 在项…

快速幂与64位整数乘法(位运算)

矩阵快速幂和64位整数乘法 矩阵快速幂64位整数乘法 矩阵快速幂 问题链接&#xff1a; AcWing 90. 64位整数乘法 问题描述&#xff1a; 分析 快速幂需要用到位运算的思想&#xff0c;求 a b a^b ab&#xff0c;我们将 b b b转换成二进制的形式&#xff0c;假设 b 7 b7 b7&…

GB50254-2014电气装置安装工程低压电器施工及验收规范

为保证低压电器的安装质量,促进施工安装技术进步&#xff0c;确保设备安装后的安全运行,制定本规范。 本规范适用于交流 50Hz或60Hz额定电压为 1000V 及以下&#xff0c;直流额定电压为 1500V 及以下通用低压电器的安装与验收。不适用于: 1、无需固定安装的家用电器、电工仪器…

数据结构第一章 绪论——走进数据的世界

名人说&#xff1a;唯一可以确定的是&#xff0c;明天会使我们所有人大吃一惊。——阿尔文托夫勒 本篇笔记整理&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; ✔ 课件资料及视频课程学习&#xff1a;王道 数据结构&#xff08…

哪家好用?四款国内外远程桌面软件横测:ToDesk、向日葵、TeamViewer、AnyDesk

一、前言 远程桌面软件对于职场人来说并不陌生&#xff0c;可以说是必备的办公软件之一。在经历过新冠疫情后&#xff0c;大家对于远程办公的认识越来越深入&#xff0c;也就在这段期间&#xff0c;远程桌面软件大范围的应用起来&#xff0c;真正走进大众视野并融入我们的工作和…

探索RabbitMQ的特色功能:释放RabbitMQ尖端特性的潜力

d1、简介 RabbitMQ 是一个功能强大的开源消息中间件&#xff0c;采用 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;协议来实现可靠的消息传递。它提供了可靠性、灵活性和可扩展性&#xff0c;被广泛应用于分布式系统、微服务架构和异步通信等场景。本文将介…

前台-GoEasy即时通讯

1.先去GoEasy官网下载源码 第一步 App.vue <script setup lang"ts">import { watch, ref, markRaw, reactive, nextTick, provide, InjectionKey } from vueimport headerIndex from /Layout/header/headerIndex.vueimport purchaseHeaderBig from /Layout/hea…

OpenCV(Mat类)

目录 1、什么是Mat类 2、Mat类组成 3、Mat类能存储的数据类型 4.Mat类的创建 4.1 利用矩阵宽、高和类型参数创建 4.2 利用矩阵Size()结构和数据类型参数来创建 4.3 利用已有Mat类来创建 5、Mat类的赋值 5.1 创建时赋值 5.2 类方法赋值 5.3 枚举赋值 6、Mat类数据的读取 …

【Linux】Redis 集群部署

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Redis 集群部署 Redis 主从复制主从复制的作用主从复制的流程搭建Redis 主从复制安装 Redis修改 Redis 配置文件&#xff08;Master节点操作&#xff09;修改 Redis 配置文件…

基于redhat发行版mysql8.0的卸载与重装mysql5.7

文章目录 一、软件的选择与下载二、卸载mysql8.01.查看my.cnf中的部署信息2.卸载mysql8.03.卸载完毕安装包后删除相关数据 三、mysql5.7的安装1.解压安装包2.初始化mysql数据库3.修改root密码 四、安装mysql5.7客户端附&#xff1a;创建数据库以及用户 本次案例是卸载mysql8.0然…

Michael.W基于Foundry精读Openzeppelin第1期——Address.sol

Michael.W基于Foundry精读Openzeppelin第1期——Address.sol 0. 版本0.1 Address.sol 1. 目标合约2. 代码精读2.1 isContract(address)2.2 sendValue(address, uint256)2.3 functionCall(address, bytes memory) && functionCall( address, bytes memory, string memor…

JavaSE基础(上)

目录 第一章 java入门 环境配置 常用cmd命令 打开cmd 安装JDK&#xff1a;Java工具包 IDEA 1 IDEA概述&#xff08;1&#xff09;IDEA概述&#xff1a;IDEA全称IntelliJ IDEA&#xff0c;是用于Java语言开发的集成环境&#xff0c;是业界公认的目前用于Java程序开发最…

ABeam News | 乘云而上,扬帆起航——ABeam Consulting 2023 RISE+BTP私享会圆满落幕

当今中国&#xff0c;数字经济大潮风起云涌&#xff0c;数字化转型已经成为企业发展的“必修课”。对于企业来说&#xff0c;如何在数字化浪潮中奋楫扬帆&#xff0c;借助技术和管理手段助力企业“提质、降本、增效”&#xff0c;成为发展中所亟待解决的问题。 6月1日&#xf…

LED显示屏四大连接方式

LED显示屏的四大连接方式是数据连接、电源连接、信号输入连接和控制系统连接。以下是对每种连接方式的详细说明&#xff1a; 1,数据连接&#xff1a; 数据连接用于传输显示内容的数据信号到LED显示屏。常见的数据连接方式包括&#xff1a; 串行连接&#xff08;Serial Connecti…

离开Kubernetes也能玩转Dapr

Dapr 被设计成一个面向开发者的企业级微服务编程平台&#xff0c;它独立于具体的技术平台&#xff0c;可以运行在“任何地方”。Dapr本身并不提供“基础设施&#xff08;infrastructure&#xff09;”&#xff0c;而是利用自身的扩展来适配具体的部署环境。就目前的状态来说&am…

nacos身份认证绕过漏洞

1.影响范围 Nacos < 2.0.0-ALPHA.1 2.验证漏洞是否存在 http://example/nacos/v1/auth/users/?pageNo1&pageSize5 如果列出了用户名密码,即证明此漏洞存在 3.向系统中添加一个新的用户 http://example/nacos/v1/auth/users/?usernamesectest&passwordsectest…

目录爆破工具(dirb、dirsearch)

一、dirb概述。 dirb是一个基于字典的web目录扫描工具&#xff0c;采用递归的方式来获取更多的目录&#xff0c;可以查找到已知的和隐藏的目录&#xff0c;它还支持代理和http认证限制访问的网站。 二、dirb常用参数。 三、基础操作。 1.直接扫描 dirb http://192.168.84.1…

Python财经股票数据获取, 保存表格文件

目录标题 前言环境使用:模块使用]:代码展示尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: Python 3.8 解释器 Pycharm 编辑器 模块使用]: import requests —> 数据请求模块 pip install requests import csv 第三方模块安装: win R 输入cmd 输…

SpringBoot 3.1 新版HTTP调用

在SpringBoot3版本发布后 官方便声明了推荐使用了内置声明式的HTTP客户端。 一、声明式HTTP客户端使用(依赖引入) <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></depende…