使用Apache PDFBox读/写日期值

时间:2018-03-22 06:54:54

标签: java apache pdf pdfbox

我对apache pdfbox的读/写日期值有一些疑问。

  1. 如何识别字段是日期字段(期望日期值)?

  2. 是否可以阅读pdf字段的格式(例如dd / mm / yyyy)?我发现没办法做到这一点。我在字段的COSDictionary中看到了格式,但它是javascript调用的一部分。

  3. 如何正确设置日期字段的值?

  4. 非常感谢提前。

1 个答案:

答案 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 日期格式。