使用phantomjs.exe ,html2pdf.js两个文件生成pdf.

命令行执行命令:

 执行命令 :.\phantomjs.exe .\html2pdf.js https://blog.csdn.net/synshitou/article/details/115318337?spm=1001.2014.3001.5502

 生成的pdf:

java 方法下载简历:

package com.qiyee.job.common.utils;import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URL;/*** @author syn on 2021-09-02 19:36:00* @ClassName : com.uu.husky.utils.Html2pdfUtil* @Description : 类描述*/
@Slf4j
public class Html2pdfUtil {/*** windows下执行方法* @param url* @return* @throws IOException*/public static String parseHtml2PdfWindows(String url)  {URL resource = Thread.currentThread().getContextClassLoader().getResource("");String property = resource.getPath() +"download/";property = property.replaceFirst("/", "");return getFileHtml(url, property," windows");}/*** 部署在docker容器中执行* @param url* @return* @throws IOException*/public static String parseHtml2PdfOnLinux(String url)  {String property = "/qiyee/pdf/";return getFileHtml(url, property," linux");}private static String getFileHtml(String url,String property,String oSname)  {StringBuffer sbf = null;Runtime rt =null;Process p =null;InputStream is=null;BufferedReader br =null;try {rt = Runtime.getRuntime();String js=property+"phantomjs ";String html=property+"html2pdf.js ";p = rt.exec(js+html+url+oSname);is = p.getInputStream();br = new BufferedReader(new InputStreamReader(is));sbf = new StringBuffer();String tmp = "";while ((tmp = br.readLine()) != null) {if (tmp.toLowerCase().contains("error")){continue;}sbf.append(tmp);}} catch (IOException e) {log.error(e.getMessage());} finally {if (p!=null){p.destroy();}try {is.close();br.close();} catch (IOException e) {log.error(e.getMessage());}}String resultstr = sbf.toString();System.out.println("resultstr:"+resultstr);String[] arr = resultstr.split("\\$");String result = "";for(String s : arr){if(s.endsWith("pdf")){result = s;}}return result;}/*** 下载简历* @param response* @param url*/public static void downLoadResumePdf(HttpServletResponse response,String url){log.info("请求要生成pdf的url:"+url);String fileUrl="";if (!StringUtils.hasText(url)){return;}if (OSinfo.isLinux()){fileUrl = parseHtml2PdfOnLinux(url);}if (OSinfo.isWindows()){fileUrl = parseHtml2PdfWindows(url);}FileDownloadUtils.download(fileUrl,response);}public static void main(String[] args) throws Exception {long start = System.currentTimeMillis();String result = parseHtml2PdfOnLinux("https://blog.csdn.net/synshitou/article/details/115318337?spm=1001.2014.3001.5502");long all = System.currentTimeMillis()- start;System.out.println("pdf生成地址:"+result+",用时:"+all/1000+"秒");}
}

下载的方法:

public static HttpServletResponse download(String path, HttpServletResponse response) {try {// path是指欲下载的文件的路径。File file = new File(path);// 取得文件名。String filename = file.getName();// 取得文件的后缀名。String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();// 以流的形式下载文件。InputStream fis = new BufferedInputStream(new FileInputStream(path));byte[] buffer = new byte[fis.available()];fis.read(buffer);fis.close();// 清空responseresponse.reset();// 设置response的Headerresponse.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));response.addHeader("Content-Length", "" + file.length());OutputStream toClient = new BufferedOutputStream(response.getOutputStream());response.setContentType("application/octet-stream");toClient.write(buffer);toClient.flush();//下载完删除文件deleteFile(path);} catch (IOException ex) {ex.printStackTrace();}return response;
}

js 文件:

var page = require('webpage').create();
var system = require('system');读取命令行参数,也就是js文件路径。var baseUrl=system.args[0].slice(0,-12);var oSName=system.args[2];
if (system.args.length === 1) {console.log('Usage: loadspeed.js <some URL>');
//这行代码很重要。凡是结束必须调用。否则phantomjs不会停止phantom.exit();
}
page.settings.loadImages = true;  //加载图片
page.settings.resourceTimeout = 30000;//超过10秒放弃加载
//截图设置,
//page.viewportSize = {
//  width: 1000,
//  height: 3000
//};
var address = system.args[1];page.open(address, function(status) {function checkReadyState() {//等待加载完成将页面生成pdfsetTimeout(function () {var readyState = page.evaluate(function () {return document.readyState;});if ("complete" === readyState) {page.paperSize = { width:'400px',height:'570px',orientation: 'portrait',border: '1cm' };var timestamp = Date.parse(new Date());var pdfname = 'HT_'+timestamp + Math.floor(Math.random()*1000000);if (oSName.indexOf("win")==-1){baseUrl="";}var outpathstr = baseUrl+"/qiyee/pdf/"+pdfname+".pdf";page.render(outpathstr);//console.log就是传输回去的内容。console.log("生成成功");console.log("$"+outpathstr+"$");phantom.exit();} else {checkReadyState();}},3000);}checkReadyState();
});

url 转pdf工具相关推荐

  1. html转换成pdf工具-wkhtmltopdf、Python生成PDF(pdfkit库)

    文章目录 一.html转换成pdf工具-wkhtmltopdf 1. 什么是wkhtmltopdf 2. 如何使用它? 3. 常见问题 error while loading shared libra ...

  2. html5转PDF软件,HTML to PDF Tools(HTML转PDF工具)

    HTML to PDF Tools是一款简单实用的转换软件,可以让您在转换网页的时候更加简单,大家都知道HTML是可以直接复制和下载的,通过浏览器的下载功能就可以将当前查看的网页独立保存,从而让用户可 ...

  3. 如何玩转PDF?5款简单好用的PDF工具推荐

    在办公中会经常遇到PDF文件,也需要将PDF文件进行编辑和转换,但是对PDF直接编辑和转换是不行的,为了高效办公就需要借助工具来完成,很多人想问如何玩转PDF?今天就来给大家推荐5款简单好用的PDF工 ...

  4. IText实现url转pdf, 解决中文字体问题

    IText实现url转pdf 入门文章:http://www.micmiu.com/opensource/expdoc/itext-pdf-demo/ 进阶文章:http://www.micmiu.c ...

  5. 国产知名老牌 PDF 工具正式开源

    文 | Travis 出品 | OSC开源社区(ID:oschina2013) 「PDF 补丁丁」是开发者 @wmjordan 所开发的一款适用于 Windows 系统的多功能 PDF 文档工具箱,开 ...

  6. python从url获取pdf文件并保存在本地

    思路: 借助requests下载文件 将文件转换为字节流 将字节流保存在本地 代码案例 图片.pdf或文本什么的,思路是一样的: def get_file_from_url(url_file):imp ...

  7. js几个页面生成pdf 然后批量打印_太好用了!这款免费PDF工具能够满足你的各种需求...

    本文原创首发于微信公众号[小川PPT],欢迎联系转载! 入职的第一年,帮领导组织一份省级课题结题材料.要求把研究材料和支撑材料汇总到一个pdf文档中统一编排页码和格式,我慌了-- 从网上下载了一份排版 ...

  8. 自制 Word、Excel 批转 PDF 工具

    自制 Word.Excel 批转 PDF 工具 原文:自制 Word.Excel 批转 PDF 工具 目前做金融业的项目,该公司每天会产生很多 Word.Excel 文档,需要大量地转换为 PDF,除 ...

  9. 小工具发布(2008-01-25更新,HTML、URL编解码工具)

    (2008-01-25)HTML.URL编解码工具 [介绍文章][访问该工具]

最新文章

  1. windows/linux计算文件 MD5值
  2. 没有 5G 版 iPhone 的苹果秋季发布会,发布了些什么?
  3. Linux读写锁释放,Linux读写锁的使用
  4. SharePoint 搜索功能失效
  5. 符号说明表怎么做_电气新手搞不定电气识图怎么办?别慌!8套电气识图教程,秒上手...
  6. 如何在Ubuntu中重置MySQL Root密码
  7. Yale CAS + .net Client 实现 SSO(2)
  8. 通过Powershell重新挂接父VHD磁盘的方法
  9. arch linux 安装 键盘,Arch Linux安装
  10. MIDI文件格式(一)
  11. BZOJ4399: 魔法少女LJJ
  12. 【Java3D】Java3D的Demo
  13. python 隐藏命令行窗口_科学网—Windows下后台运行程序并隐藏cmd命令提示符窗口 - 周锋的博文...
  14. android rom结构_如何将新的ROM刷新到您的Android手机
  15. SQLserver获取汉字的拼音码和五笔码
  16. 利用闲置的树莓派4B搭建一个NAS(二)
  17. 透明质酸/氧化石墨烯/聚丙烯酰胺复合水凝胶/透明质酸/βTCP复合水凝胶研究制备
  18. html 表单提交 地址栏 显示=%cc%ed%bc%d3 ,html--表单(示例代码)
  19. python死循环用什么好弄_用python死循环
  20. 计算机专业打字有没有要求,计算机专业学生有必要专门花时间练习打字吗?

热门文章

  1. “亚马逊抄袭”引热议,拼多多、淘宝、京东该怎么玩?
  2. NLP_Python3——正则表达式
  3. Spring boot在线客服系统源码 在线坐席对话源码
  4. 三五个人十来条枪 如何成为开发正规军(三十四)
  5. 无人驾驶运动学模型——线性时变模型预测控制的思路推演过程
  6. pt mysql_pt(Percona Toolkit)工具详解:(二)工具介绍
  7. python小游戏(华容道)
  8. AUTOMATE THE BORING STUFF WITH PYTHON读书笔记 - 第2章:FLOW CONTROL
  9. 从头开始训练BERT语言模型
  10. jn-社团申请必须要上传图片