如何通过代码将Karate生成的HTML报告转换为PDF格式?
将Karate HTML报告转为PDF的程序化方案
Java 方案(基于Flying Saucer)
Flying Saucer是Java生态中成熟的HTML转PDF工具,能很好处理Karate生成的静态HTML报告:
1. 添加依赖(Maven)
在pom.xml中加入Flying Saucer的核心依赖:
<dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-pdf</artifactId> <version>9.1.22</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.36</version> </dependency>
2. 编写转换代码
创建Java类读取target下的Karate HTML报告,转换为PDF:
import org.xhtmlrenderer.pdf.ITextRenderer; import java.io.FileOutputStream; import java.io.FileReader; import java.io.Reader; public class KarateReportToPdf { public static void main(String[] args) throws Exception { // 替换为你的Karate HTML报告路径 String htmlPath = "target/karate-reports/karate-summary.html"; // 输出PDF路径 String pdfPath = "target/karate-reports/karate-summary.pdf"; try (Reader reader = new FileReader(htmlPath); FileOutputStream fos = new FileOutputStream(pdfPath)) { ITextRenderer renderer = new ITextRenderer(); renderer.setDocument(reader); renderer.layout(); renderer.createPDF(fos); System.out.println("PDF生成完成:" + pdfPath); } } }
JavaScript 方案(基于Puppeteer)
Puppeteer通过控制无头Chrome渲染HTML,适合处理包含动态JS的Karate报告:
1. 安装依赖
在项目根目录执行:
npm install puppeteer
2. 编写转换脚本
创建convert-report.js文件:
const puppeteer = require('puppeteer'); const path = require('path'); async function convertHtmlToPdf() { // 替换为你的Karate HTML报告相对路径 const htmlFilePath = path.resolve(__dirname, 'target/karate-reports/karate-summary.html'); const pdfFilePath = path.resolve(__dirname, 'target/karate-reports/karate-summary.pdf'); const browser = await puppeteer.launch({ headless: 'new' }); const page = await browser.newPage(); // 加载本地HTML文件 await page.goto(`file://${htmlFilePath}`, { waitUntil: 'networkidle0' }); // 生成PDF,可根据需求调整参数 await page.pdf({ path: pdfFilePath, format: 'A4', printBackground: true // 确保背景样式被渲染 }); await browser.close(); console.log(`PDF已生成:${pdfFilePath}`); } convertHtmlToPdf().catch(err => console.error('转换失败:', err));
执行脚本
node convert-report.js
注意事项
- 确保Karate的HTML报告已生成在
target目录下,路径需根据实际项目结构调整 - Java方案中,若报告包含外部资源(如CSS、图片),需确保资源路径正确,或提前将HTML转为内联资源格式
- Puppeteer首次运行会自动下载Chromium,需确保网络通畅
内容的提问来源于stack exchange,提问作者Yarasu Lavanya
相关产品推荐
相关产品推荐

