js将网页导出成pdf(js 打印指定div内容)2020-09-02

JavaScript019

js将网页导出成pdf(js 打印指定div内容)2020-09-02,第1张

<input type="button"  id="button" value="点击打印"/>

<div id="div_print">

<p>打印此处内容</p>

</div>

<script type="text/javascript">

function printdiv(printpage){

  var newstr=document.getElementById(printpage).innerHTML

  var oldstr=document.body.innerHTML

  document.body.innerHTML=newstr

  window.print()

  document.body.innerHTML=oldstr

  return false

}

window.onload=function(){

  var bt=document.getElementById("button")

  bt.onclick=function(){printdiv('div_print')}

}

</script>

html, body{

 overflow:visible  

}

打印时另存为pdf模式打印后的内容可复制 默认为Microsoft Print to PDF 模式

2、安装html2Canvas: npm install --save html2canvas

这里使用 iframe 嵌套需要转成pdf的html文件;

如果pdf内容是动态的,可以将html丢给后端,让后端使用freemarker ftl模板语言或是啥其他的模板语言更改即可,然后将整个html作为字符串传给前端,前端再使用iframe 的 srcdoc属性将内容渲染出来。

不存在分页内容裂开的情况,但对样式呈现不太友好,有时会出现内容偏移情况,时好时坏的,经过不断的尝试,发生偏移的时候,可以将html2Canvas的width写死,但是值具体是多少,需要你自己猜

分页会出现问题:比如图片裂开,表格的某一行从中间断开了等等....我用的笨方法手动去调整iframe的宽、高+html2Canvas的width、height+contentWidth、contentHeight,一点点试出来合适的值(应该有更好的方法,但是技术有限)

1. 生成多页pdf,分页内容裂开的问题

首先需要安装wkhtmltopdf这个软件 需要执行shell_exec函数的php文件和安装的wkhtmltopdf.exe可执行文件在同一目录下,不然php找不到这个执行文件

shell_exec("wkhtmltopdf.exe --page-size A4 --outline 网页地址pdf文件名")

--page-size 以A4纸的尺寸显示pdf内容

--outline 显示目录(网页中h1,h2来定)

网页地址 需要转成pdf的网页地址

pdf文件名 生成pdf的文件名,可以使用绝对路径