iTextSharp - 移动 Acrofield

2023-12-19

我有一个将内容表插入现有 Acroform 的流程,并且我能够跟踪需要从何处开始该内容。但是,我现有的 Acrofields 低于该点,需要根据我插入的表格的高度向上或向下移动。那么,我怎样才能改变 Acrofield 的位置呢?下面是我可以用来“获取”位置的代码......但现在我还需要能够“设置”它。

....

            // Initialize Stamper ("output" is a MemoryStream object)
            PdfStamper stamper = new PdfStamper(pdf_rdr, output);

            // Get Reference to PDF Document Fields
            AcroFields fields = stamper.AcroFields;

            //call method to get the field's current position
            AcroFields.FieldPosition pos = GetFieldPosition(fields, "txt_footer");

// ** 需要在此处明确设置该字段的新位置

            //assuming a call to "RegenerateField" will be required
            fields.RegenerateField(txt_footer);

....

    //helper method for capturing the position of a field
    private static AcroFields.FieldPosition GetFieldPosition(AcroFields fields, string field_nm)
    {

        ////////////////////////////////////////////////////////////////////////////////////
        //get the left margin of the page, and the "top" location for starting positions
        //using the "regarding_line" field as a basis
        IList<AcroFields.FieldPosition> fieldPositions = fields.GetFieldPositions(field_nm);

        AcroFields.FieldPosition pos = fieldPositions[0];

        return pos;

    }

首先是有关字段及其在一页或多页上的表示的一些信息。 PDF 表单可以包含多个字段。字段具有唯一的名称,即具有一个特定名称的特定字段具有一个和一个值。字段是使用定义的字段字典.

每个字段在文档中可以有零个、一个或多个表示。这些视觉表示被称为小部件注释它们是使用注释词典.

知道这一点,你的问题需要重新表述:如何更改特定字段的特定小部件注释的位置?

我用 Java 制作了一个名为改变字段位置 http://itextpdf.com/sandbox/acroforms/ChangeFieldPosition回答这个问题。将其移植到 C# 取决于您(也许您可以在此处发布 C# 答案以供进一步参考)。

您已经拥有了AcroFields实例:

 AcroFields form = stamper.getAcroFields();

你现在需要的是Item特定字段的实例(在我的示例中:对于名称为"timezone2"):

    Item item = form.getFieldItem("timezone2");

该位置是小部件注释的属性,因此您需要询问item为其小部件。在下面的行中,我获取第一个小部件注释的注释字典(索引为0):

    PdfDictionary widget = item.getWidget(0);

在大多数情况下,只有一个小部件注释:每个字段只有一种视觉表示。

注释的位置是一个数组,有四个值:llx、lly、urx 和 ury。我们可以这样得到这个数组:

    PdfArray rect = widget.getAsArray(PdfName.RECT);

在下面的行中,我更改了右上角的 x 值(索引2与 urx 对应):

    rect.set(2, new PdfNumber(rect.getAsNumber(2).floatValue() - 10f));

结果,字段的宽度缩短了 10pt。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iTextSharp - 移动 Acrofield 的相关文章

  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 我怎样才能传递 UIColor 的名字

    我想知道如何将 UIColor 的名称传递给特定方法 EDIT id setLabel NSString text WithColorName NSString nameOfColor FontName NSString f name Fo
  • 检查 JComboBox 中是否已存在某个项目?

    除了迭代 JComboBox 之外 是否有一种简单的方法来检查 JComboBox 中是否已存在某个项目 这就是我想做的 Item item boolean exists false for int index 0 index lt myC
  • React Native Firebase DataSnapshot

    我正在尝试使用以下代码将 firebase 实现到我的 React Native 应用程序中 import as firebase from firebase var fireBaseconfig apiKey MY KEY authDom
  • Spring JPA:使用@Transactional和@PersistenceContext的应用程序管理持久性上下文

    目前 我正在尝试应用程序管理的持久性上下文 方法是手动创建实体管理器并存储它们 以在 JSE 应用程序中启用跨多个请求调用 可能类似于扩展持久性上下文 的事务 但是 我想知道是否可以通过使用 spring 的 PersistenceCont
  • 暂停和恢复 setInterval

    window setInterval function do stuff milisec 有没有办法随意停止这个间隔 并从它持续的地方恢复它 比如说 代码每 5 秒运行一次 我在第二秒中间停止它 当恢复时 我希望它运行剩余的 3 秒 然后每
  • iPhone 8 和 iPhone X 的型号名称是什么? [复制]

    这个问题在这里已经有答案了 谁可以使用 iPhone 8 和 iPhone X 告诉我型号名称吗 可以通过以下方式访问它UIDevice current modelName Anbu提到的信息是 iPhone 8 iPhone10 1 和
  • Java containsAll 在给定列表时不返回 true

    我想检查一个数组是否是另一个数组的子集 程序打印错误 但我期望正确 为什么 containsAll 不返回 true int subset subset new int 3 subset 0 10 subset 1 20 subset 2
  • Rails 多态关联(遗留数据库)

    我使用的是旧数据库 因此我对数据模型没有任何控制权 他们使用很多多态链接 连接表 就像这样 create table person per ident name create table person links per ident obj
  • python 中的 import 关键字实际上是如何工作的?

    假设我有 3 个文件 a py from d import d class a def type self return a def test self try x b except print EXCEPT IN A from b imp
  • 将 Kivy 设置为全屏时出现问题

    我正在尝试编写一个全屏运行 kivy 的应用程序 但这些是我的问题 1 当我运行命令时 Config set graphics fullscreen 1 然后 kivy 似乎已完全运行 但窗口的背景图像周围有很多黑色空间 即使我拉长图像 k
  • 它相当于 llvm 中的 size_t

    某些系统库 例如 malloc strlen 需要或返回 size t 作为参数 LLVM IR 中与这些函数交互的正确选择是什么 选择是编译器的任务吗 LLVM IR 有 size t 类型吗 在LLVM级别 size t不存在 它是为了
  • TBB,一项任务的线程数固定,其他任务的线程数默认

    我想在一组块上并行执行 for 循环 使用 TBB 其中每个块将使用用户提供的函数进行处理 通常 我会使用tbb parallel for 由于各种原因 我希望能够将处理块的线程数量限制为规定的数量 称之为j 通常 我会使用tbb task
  • XF - SignaturePad 仅在触摸结束时显示笔划

    我在用着签名板 https github com xamarin SignaturePad with Xamarin Forms即使在基本的硬件设备上它也能正常工作 但我在仅使用一台设备时就遇到了奇怪的行为 三星 Galaxy Tab E
  • Mongodb聚合组按逻辑还是?

    我想尝试根据文档中两个布尔字段的逻辑或进行分组 基本上 文档有两个可以表示错误条件的字段 如果其中一个字段为 true 那么我想在 id 为 true 的情况下创建一个状态字段 但如果两者都不为 true 那么我希望状态为 false 我希
  • 如何修复 JSP 编译器警告:扫描了一个 JAR 的 TLD 但不包含 TLD?

    当启动应用程序或通过 ant 编译 JSP 时 Tomcat 7 Jasper 抱怨 JAR 文件多余或放错位置 我收到以下消息 compile jsp jasper Jul 31 2012 7 15 15 PM org apache ja
  • OSSEC 电子邮件通知发送电子邮件失败

    我在尝试获取 ossec 功能时收到错误 电子邮件通知 我在这个案例中使用了我的 Gmail 帐户 我试过这个tutorial https www digitalocean com community tutorials how to in
  • 如何在 SequelizeJS 中使用 $in 运算符?

    我尝试在 SequelizeJS 中使用 in 运算符 就像在 MySQL 语句中一样 SELECT column name s FROM table name WHERE column name IN value1 value2 就我而言
  • Spark Streaming - 根据按键分组的键值对计算统计信息

    背景 我正在使用 Spark Streaming 从 Kafka 流式传输事件 这些事件采用逗号分隔键值对的形式 以下是事件如何流入我的 Spark 应用程序的示例 Key1 Value1 Key2 Value2 Key3 Value3 K
  • Fortran 派生类型

    我想知道是否可以在 Fortran 中定义一个派生类型 它会自动返回正确的类型 而无需专门调用该类型 例如var real 这是一个例子来解释我的意思 module DervType implicit none type public my
  • iTextSharp - 移动 Acrofield

    我有一个将内容表插入现有 Acroform 的流程 并且我能够跟踪需要从何处开始该内容 但是 我现有的 Acrofields 低于该点 需要根据我插入的表格的高度向上或向下移动 那么 我怎样才能改变 Acrofield 的位置呢 下面是我可