在 TextField IText 中调整文本

2024-03-17

抱歉,如果存在像我这样的类似帖子,但我是这个论坛的新手,我还没有找到它。

我在动态调整 TextField 大小取决于文本大小时遇到​​问题。我填写现有的 PDF - 填写 AcroForm 中的字段:

form.setField("字段", "值"); (等)

一切都很好,但我还想设置文本(在 TextField 中),其大小大于字段大小。如何动态调整 TextField 的大小(在 setField 之后/之前或者在 AcroForm 创建过程中设置某些字段属性)以适合文本(大于 TextField 的文本)?此 TextField 的大小必须与文本大小完全相同,而不将字体大小更改为较小的大小,并且此 TextField 中没有滚动。

预先感谢您的帮助。


嗯,很容易做与您想要的相反的事情,更改字体大小,使所有文本都可见。您只需将字体大小设置为“0”,iText(或 Acrobat 或其他)即可动态确定要使用的字体大小(在某些合理的限制内)。


要确定给定文本块的长度,您可以调用myBaseFont.getWidthPoint( fieldValToBe, fontSize )。然后你可以调整字段大小before你打电话setField。默认情况下,iText 会为您渲染字段外观,并且会在您可以时完成渲染setField。更改字段大小后不会改变字段的外观,除非您调用setField again.

好的,那么如何更改字段的大小呢? iText 不直接支持这一点,因此您必须使用 iText 的低级 PDF 对象来完成此操作。像这样的事情:

AcroFields.Item fldItem = myAcroFields.getFieldItem("fieldName");

for (int i =0; i < fldItem.size(); ++i) {
  // "widget" is the visible portion of the field
  PdfDictionary widgetDict = fldItem.getwidget(0);  

  // pdf rectangles are stored as [llx, lly, urx, ury]
  PdfArray rectArr = widgetDict.getAsArray(PdfName.RECT); // should never be null
  float origX = rectArr.getAsNumber(0).floatValue();
  // overwrite the old value.  
  rectArr.set( 2, new PdfNumber( origX + newWidth + FUDGE_FACTOR ) );
}

FUDGE_FACTOR 需要考虑左右边框厚度。我猜测 3-5 分,具体取决于斜角边框与平面边框、线条粗细等。您可能只需选择一个值并使用它即可。

这一循环可能是不必要的,因为多个字段共享同一个名称的情况很少见。 OTOH,如果这就是您所面临的,您可能还需要重新计算newWidth因为不同的实例不需要共享相同的字体大小。

最后,您可能需要将这个新的 rectArr 写入该项目的“合并”版本以及小部件版本中。在操作字段时,iText 几乎普遍适用于合并版本,因为所有可能的键/值对都在那里,您可能必须使用小部件版本检查父字段值。

OTOH,给定的“合并”和“小部件”应该共享相同的矩形PdfArray,使这一点毫无意义。 “矩形”是一个“叶子”值,永远不会从父级继承,因此小部件的数组将被“浅复制”到合并的字典中......从而共享它。无论如何,您应该能够相当轻松地检查它。

assert item.getWidget(0).getAsArray(PdfName.RECT) ==
       item.getMerged(0).getAsArray(PdfName.RECT);

请注意,这是== not .equals。我不认为 PdfArrayhas an equals(),所以这一点也不是那么相关。

哦,因为我实际上有工作要做,所以我会让你弄清楚如何自己从字段中获取 BaseFont,并在正确的方向上轻推。你会想要一个DocumentFont via BaseFont.createFont(PRIndirectReference fontRef),你应该检查一下PDF 规范 http://www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf,第 12.7 章(交互式表单)和 9.5-9.10(各种字体类型...DocumentFont 将在很大程度上为您处理)以找出在哪里可以找到该间接引用。

要弄清楚间接引用到底是什么,您需要阅读第 7.3 章“对象”,特别是 7.3.10“间接对象”。

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

在 TextField IText 中调整文本 的相关文章

  • iTextSharp:“文档未打开”错误 - 当它实际上是时

    我有这个代码 private static byte ConvertPdfDocument Document document PdfPTable headerTable PdfPTable affidavitsTable byte b u
  • Itextsharp:导入页面时有没有办法复制链接?

    我正在开发一个项目 需要在显示 pdf 之前对其进行编辑 I need 添加水印 编辑权限 锁定以避免 复制 粘贴 和 另存为 编辑观众偏好 我做到了 并且工作正常 除了一件事 原始文件中的链接在新文件中不起作用 有什么想法吗 注意 实际上
  • 使用 iTExtsharp 将表格添加到现有 PDF 中

    我有一个 PDF 其中有一个表格是动态的 我想在现有 PDF 中动态地将下面的另一个表格添加到该表格中 有什么方法可以在现有 PDF 中的特定位置添加表格 现有表格 不在文档末尾 已完成 然后我想添加我的表格 我该如何添加 请给我推荐一些好
  • 通过复制另一个 pdf 中的数据来创建新 pdf

    我有一个 pdf 文件 其中包含一些内容 它实际上是一个模板 我已设法从 pdf 中读取内容并根据要求进行更改并将其保存在字符串变量中 现在我必须创建一个新的 pdf 文件 该文件将进行更改 并且初始模板文件不会更改 为了提高透明度 我附上
  • iText5.1.0在文档中设置页眉和页脚[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在使用 servlet 来查看
  • 如何找出当前页面上的光标位置?

    我向页面添加了一堆内容 例如document add p 然后我使用文档添加一个填充两列的表格here http itextpdf com examples iia php id 91 在这个过程中 我使用 column setSimple
  • PDF 页面的原点 (x,y) 在哪里?

    我在用iText创造我的PDF files 我想使用我在这里找到的方法将文本放置在文档中的某个特定位置 itext 绝对定位文本 https stackoverflow com questions 1625455 itext positio
  • 使用 iTextSharp 压缩 PDF [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在尝试重新压缩已创建的pdf 我正在尝试找到一种方法来重新压缩文档中的图像 以减小文件大小 我一直在尝试使用 DataLogi
  • TextRenderInfo 在 iTextSharp 中如何工作?

    我从网上得到了一些代码 他们为我提供了字体大小 我不明白 TextRenderInfo 如何读取文本 我尝试使用 renderInfo GetText 它给出随机数量的字符 有时是 3 个字符 有时是 2 个字符或更多或更少 我需要知道 r
  • 使用 iText 段落之间的图像

    我正在使用 iText 生成自定义 pdf 文档 我尝试了很多 但无法获得包含图像的文本的所需设计 我需要如下所示的输出 我尝试过 Chunk 类和 Paragraph 类 但我无法获得所需的结果 有任何想法吗 你有 至少 两个选择 Use
  • iText 设置加密错误

    我最近不得不升级到 iText 但在让 setEncryption 工作时遇到问题 我正在使用 iText 5 5 6 document new Document PageSize LETTER 36 36 72 72 writer Pdf
  • pdfptable的不可见边框

    我正在使用 iText 库在 Java 中生成 pdf 文件 我正在 pdfptable 中写入数据 如何使表格边框不可见 PdfPTable 的边框元素由添加到表中的 PdfPCell 定义 每个单元格都有自己的样式 格式 这是 API
  • 代码未在我的 PDF 中绘制水平线

    I m trying to add a horizontal line on top to divide the header text from the actual values in my pdf file 这是我的代码 public
  • 如何在 iText 中获取新页面

    去新页面有点问题pdfContentByte 我使用下面的代码将数据放在第一页之后到下一页 但不幸的是iText不生成新页面 step1 itextDocument new com itextpdf text Document PageSi
  • 无法将 iTextSharp 与 ASP.NET 5 Core 一起使用

    我正在尝试将 iTextSharp 与 ASP NET 5 Core 一起使用 但是 当我尝试使用 iTextSharp 5 5 5 构建 ASP NET 应用程序时 出现这些错误 Code using Microsoft AspNet M
  • 将隐藏(生物识别)数据附加到 pdf 上的数字签名

    我想知道是否可以使用 iText 我用于签名 或 Java 中的其他工具在 pdf 上添加生物识别数据 我会更好地解释一下 在手写板上签名时 我会收集签名信息 例如笔压 签名速度等 我想将这些信息 java中的变量 与pdf上的签名一起存储
  • 在 Android 中使用 iText 将图像添加到特定位置

    我想使用 Android 中的 iText 将图像添加到 PDF 文件中的特定位置 这是一个可填写的表单 我添加了作为图像占位符的文本框 我想要做的就是像这样获取该文本框和图像 public class FormFill public st
  • 是否有一种直接的方法可以使用 iTextSharp 将一个 PDF 文档附加到另一个 PDF 文档?

    我在网上搜索了有关如何执行此操作的示例 我发现有些人似乎比他们需要的更多地参与其中 所以我的问题是 使用 iTextSharp 是否有一种相当简洁的方法将一个 PDF 文档附加到另一个 PDF 文档 最好这不会涉及第三个文件 只需打开第一个
  • 使用 iTextSharp 生成 QR 条形码

    我有一个值数组 arr 0 Sam arr 1 1452 arr 2 NY 我想用这些值生成 QR 条形码 我们正在使用 ITextSharp 任何帮助将不胜感激 我正在使用vb net 以下是如何使用 iText 创建条形码的一些示例 h
  • 使用itext java库复制时pdf文件大小大大增加

    我正在尝试使用 Java 中的 itextpdf 库将现有的 pdf 文件复制到一些新文件中 我使用的是 itextpdf 5 5 10 版本 我在两种方式上都面临着不同的问题 PDFStamper 和 PdfCopy 当我使用 PDFSt

随机推荐