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

如何使用iTextSharp 5.5.13为PDF添加签名域?附C#尝试代码

在iTextSharp 5.5.13中为PDF添加签名域的正确实现

我来帮你搞定这个问题,你的代码已经找对了方向,但几个关键细节需要调整,下面是完整可运行的实现方案:

完整代码示例

先确保你已经通过NuGet引用了iTextSharp 5.5.13包,然后使用以下代码:

using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

public void CreatePdfWithSignatureField(string outputFilePath, string signatureFieldName)
{
    // 用using语句自动管理资源,避免文件锁定问题
    using (Document document = new Document())
    {
        using (FileStream fs = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write))
        {
            PdfWriter writer = PdfWriter.GetInstance(document, fs);
            
            document.Open();
            
            // 先给PDF添加一些示例内容
            document.Add(new Paragraph("Hello World!"));
            
            // 1. 创建签名域实例
            PdfFormField signatureField = PdfFormField.CreateSignature(writer);
            
            // 2. 设置签名域名称(注意C#用PascalCase命名,不是Java的小写开头)
            signatureField.SetFieldName(signatureFieldName);
            
            // 3. 指定签名域所在的页码(这里设为第1页)
            signatureField.SetPage(1);
            
            // 4. 定义签名域的位置和尺寸:左下角(72,732)、右上角(144,780),单位是点
            Rectangle fieldRect = new Rectangle(72, 732, 144, 780);
            // 设置签名域的高亮样式为反转效果
            signatureField.SetWidget(fieldRect, PdfAnnotation.HIGHLIGHT_INVERT);
            
            // 5. 设置字段标志:比如允许打印、标记为必填签名域
            signatureField.SetFieldFlags(PdfAnnotation.FLAGS_PRINT | PdfFormField.FF_REQUIRED);
            
            // 6. 关键步骤:把签名域添加到PDFWriter中,否则不会显示在文档里
            writer.AddAnnotation(signatureField);
            
            document.Close();
        }
    }
}

核心注意点

  • 命名规范:iTextSharp的C#版本遵循PascalCase命名规则,所以是SetFieldName而非Java风格的setFieldName,这是你原代码里的语法错误。
  • 指定页码:SetPage()必须传入具体页码(比如SetPage(1)),否则签名域无法正确绑定到目标页面。
  • 添加注解:一定要调用writer.AddAnnotation(signatureField),这一步很容易遗漏,没有它签名域不会被写入PDF。
  • 字段标志自定义:可以根据需求调整SetFieldFlags的参数,比如移除FF_REQUIRED就不需要强制签名,添加FLAGS_READ_ONLY可以让签名域在签名后变为只读。
  • 资源管理:用using包裹Document和FileStream,确保文件和资源被正确释放,避免出现文件无法修改或删除的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:39:15