JMeter中BeanShell处理PDF转换后生成文件空白问题求助
解决JMeter BeanShell处理PDF文件生成空白问题
问题根源:PDF属于二进制文件,直接将字节数组转换为String存储到JMeter变量会导致二进制数据损坏。String基于字符编码设计,无法完整保留所有二进制字节,写入时再还原会丢失关键数据,最终生成的PDF无法正常解析,显示空白。
修正方案
1. 修改BeanShell Sampler代码,保留二进制数据完整性
不要将字节数组转成String,改用vars.putObject()直接存储字节数组对象:
import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; File file = new File("C:\\Users\\hp\\Downloads\\Instructions.pdf"); FileInputStream in = new FileInputStream(file); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int i; while ((i = in.read(buffer)) != -1) { bos.write(buffer, 0, i); } in.close(); byte[] pdfdata = bos.toByteArray(); bos.close(); // 用putObject存储字节数组,避免字符串转换导致的数据损坏 vars.putObject("pdfdata", pdfdata);
2. 修改BeanShell PostProcessor代码,用二进制流写入文件
使用FileOutputStream(而非处理字符的FileWriter)写入二进制数据:
import java.io.FileOutputStream; // 读取存储的字节数组对象 byte[] pdfBytes = (byte[]) vars.getObject("pdfdata"); FileOutputStream fos = new FileOutputStream("newresult1.pdf"); fos.write(pdfBytes); fos.close();
额外说明
vars.putObject()支持存储任意Java对象,能完整保留二进制数据的原始状态- 写入二进制文件必须使用字节流(
FileOutputStream),字符流(FileWriter)会破坏二进制格式 - 移除原代码中的
true参数,新生成PDF无需追加模式,避免重复写入导致文件损坏
内容的提问来源于stack exchange,提问作者Pratik Dey
相关产品推荐
相关产品推荐

