近年来,随着数字化进程的不断推进,电子化文件的需求也越来越高。在实际工作中,我们常常需要将 HTML 文件转换为 PDF 文件,在此过程中需要使用到 Java 编程技术。本文将从以下三个方面介绍 HTML 转 PDF 的 Java 实现方法:
一、使用 iText 进行 HTML 转 PDF
iText 是一种流行的 Java PDF 库,它可以将 HTML 文件转换为 PDF 文件。iText 的作用是解析 HTML 文件并使用 PDF 标记语言来重构页面。下面是使用 iText 进行 HTML 转 PDF 的关键代码:
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf"));
document.open();
HTMLWorker htmlWorker = new HTMLWorker(document);
String html = "<html><head></head><body><p>Hello World</p></body></html>";
htmlWorker.parse(new StringReader(html));
document.close();
登录后复制
上述代码创建了一个 Document 对象用于 PDF 文件的生成,然后使用 PDFWriter 将该 Document 对象写入输出流中以生成 PDF 文件。HTMLWorker 然后用于解析 HTML 文档并将其添加到 PDF 页面中。最后,关闭 Document 对象以完成 PDF 文件的生成。
二、使用 Flying Saucer 进行 HTML 转 PDF
另一个可用于 HTML 转 PDF 的 Java 工具是 Flying Saucer。它是一个免费且开源的 PDF 渲染器,可以将 HTML 转换为 PDF 格式的文档。 下面是使用 Flying Saucer 进行 HTML 转 PDF 的示例代码:
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(htmlContent)));
ITextRenderer iTextRenderer = new ITextRenderer();
iTextRenderer.setDocument(document, null);
iTextRenderer.layout();
OutputStream outputStream = new FileOutputStream("output.pdf");
iTextRenderer.createPDF(outputStream);
outputStream.close();
登录后复制
上述代码首先解析 HTML 文档并将其读入 Document 中。然后,使用 ITextRenderer 的 layout() 方法对文档进行布局。最后,使用 createPDF() 方法将 PDF 文件生成到 outputStream 中。
三、使用 PDFBox 进行 HTML 转 PDF
PDFBox 是一个流行的开源 Java PDF 库,提供了许多用于创建和处理 PDF 文件的工具。它还提供了一些 HTML 转 PDF 的示例代码,可以在这里看到完整的示例代码。
下面是使用 PDFBox 进行 HTML 转 PDF 的示例代码:
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
PDRectangle mediaBox = page.getMediaBox();
float margin = 72;
float startX = mediaBox.getLowerLeftX() + margin;
float startY = mediaBox.getUpperRightY() - margin;
float width = mediaBox.getWidth() - 2 * margin;
String html = "<html><head></head><body><p>Hello World!</p></body></html>";
ByteArrayInputStream bais = new ByteArrayInputStream(html.getBytes());
InputStreamReader isr = new InputStreamReader(bais);
COSDocument cosDoc = new COSDocument();
PDFOperator.reset();
PDPageTree pageTree = new PDPageTree();
PDDOMParser parser = new PDDOMParser(cosDoc);
parser.parse(isr);
PDDocumentOutline outline = new PDDocumentOutline();
document.getDocumentCatalog().setDocumentOutline(outline.getRootNode());
PDOutlineItem item = new PDOutlineItem();
item.setTitle("PDFBox");
PDOutlineItem childItem = new PDOutlineItem();
childItem.setTitle("Hello World 2");
item.addLast(childItem);
outline.getRootNode().addLast(item);
PDAcroForm form = new PDAcroForm(cosDoc);
document.getDocumentCatalog().setAcroForm(form);
PDPageContentStream cs = new PDPageContentStream(document, page);
PDFTextStripper stripper = new PDFTextStripper();
stripper.setStartPage(0);
stripper.setEndPage(1);
String text = stripper.getText(document);
cs.beginText();
cs.setFont(PDType1Font.COURIER, 14);
cs.drawString(text, 100, 100);
cs.endText();
contentStream.close();
document.save("output.pdf");
document.close();
登录后复制
上述代码首先创建一个 PDDocument 对象,并向其添加了一个新页面。然后,创建了一个 PDPageContentStream 对象,用于在页面上绘制内容。接着,使用 PDDOMParser 将 HTML 解析为 COSDocument 对象。最后,将内容写入输出流以生成 PDF 文件。
总结
HTML 转 PDF 在实际生产过程中具有非常广泛的应用,通过 Java 编程可以很方便地完成这个重要任务。本文介绍了使用 iText、Flying Saucer 和 PDFBox 三个工具进行 HTML 转 PDF 的方法。无论是在什么情况下,通过选择最适合项目需要的方法,可以使开发变得更加快捷和便利。
以上就是Java中怎么将html转为pdf的详细内容,更多请关注鸿网互联其它相关文章!
原网址: 访问
创建于: 2023-08-02 18:33:19
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论