我对apache pdfbox的读/写日期值有一些疑问。
如何识别字段是日期字段(期望日期值)?
是否可以阅读pdf字段的格式(例如dd / mm / yyyy)?我发现没办法做到这一点。我在字段的COSDictionary中看到了格式,但它是javascript调用的一部分。
如何正确设置日期字段的值?
非常感谢提前。
答案 0 :(得分:0)
正如 mkl 所指出的,字段格式由 JavaScript 代码定义。我能够获得与其关联的格式的方式如下:
String js = Optional.ofNullable(acroForm.getField(fieldName)).map(PDField::getCOSObject)
// Additional-actions dictionary. Defining the actions to be taken in response to various trigger events.
.map(d -> (COSDictionary) d.getDictionaryObject(COSName.AA))
// F dictionary. A JavaScript action to be performed before the field is formatted to display its current value.
.map(d -> (COSDictionary) d.getDictionaryObject(COSName.F))
// JS string. A string or stream containing the JavaScript script to be executed.
.map(d -> d.getString(COSName.JS))
.orElse(null);
Matcher m = Pattern.compile("AFDate_FormatEx\\s*\\(([^)]*)\\)").matcher(js);
m.find();
String dateFormat = m.group(1);
然后需要对其进行解析,因为 PDF 日期格式不等于 Java 日期格式。