JMeter使用Beanshell后置处理器将变量值保存为PDF文件的方法咨询
BeanShell后置处理器写入PDF文件实现方案
你当前使用的是JDK原生IO类将变量写入txt文件,PDF属于结构化文档格式,需要借助专用PDF处理类库实现写入,具体操作如下:
前置准备
- 下载Apache PDFBox核心包及配套fontbox依赖包,放入JMeter安装目录的
lib/ext文件夹下,重启JMeter完成类库加载。
替换BeanShell代码
你原有写入txt的代码可替换为以下写入PDF的代码:
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDType0Font; import org.apache.pdfbox.pdmodel.font.PDType1Font; import java.io.File; // 读取JMeter变量 String var1 = vars.get("myVariableValue"); // 定义PDF输出路径 String outputPath = "D:/myPdfFile.pdf"; File pdfFile = new File(outputPath); PDDocument pdfDoc; // 支持文件追加:文件已存在则加载原有内容,不存在则新建文档 if (pdfFile.exists()) { pdfDoc = PDDocument.load(pdfFile); } else { pdfDoc = new PDDocument(); } // 新增空白页,若需追加到已有页面可修改此段逻辑 PDPage newPage = new PDPage(); pdfDoc.addPage(newPage); // 字体配置:无中文需求可直接使用内置字体 // PDType1Font font = PDType1Font.HELVETICA; // 有中文需求则加载本地中文字体,以下为Windows系统宋体路径示例 PDType0Font font = PDType0Font.load(pdfDoc, new File("C:/Windows/Fonts/simsun.ttc")); // 写入变量内容 PDPageContentStream contentStream = new PDPageContentStream(pdfDoc, newPage); contentStream.beginText(); contentStream.setFont(font, 12); // 设置内容起始坐标:左下角为坐标原点,单位为磅 contentStream.newLineAtOffset(50, 750); contentStream.showText(var1); contentStream.endText(); contentStream.close(); // 保存并关闭文档 pdfDoc.save(outputPath); pdfDoc.close();
常见调整说明
- 若无需新增页面写入,可读取已有PDF的最后一页,计算剩余可写入高度后调整坐标写入即可
- 字体大小、起始坐标可根据排版需求自行调整
- 不需要写入中文时,直接注释掉中文字体加载代码,启用内置字体配置即可
内容的提问来源于stack exchange,提问作者Amit kumar
相关产品推荐
相关产品推荐

