如何使用C#程序给PDF文件添加编辑域

下面是使用C#程序给PDF文件添加编辑域的完整攻略:

准备工作

在开始添加编辑域之前,我们需要准备一些工作。首先,我们需要下载和安装iTextSharp,这是一个开源的PDF编辑库。其次,我们需要安装Adobe Acrobat DC,这是一个非常流行的PDF编辑器,我们后续需要用它来验证PDF文件中添加的编辑域是否有效。

添加编辑域

一旦我们准备好了工作,我们就可以开始添加编辑域了。下面是代码示例:

using iTextSharp.text;
using iTextSharp.text.pdf;

public static void AddEditFieldToPdf(string inputFile, string outputFile, string fieldName)
{
    using (var existingPdf = new PdfReader(inputFile))
    {
        using (var stamper = new PdfStamper(existingPdf, new FileStream(outputFile, FileMode.Create)))
        {
            var textField = new TextField(stamper.Writer, new iTextSharp.text.Rectangle(100, 100, 200, 200), fieldName);
            var field = textField.GetTextField();
            stamper.AcroFields.AddTextField(field, true);
        }
    }
}

以上代码将在指定的PDF文件中添加一个名为fieldName的编辑域,坐标范围为(100, 100)(200, 200)。请注意,这些值是以PDF页面的左下角为原点,其他的坐标信息也需要以此为基准。

验证编辑域

添加编辑域之后,我们需要验证它是否有效。我们可以使用Adobe Acrobat DC打开修改后的PDF文件,然后点击“表单”按钮来查看表单元素。如果我们添加的编辑域正常工作,我们应该可以在表单中看到一个名为fieldName的文本框,我们可以使用鼠标点击它并在其中输入内容。

除了验证编辑域是否有效之外,我们还可以使用以下代码获取已经添加的编辑域列表:

using iTextSharp.text.pdf;

public static List<string> GetFormFields(string inputFile)
{
    var result = new List<string>();
    using (var reader = new PdfReader(inputFile))
    {
        var fields = reader.AcroFields;
        foreach (var field in fields.Fields)
        {
            result.Add(field.Key);
        }
    }
    return result;
}

以上代码将返回指定PDF文件中所有的表单域名。

示例

下面是两个示例说明,分别演示了在新建PDF文件中添加一个简单文本字段和动态地创建和添加一个列表字段。

示例1:添加文本字段

public static void AddTextField(string outputFile, string fieldName, string value)
{
    using (var document = new Document())
    {
        using (var writer = PdfWriter.GetInstance(document, new FileStream(outputFile, FileMode.Create)))
        {
            document.Open();

            var textField = new TextField(writer, new Rectangle(50, 700, 150, 750), fieldName)
            {
                Text = value
            };

            document.Add(new Paragraph(textField.ToString()));

            document.Close();
        }
    }
}

以上代码将在新建的PDF文件中添加一个名为fieldName的简单文本字段,坐标范围为(50, 700)(150, 750),字段值为value

示例2:添加列表字段

public static void AddListField(string outputFile, string fieldName, params string[] options)
{
    using (var document = new Document())
    {
        using (var writer = PdfWriter.GetInstance(document, new FileStream(outputFile, FileMode.Create)))
        {
            document.Open();

            var comboBoxField = new ComboBox(writer, new Rectangle(50, 700, 150, 750), fieldName, options)
            {
                Editable = false
            };

            document.Add(new Paragraph(comboBoxField.ToString()));

            document.Close();
        }
    }
}

以上代码将在新建的PDF文件中添加一个名为fieldName的列表字段,坐标范围为(50, 700)(150, 750),选项列表为options数组中的元素。此外,我们还将设置列表为不可编辑(Editable = false)。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用C#程序给PDF文件添加编辑域 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C#日期控件datetimepicker保存空值的三种方法

    针对C#日期控件datetimepicker保存空值的三种方法,我来为您提供完整的攻略。 1. 方法一:使用Nullable类型 在C#中,可以使用Nullable类型来保存空值,这个类型在System命名空间中: Nullable<DateTime> nullableDate = null; 使用此方法,即可将datetimepicker控件的…

    C# 2023年5月15日
    00
  • C#遍历文件夹后上传文件夹中所有文件错误案例分析

    下面是“C#遍历文件夹后上传文件夹中所有文件错误案例分析”的完整攻略。 问题描述 在使用C#编写上传文件夹中所有文件的程序时,如果不注意程序的细节,很容易出现错误。其中一个常见的错误情况是: 在遍历文件夹的过程中,存在文件夹中包含文件夹的情况。如果不对这些内层文件夹进行正确的处理,就会造成上传的文件丢失或上传失败等问题。 下面我们来介绍一些正确处理内层文件夹…

    C# 2023年5月14日
    00
  • C#多线程等待所有子线程结束的示例

    在C#中,多线程编程是常见的需求。其中,一个常见的问题是如何等待所有子线程结束。在本文中,我们将演示两个示例来解决这个问题。 示例一:使用Thread.Join方法 使用Thread.Join方法是一种常见的等待子线程完成的方式。以下是示例代码: public static void Main() { var threads = new List<Th…

    C# 2023年5月15日
    00
  • Java泛型类型通配符和C#对比分析

    Java泛型类型通配符和C#泛型中的通配符有些许不同之处。本文将深入讨论这些不同点,并带来一些示例来加深读者的理解。 1. Java泛型类型通配符 Java泛型类型通配符表示某个范围内的类型参数,但具体是哪个类型参数是未知的。泛型类型通配符用?表示,它可以用来定义泛型方法、泛型类和泛型接口,让代码在编译期间进行类型检查,减少运行时的错误。 1.1 无限制通配…

    C# 2023年6月7日
    00
  • Unity Shader实现径向模糊效果

    Unity Shader实现径向模糊效果的攻略如下: 1. 准备工作 在开始实现模糊效果前,需要先准备好相应的工具和资源。具体步骤如下: 准备一个新的Shader文件,可以在Unity中创建一个新Shader文件,或者直接新建一个文本文件,将文件后缀名改为.shader。 在Shader文件中定义需要模糊的材质属性,如对象的颜色、纹理等。这些属性将被用来计算…

    C# 2023年6月3日
    00
  • Winform学生信息管理系统登陆窗体设计(1)

    下面是Winform学生信息管理系统登陆窗体设计的完整攻略。 一、设计思路 设计一个Winform学生信息管理系统登陆窗体需要以下几步: 新建一个Winform项目,添加登陆窗体。 设计登陆窗体的布局,包括添加组件,设置组件属性等。 为登陆窗体的组件添加事件处理程序,比如点击按钮触发登陆操作。 在事件处理程序中,编写验证登陆信息的代码,并执行相应的操作。 二…

    C# 2023年6月3日
    00
  • ASP.NET数据库存取图片的方法

    ASP.NET 是一个基于 .NET 框架的 Web 应用程序开发平台,它可以使用多种方式存储图片,包括将图片存储在文件系统中,或者将它们存储在数据库中。 以下是在 ASP.NET 中存储和访问图片的两种常见方法: 方法1:将图片存储在文件系统中 将图片存储在文件系统中是最常见的方法之一,主要包括两个步骤:上传图片和显示图片。 1.1上传图片 上传图片可以使…

    C# 2023年5月31日
    00
  • asp.net String.Empty NULL 不同之处

    当我们在使用ASP.NET来进行Web应用程序的开发时,经常需要使用到字符串操作。在操作字符串时,我们可能会遇到空字符串和NULL的情况,那么他们之间有什么区别呢?我们来详细讲解一下“asp.net String.Empty NULL 不同之处”。 String.Empty是空字符串,NULL表示空对象引用 String.Empty表示一个长度为0的字符串,…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部