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

使用DevExpress添加PDF图章时触发NullReferenceException问题排查

解决DevExpress AddRubberStampAnnotation空引用异常及批量添加A4图章方案

问题分析

调用AddRubberStampAnnotation时出现无栈追踪的NullReferenceException,已确认流和变量均不为空,更换为文件路径也无法解决,推测可能是以下原因:

  • 重复使用同一个MemoryStream对象时,流的位置未重置导致内部读取失败
  • DevExpress 22.1.4版本中AddRubberStampAnnotation方法存在潜在bug
  • 图章PDF的格式或尺寸与方法预期不匹配

修复方案1:重置流位置或重新创建流对象

在每次循环中重新创建图章流实例,避免重复使用时的读取位置异常:

public static byte[] MergeWithStampDevEx(this byte[] doc, byte[] stamp)
{
    using var docStream = new MemoryStream(doc);
    using var outStream = new MemoryStream();
    using var proccessor = new PdfDocumentProcessor();
    proccessor.LoadDocument(docStream);
    var rec = proccessor.Document.Pages[0].CropBox;

    foreach (var page in proccessor.DocumentFacade.Pages)
    {
        // 每次循环重新初始化图章流
        using var stampStream = new MemoryStream(stamp);
        var stampFacade = page.AddRubberStampAnnotation(rec, stampStream, page.PageNumber);
        stampFacade.Opacity = WatermarkTransparentState;
    }
    proccessor.SaveDocument(outStream);

    return outStream.ToArray();
}

替代方案:使用AddWatermark实现批量图章添加

若AddRubberStampAnnotation仍存在异常,改用AddWatermark方法更稳定,可实现全页面覆盖的图章效果:

public static byte[] MergeWithStampDevEx(this byte[] doc, byte[] stamp)
{
    using var docStream = new MemoryStream(doc);
    using var outStream = new MemoryStream();
    using var stampStream = new MemoryStream(stamp);
    using var proccessor = new PdfDocumentProcessor();
    proccessor.LoadDocument(docStream);

    // 加载图章PDF并获取页面对象
    using var stampProcessor = new PdfDocumentProcessor();
    stampProcessor.LoadDocument(stampStream);
    var stampPage = stampProcessor.Document.Pages[0];

    foreach (var page in proccessor.DocumentFacade.Pages)
    {
        var pageCropBox = page.CropBox;
        // 添加水印并设置位置与尺寸匹配页面
        var watermark = page.AddWatermark(stampPage);
        watermark.SetPosition(pageCropBox.Left, pageCropBox.Top);
        watermark.Scale = 1; // 保持原图章尺寸,需适配可调整缩放比例
        watermark.Opacity = WatermarkTransparentState;
    }

    proccessor.SaveDocument(outStream);
    return outStream.ToArray();
}

额外注意事项

  • 确保图章PDF为标准A4尺寸,避免因尺寸不匹配引发异常
  • 若问题持续,可尝试升级DevExpress版本至最新稳定版,修复旧版本潜在bug
  • 调试时可先仅处理单个页面,排查是否为特定页面导致的异常

内容的提问来源于stack exchange,提问作者Hollow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:27:27