URL如何转换成pdf?
文章目录
- URL如何转换成pdf?
- 方案一: IText方式
- 【相关依赖】
- 【代码实现】
- 方案二: FlyingSaucerf方式
- 依赖:
- 代码实现:
- 测试用例:
URL如何转换成pdf?
IText | FlyingSaucer | WKHtmlToPdf | pd4ml | |
---|---|---|---|---|
跨平台性 | 跨平台 | 跨平台 | 跨平台 | 跨平台 |
是否安装软件 | 否 | 否 | 需安装WKHtmlToPdf | 否 |
是否收费 | 免费 | 免费 | 免费 | 收费 |
转换Html效率 | 速度快 | 未测 | 速度慢。相比URL来说,效率较慢。能忽略一些html语法或资源是否存在问题。 | 速度快。部分CSS样式不支持。 |
转换Html效果 | 存在样式失真问题。对html语法有一定要求 | 存在样式失真问题。对html语法有较高要求。 | 失真情况较小,大部分网页能按Chome浏览器显示的页面转换 | 部分CSS样式有问题。 |
转换URL效率 | 未测 | 未测 | 效率不是特别高 | 未测 |
转换URL效果 | 未测 | 未测 | 部分网页由于其限制,或将出现html网页不完整。 | 未测 |
优点 | 不需安装软件、转换速度快 | 不需安装软件、转换速度快 | 生成PDF质量高 | 不需要安装软件、转换速度快 |
缺点 | 对html标签严格,少一个结束标签就会报错;服务器需要安装字体 | 对html标签严格,少一个结束标签就会报错;服务器需要安装字体 | 需要安装软件、时间效率不高 | 对部分CSS样式不支持。 |
图片 | 表格 | 链接 | 中文 | 特殊字符 | 整体样式 | 速度 | |
---|---|---|---|---|---|---|---|
IText | 支持 | 支持 | 支持 | 支持 | 支持 | 失真问题 | 快 |
FlyingSaucer | 未知 | 未知 | 未知 | 未知 | 未知 | 未知 | 快 |
WKHtmlToPdf | 支持 | 支持 | 支持 | 支持 | 支持 | 很好 | 慢 |
pd4ml | 支持 | 支持 | 支持 | 支持 | 支持 | 失真问题 | 快 |
对比以上各类实现:
1.WKHtmlToPdf因为转换速度慢、需要安装软件的缺点被暂时排除在外;pd4ml因为是收费的,并且同样存在一些常见的样式失真问题,直接排除;
2.剩下的就是在IText和FlyingSaucer的实现方案中做选择,对比之下,选择IText作为我们的最终实现方案
方案一: IText方式
【相关依赖】
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.2</version>
</dependency>
<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency>
<dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.13.2</version>
</dependency>
<dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.1.22</version>
</dependency>
【代码实现】
import com.itextpdf.text.pdf.BaseFont;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;import java.io.File;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;public final class HtmlUtil {private HtmlUtil() {}// 字体路径,放在资源目录下private static final String FONT_PATH = "classpath:simsun.ttc";public static void file2Pdf(File htmlFile, String pdfFile) {try (OutputStream os = Files.newOutputStream(Paths.get(pdfFile))) {String url = htmlFile.toURI().toURL().toString();ITextRenderer renderer = new ITextRenderer();renderer.setDocument(url);// 解决中文支持ITextFontResolver fontResolver = renderer.getFontResolver();// 获取字体绝对路径,ApplicationContextUtil是我自己写的类String fontPath = "c:/Windows/Fonts/simsun.ttc";fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);renderer.layout();renderer.createPDF(os);} catch (Exception e) {// 抛出自定义异常e.printStackTrace();}}public static void html2Pdf(String html, String pdfFile) {String pdfDir = pdfFile;/* File file = new File(pdfDir);if (!file.exists()) {file.mkdirs();}*/java.io.File targetFile = new java.io.File(pdfDir);if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs(); // 创建父级文件路径}try (OutputStream os = Files.newOutputStream(Paths.get(pdfFile))) {ITextRenderer renderer = new ITextRenderer();renderer.setDocumentFromString(html);// 解决中文支持ITextFontResolver fontResolver = renderer.getFontResolver();// 获取字体绝对路径,ApplicationContextUtil是我自己写的类String fontPath = "c:/Windows/Fonts/simsun.ttc";fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);renderer.layout();renderer.createPDF(os);} catch (Exception e) {// 抛出自定义异常e.printStackTrace();}}
}
【字体文件】
simsun.tcc
方案二: FlyingSaucerf方式
依赖:
implementation("com.itextpdf:itextpdf:5.5.13.3")implementation("com.itextpdf:itext-asian:5.2.0")implementation("com.itextpdf.tool:xmlworker:5.5.13.3")implementation group: 'org.xhtmlrenderer', name: 'flying-saucer-pdf-itext5', version: '9.1.22'
代码实现:
import com.itextpdf.text.pdf.BaseFont;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;public class UrlToPdfUtil {//private static final String OUT_PUT_PDF_PATH = "/home/data/pdf/"; //pdf文件的存放路径(Linux)private static final String OUT_PUT_PDF_PATH = "D:\\test\\"; //pdf文件的存放路径(windows)/*** @param url 链接地址* @param outputFileName 转存的PDF文件名* @Title 网页转存为PDF文件*/public static void urlToPdf(String url, String outputFileName) {try {String folder = outputFileName.substring(0, 6);System.out.println("folder = " + folder);String outputFile = OUT_PUT_PDF_PATH + folder + "\\" + outputFileName;java.io.File targetFile = new java.io.File(outputFile);if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs(); // 创建父级文件路径}OutputStream os = Files.newOutputStream(Paths.get(outputFile));ITextRenderer renderer = new ITextRenderer();renderer.setDocument(url);ITextFontResolver fontResolver = renderer.getFontResolver();//fontResolver.addFont("/usr/share/fonts/chinese/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); //LinuxfontResolver.addFont("c:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); //windowsrenderer.layout();renderer.createPDF(os);os.close();} catch (Exception e) {e.printStackTrace();}}}
测试用例:
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@SpringBootTest
@RunWith(SpringRunner.class)
public class TestPDF {@org.junit.Testpublic void testPdf(){UrlToPdfUtil.urlToPdf("https://mp.weixin.qq.com/s/zFTQVmWlbqj2wgeboIexMQ", "Pdf.pdf");HtmlUtil.html2Pdf("https://mp.weixin.qq.com/s/zFTQVmWlbqj2wgeboIexMQ", "D:\\test\\Pdf.pdf");}
}
以上实现就完成了html转换成pdf的功能 ~
常见错误:
URL如何转换成pdf?相关推荐
- 如何把html转换pdf,怎么把html转换成pdf
1.怎么将html格式文件转成pdf 1这个方法是我认为最简单.高效的,只要安装了360浏览器.火狐浏览器或谷歌浏览器就可以轻松实现.下面笔者以360浏览器为例,我们只要在浏览器的右上角点击" ...
- 在 Linux 中把一个网页转换成 PDF的技巧介绍
你如何在 Linux 中把一个网页转换成 PDF?你可以选择使用每个 Linux 发行版上的网页浏览器(GUI),或者使用终端将网页变成 PDF 文件. 在这里,我将提到这两种方法来帮助你完成工作. ...
- 廖雪峰python教程书-Python 爬虫:把廖雪峰的教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...
- 廖雪峰python教程pdf-爬虫:把廖雪峰的教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...
- python爬虫教程书-Python 爬虫:把廖雪峰教程转换成 PDF 电子书
声明:本文仅供学习参考,切忌用于其它用途,爬的过程中注意控制请求速度,以免给服务器带来过多的压力 写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来 ...
- python爬虫教程pdf-Python 爬虫:把廖雪峰教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天尝试写一个爬虫,将廖雪峰老师的 ...
- nodejs+html转换pdf,Nodejs 中将html转换成pdf文件
Nodejs 中将html转换成pdf文件,Nodejs Convert html into pdf 1. 下载phantomjs.exe,将该文件放在根目录 2. 编写pdf.js文件(在githu ...
- 网页html转为pdf,html页面转换成PDF文件
html页面转换成PDF文件 发布时间:2020-06-14 05:24:50 来源:51CTO 阅读:523 作者:robinmars package pdftest; import java.io ...
- ASP.Net中实现上传过程中将文本文件转换成PDF的方法
iTextSharp是一个常用的PDF库,我们可以使用它来创建.修改PDF文件或对PDF文件进行一些其他额外的操作.本文讲述了如何在上传过程中将文本文件转换成PDF的方法. 基本工作 在开始之前,我们 ...
最新文章
- web-view 跳转小程序页面 网页跳转小程序
- envoy实现_微服务之服务治理:Envoy 全局 gRPC 限速服务 lyft/ratelimit 详解
- 数字图像处理6:配准与掩膜
- 在SaaS领域,单纯的免费策略根本行不通!
- stm32串口通信(初学者对于串口通信的理解)
- 详解CockroachDB事务处理系统
- Bootstrap 响应式布局辅助类
- mysql 匹配所有记录_如何记录mysql中所有的查询
- php打出等边三角形,CSS 如何进行单一div的正多边形变换
- pytorch加载自己的图像数据集
- openssl error while loading serial number
- TB6612驱动电机
- erdas2015几何校正模块在哪_什么是几何校正和正射校正还有怎样用erdas做几何校正...
- windows共享时出现“指定网络名不再可用”解决办法
- 虚拟DOM和真实DOM
- AI 如何识别西瓜和冬瓜?
- 生物冰箱智能锁有哪些功能
- phpredis中文手册《redis中文手册》php版
- 【LeetCode】279. 完全平方数 【动态规划】【四平方和定理】
- linux中给普通用户添加root用户权限