【问题标题】:How to calculate the actual font size of an auto-font-sized PDF field?如何计算自动字体大小 PDF 字段的实际字体大小?
【发布时间】:2021-03-07 19:57:07
【问题描述】:

我试图弄清楚如何计算用于 PDF acro 字段的实际字体大小,只要其字体大小设置为 0(自动)。例如,“/ZaDb 0 Tf”。

目前,我正在使用 ActivePDF 工具包来解析 PDF,但我希望从该工具包转移到 iTextSharp LGPL 4.1.6 或 PdfSharp。我需要移植的最后一个功能是为自动调整大小的字段计算字体大小。 ActivePDF 可以方便地使用自动调整字段的计算大小填充 FieldInfo.FontSize 属性,但到目前为止,我还没有成功弄清楚 ActivePDF 工具包是如何为这些类型的字段执行计算的。

根据 PDF 规范,“大小为零表示字体应自动调整大小:它的大小 应作为注释矩形高度的函数来计算。”这是该语句的后半部分,我在几天的时间里一直在试图弄清楚。我尝试使用注释矩形的大小作为在规范中声明,使用与字段的外观状态相关联的边界框,以及我能想到的所有其他内容。有时我得到与 ActivePDF 相同的结果,有时我没有。

对此的任何指导将不胜感激!我试图让它适用于所有交互式字段类型(按钮、文本、选择、签名)。

【问题讨论】:

  • 正如您自己发现的那样,这里的规范并不是特别清楚。因此,没有单一的正确方法来计算大小。许多库尝试在 Adob​​e Reader 中模拟计算,为此需要进行大量的试验和错误。
  • @mkl - 啊!很有意思!这让我非常生气,我可以发誓我在规格中遗漏了一些东西。既然是这样,现在就更有意义了!非常感谢您抽出宝贵时间回复!!你只是为我节省了无数小时的进一步挣扎!

标签: pdf itext pdfsharp


【解决方案1】:

根据@mkl 的回复,这个问题没有一个正确 答案。字体大小只能是近似值。

对于遇到此问题的其他人,我建议查看 iTextSharp LGPL 4.1.6 代码库以了解此类逻辑(特别是 BaseField上的 GetAppearance 方法> 类)。

【讨论】:

    【解决方案2】:

    我不知道 zapfdingbats 是不是最好的例子(因为它用于复选框的复选标记)。

    我们实现了自己的 PDF 编辑器,对于文本字段,我们使用了类似的方法:获取表单字段的尺寸减去一些填充(例如 2-5 像素),然后使用表单字段中指定的字体并增加高度直到它“命中”表单域坐标的边界(-padding)。我们将这个值“向下”四舍五入到下一个完整数字。然后我们使用这个字体大小来显示文本。 (注:这是简化版……)

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 2015-03-17
      • 2012-03-08
      • 2016-09-01
      • 2011-03-30
      相关资源
      最近更新 更多