使用Aspose邮件合并生成二维码时出现Bar code generator is not set错误
问题排查与解决方案
针对你遇到的Aspose.Words邮件合并时二维码位置出现Error! Bar code generator is not set.错误,从代码和模板两个维度排查,核心原因及解决方法如下:
1. 核心问题:重新加载文档丢失条码生成器配置
看你的代码流程,原模板设置BarcodeGenerator后执行邮件合并,保存为Docx到内存流再重新加载为新的retainerDoc,但新文档未设置FieldOptions.BarcodeGenerator,保存PDF时触发错误。
解决方法:去掉中间保存再加载的步骤,直接在原模板上生成PDF:
if (dt.Rows.Count > 0) { IEnumerable<letter_templates> TemplatePath = _repo.FetchLetterTemplates("Protest"); foreach (var item in TemplatePath) { PathToTemplate = item.full_file_path; } Aspose.Words.Document template = new Aspose.Words.Document(PathToTemplate); // 绑定条码生成器 template.FieldOptions.BarcodeGenerator = new CustomBarcodeGenerator(); // 执行邮件合并 template.MailMerge.Execute(dt); // 直接保存PDF到目标流,无需中间转Docx再加载 template.Save(finalOutStream, Aspose.Words.SaveFormat.Pdf); finalOutStream.Seek(0, SeekOrigin.Begin); }
2. 验证CustomBarcodeGenerator的正确性
确保自定义条码生成器类完整实现IBarcodeGenerator接口,且不会返回空图像:
public class CustomBarcodeGenerator : IBarcodeGenerator { public Bitmap GetBarcodeImage(BarcodeParameters parameters) { // 用Aspose.BarCode生成二维码 using (var barcodeGenerator = new Aspose.BarCode.Generation.BarcodeGenerator(EncodeTypes.QR, parameters.CodeText)) { // 配置二维码参数(按需调整) barcodeGenerator.Parameters.Barcode.XDimension.Pixels = 3; barcodeGenerator.Parameters.Barcode.QR.CodeTextEncoding = Encoding.UTF8; // 返回生成的图像 return barcodeGenerator.GenerateBarCodeImage(); } } public Bitmap GetOldBarcodeImage(BarcodeParameters parameters) { // 兼容旧版接口,直接返回二维码图像 return GetBarcodeImage(parameters); } }
- 确认
parameters.CodeText能正确获取到DataTable中的合并字段值 - 确保Aspose.BarCode的许可证已正确加载(你的代码里已经设置,可忽略)
3. 检查模板中的条码域设置
模板文本框内必须使用BARCODE域,而非普通合并字段:
- 在Word模板中,定位到文本框内的二维码位置
- 插入域(快捷键
Ctrl+F9),输入域代码:BARCODE {MERGEFIELD 你的二维码字段名} \b QR - 切换域显示为结果(
Alt+F9),确保域配置正确
如果使用普通合并字段,Aspose不会自动触发条码生成逻辑,必须用BARCODE域绑定合并字段。
4. 文本框尺寸问题排查
这个错误本身和尺寸无关,但如果后续二维码显示不全:
- 调整模板中文本框的宽高,预留足够空间
- 在
CustomBarcodeGenerator中调整二维码尺寸参数(比如XDimension.Pixels),让生成的二维码适配文本框大小
内容的提问来源于stack exchange,提问作者Jonathan Small
相关产品推荐
相关产品推荐

