【发布时间】:2019-07-08 15:25:25
【问题描述】:
我正在使用 Apache PDFBox 在 PDF 文档上配置 PDTextField,我使用以下方法将 Lato 加载到文档中:
font = PDType0Font.load(
@j_pd_document,
java.io.FileInputStream.new('/path/to/Lato-Regular.ttf')
) # => Lato-Regular
font_name = pd_default_resources.add(font).get_name # => F4
然后,我将 font_name 传递给 default_appearance_string 为 PDTextField,如下所示:
j_text_field.set_default_appearance("/#{font_name} 0 Tf 0 g") # where font_name is
# passed in from above
当我继续在PDTextField 上调用setValue 时,现在会出现问题。因为我将defaultAppearanceString 中的font_size 设置为0,根据库的example,文本应该自行缩放以适合文本框的给定区域。但是,对于某些字段,这种“缩放以适应”的行为是不一致的:它并不总是选择最大的字体大小来适应PDTextField。是否有任何进一步的配置可能允许这种情况发生?以下是我注意到发生此问题的 PDF。
未填充,已加载字体: http://www.filedropper.com/0postfontload
已填充,文本框文本大小不一致: http://www.filedropper.com/file_327
旁注:我通过jruby 使用PDFBox,这只是一个允许Ruby 调用Java 库的集成层。可用的库的所有 java 方法;像 thisExampleMethod 这样的 java 方法将一对一转换为 ruby this_example_method。
更新
针对cmets,第二个上传文件示例中出现的不正确的有:
- 第一页居民姓名字段(两个文本字段的文本对于给定的输入字段大小来说太小了)
- 第二页电话字段(四个文本字段的文本超出给定输入字段大小)
【问题讨论】:
-
很遗憾,您没有明确指出您认为哪些字段是错误的。我假设您的意思是 CARE PROVIDERS Address 字段,其中文字看起来太小了。问题是预先存在的表单外观已经是无用的了。如果已经存在预先存在的正常外观,PDFBox 会尝试重新使用它,以防您的文档导致这种损坏的外观。您应该在设置值之前删除以前的外观。如果您也认为其他字段不正确,请指出您所指的字段。
-
@mkl 感谢您的回复,我已经用不正确的字段更新了问题。
PDTextField上的setDefaultAppearance是否不会覆盖该字段的现有外观?您有推荐的方法来消除以前的外观吗? -
关于更新:ResidentName 字段 - 这里的问题又是由于最初存在的外观大小与场地。 Phone 字段 - 您的意思是只显示“T e”的字段?这些字段被配置为 MaxLen 值为
2的梳状字段。这恰当地解释了外观。 -
@mkl 有没有办法完全重置 PDField 的现有外观/行为而不涉及完全创建新字段?
-
有一种方法可以删除现有的外观流。但是这些旧的外观流只会导致您的部分问题,如上所述,某些字段是 2 个字符梳字段,而您希望它们完全不同。此外,您有许多带有多个小部件的字段。这些字段的所有小部件自动具有相同的值,这对您的表单没有多大意义(例如,这 2 个字符梳小部件中的 all 表示 相同的字段,但肯定是所有这些办公室、手机、寻呼机和传真号码不得重合)。