开篇

最近使用 Phantomjs 生成PDF,其中遇到一些问题,导致PDF生成失败,如出现空白文件或一页数据量太大,都是由于没有设置好格式导致。特别是分页问题,感觉资料很少,除了在 StackOverflow 上看到些许资料外,中文社区基本看不到,附上修改后的 rasterize.js 来做讲解:

var page = require('webpage').create(),system = require('system'),address, output, size;if (system.args.length < 3 || system.args.length > 5) {console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]');console.log('  paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"');phantom.exit(1);
} else {address = system.args[1];output = system.args[2];/*size of browser*/page.viewportSize = { width: 600, height: 600 };/*if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") {size = system.args[3].split('*');page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }: { format: 'A4', orientation: 'portrait', margin: '1cm' };}*//* ie and chrome view diffrent format of pdf */page.settings.userAgent = 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36';page.paperSize = { format: 'A4', orientation: 'portrait', margin: '0.8cm' };page.zoomFactor = 1;page.settings.loadImages = true;//some question about the page languagepage.open(address, function (status) {if (status !== 'success') {console.log('Unable to load the address!');} else {//page.render(output);//phantom.exit();window.setTimeout(function () {page.render(output);phantom.exit();}, 200); //setting the time is enough to loading the page. document.ready}});
}

PDF 格式设置

关于其中 page 的设置属性,这里可以了解,更深入可以了解 WebPage Module。

我们需要的设置,基本上就是页面格式、缩放、加载图片等,但有些例外,下面一一讲解。

page.paperSize = { format: 'A4', orientation: 'portrait', margin: '0.8cm' };

注释掉了官方例子的设置代码,因为传入的参数只有3个,到 .pdf 为止,如果写成通用模式,当然可以作为外部参数传入。

format :A4 纸,可以设置 "5in*7.5in", "10cm*20cm",  "Letter" 等

orientation :纸方向是竖着的,或者 landscape

margin :与纸四边间距,可自定义,也可详细设置 margin : { left: '0.8cm',  top : '0.8cm',  right : '0.8cm',  bottom : '0.8cm' }

page.zoomFactor = 1;
page.settings.loadImages = true;

zoomFactor :页面缩放比例

loadImages :页面加载图片

page.settings.userAgent = 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36';

这个设置比较不常见,一般的示例中都没有提及,因为发现用 chrome 和 IE 打开生成的 pdf 时格式有点不一样(表现在分页方面),由于偏向 Chrome 浏览格式,故设置此值,解决这个不一致问题。

page.open 里面的 setTimeout 方法作用:等待页面执行完 js ,再生成 pdf。当然对于 js 要执行多久(要等多久),这个就不知道怎么预算了。其实我有试过 ajax 方式加载内容,但因此问题而作罢了。

更多的信息,关于页眉和页脚及页码标注问题,可以参考这里。

PDF 分页

分页来说,更好控制,不需要代码(js)设置,页面使用样式即可:

style = "page-break-after: always;"

更多选择 style=“page-break-before: always;” , style="page-break-inside: avoid;" 这个可以避免内容散到两页中控制每页内容的大小,使用 <div style="page-break-after: always;">content</div> 就行。

总结

关于这个 phantomjs pdf render 就到此了,如有更多好的方式及问题解决方案,欢迎大家分享。

Phantomjs 生成多页PDF相关推荐

  1. python 原理 pdf_利用Python处理PDF——裁剪和生成新的PDF

    安装 在cmd中输入这一句: pip install -U pdfminer3k -i https://pypi.tuna.tsinghua.edu.cn/simple --user 注意:这里安装的 ...

  2. 万彩办公大师多页PDF文档去掉空白部分合并到同一页

    前置条件:下载万彩办公大师. 方法如下: 1.先使用"PDF页面分割"工具将PDF的每一个页面的空白部分通过分割线选中分割出来,保存为"文档1".(分割之后空白 ...

  3. #今日论文推荐# 莫纳什大学最新《长文档摘要》综述,39页pdf长文档摘要的实证研究:数据集、模型和指标

    #今日论文推荐# 莫纳什大学最新<长文档摘要>综述,39页pdf长文档摘要的实证研究:数据集.模型和指标 像学术文章和商业报告这样的长文档已经成为了详述需要额外关注的重要问题和复杂主题的标 ...

  4. ppt转为6页pdf讲义

    在PPT文件另存为PDF文件的设置窗口中,可以设置一页PDF显示六张幻灯片,具体操作请参照以下步骤. 1.首先在电脑上打开一个PPT文件,然后编辑好幻灯片. 2.然后在PPT"office按 ...

  5. 基于freemarker ,xdocreport生成word,pdf

    解决freemarkder 处理 docx 后生成的是xml问题 xdocreport docx 转pdf title: 基于freemarker ,xdocreport生成word,pdf cate ...

  6. Java后台phantomjs导出复杂图表PDF

    当前导出PDF工具 java后端如何导出像前端用echarts那么漂亮而且还有带有图表的PDF呢,或者图片.目前后端导出word或者excel都是有县城的jar,导出简单的图表也有的简单的jfreec ...

  7. HTML下载生成WORD 和PDF,及导出图片不能正常显示解决方案

    下载地址:JS插件下载 <!DOCTYPE html><html class="pdfhtml" id="pdfhtml"><he ...

  8. 【云速建站】一键生成手机页

    [摘要]在开始前,需要说明一点,PC站和手机站的编辑是分离的,即PC站的页面编辑后,不会自动同步到手机站,如果手机站也需要PC站相同的编辑效果,是需要给手机站进行同样的编辑设置才可以的.本文是以未购买 ...

  9. pdfbox将多页pdf转成多张长图片

    (pdfbox将pdf转成图片(jpg或者png) 首先需要说明的几点事情 功能由来 引入jar包 下面贴上代码 关于产生2种报错信息的说明 写在最后 首先需要说明的几点事情 本文是基于pdfbox2 ...

  10. vue导出单页pdf

    vue项目导出单页pdf 提示:在vue项目中使用html2canvas+jspf导出单页(连续页不分页)pdf 安装插件 npm install --save html2canvas npm i j ...

最新文章

  1. 查找SQL SERVER 2005 IO过高的数据库
  2. php动态验证码脚本,这个PHP脚本有什么问题吗? (验证码)
  3. UVa10526 - Intellectual Property(后缀数组的应用)
  4. java-jpa-criteriaBuilder使用入门
  5. 请律师到底有什么用?
  6. Redis--缓存设计与性能优化
  7. 可扩展多线程异步Socket服务器框架EMTASS 2.0 续
  8. 你确定你真的懂Nginx与PHP的交互?
  9. 搞深度学习框架的那帮人,不是疯子,就是骗子
  10. echarts 饼图 将数据显示在图例的旁边
  11. vue组件库,插件大全
  12. 三、电容屏原理(2)
  13. winserver2012设置开机自启动
  14. 如何快速填充表格公式
  15. 计算机禁用网络后怎么打开,无线网关,教您笔记本无线网络禁用后怎么开启
  16. mcgs odbc mysql_MCGS构建实时数据库.doc
  17. 2023年中职网络安全竞赛服务远程控制任务解析
  18. SSRF-服务器端请求伪造(类型和利用方法)第2部分
  19. Dialog屏蔽Esc按键
  20. 如何让excel中一部分表格显示但不打印?

热门文章

  1. 小米5刷android p6,小米5刷recovery教程 小米5第三方recovery下载
  2. 安捷伦频谱仪的使用方法图解_频谱分析仪的基本使用方法(转载)
  3. java11 http正式_Java11 HttpClient下载中文文件名称乱码
  4. 水晶报表CrystalReports很强大也很简单!
  5. Eclipse —— 官网下载地址
  6. php微信开发视频教程_PHP微信开发视频资源推荐
  7. 小米平板4刷机win10或linux,小米平板2中Win10/MIUI系统互刷终极教程
  8. idea 导入项目时 “Import project from external model” 和 “Create project from existing sources”的区别
  9. 宏基站、分布式基站、小基站
  10. hackerrank Java Data Structures