Как форматировать значения даты и времени при использовании форм itextpdf

#java #pdf #itext #acrobat

Вопрос:

Мы используем iTextPDF для создания отчета в формате PDF. Он начинается с формы PDF в качестве шаблона. Мы заполняем его данными JSON. У меня есть поля даты и поля времени в форме, несколько полей даты и времени. В JSON дата отформатирована как гггг-ММ-дд, а время-как 24 часа, ЧЧ:мм. Я хочу отобразить дату в PDF в формате ММ/дд/гггг, а время-в 12-часовом формате.

Как я могу выполнить вычисление или что-то подобное для значений, передаваемых в форму? Мой JSON выглядит так:

         "F_Backing1_Week": "1",
        "F_Backing1_Date": "2021-11-09",
        "F_Backing1_Time": "02:00",
        "F_Backing2_Week": "1",
        "F_Backing2_Date": "2021-11-09",
        "F_Backing2_Time": "04:30",
 

Моя форма акробата настроена так:

введите описание изображения здесь

Мой Java — код, который создает PDF-файл:

 public PdfObject makePDFFromJson(String templatePath, String pdfName, String json) throws IOException {

    PdfObject pdfObject = new PdfObject();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    InputStream stream = this.getClass().getClassLoader().getResourceAsStream(templatePath);
    
    PdfWriter writer = new PdfWriter(out);
    writer.setCompressionLevel(9);
    
    PdfDocument pdf = new PdfDocument(new PdfReader(stream), writer);
    PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
    Map<String, PdfFormField> fields = form.getFormFields();
    
    Gson gson = new GsonBuilder().create();
    Map<String, String> jsonMap = gson.fromJson(json, Map.class);
    for(Map.Entry<String,String> entry : jsonMap.entrySet()){           
        if(fields.containsKey(entry.getKey())) {
            logger.debug(entry.getValue());
            if(entry.getValue().contains("data:image/png;base64")) {
                logger.debug("found an image!");
                fields.get(entry.getKey()).setValue(entry.getValue().split(",")[1]);
            } else {
                fields.get(entry.getKey()).setValue(entry.getValue());
            }
        }
    }
    
    form.flattenFields();
    pdf.close();

    pdfObject.setPdfBytes(out.toByteArray());
    out.close();
    pdfObject.setPdfName(pdfName);
    return pdfObject;
}
 

Как я могу отформатировать эти значения?

Комментарии:

1. Для iText эти поля, по сути, являются полями обычного текста. Если вы хотите отобразить содержимое в специальном формате, вам необходимо соответствующим образом отформатировать строку и установить эту отформатированную строку в качестве значения поля.

2. Есть ли какой-либо способ форматирования из Acrobat? или он просто возьмет любую веревочку, которую я в него брошу?

3. На самом деле это зависит от обстоятельств. Обычно вы можете бросить в него что угодно, используя itext. Но после открытия формы может быть запущен какой-то Javascript, который переформатирует значения всех полей.