You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:06:01