Java PDF Stamper пишет ниже флажка (текст закрыт флажком)

Я пытаюсь записать в существующий pdf-файл с помощью штампа java pdf, но по какой-то причине в pdf-файле есть определенный флажок, под которым отображается текст.

Код для чтения pdf:

PdfReader reader = new PdfReader(Testing.getImagePath() + "form.pdf");
File dir = new File(Testing.getResourcePath() + id + "/");
String destination = Testing.getResourcePath() + id + "form" + id + ".pdf";
File exist = new File(destination);

dir.mkdirs();
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destination));
stamper.setFormFlattening(true);
PdfContentByte over;
over = stamper.getOverContent(1);

Код для рисования текста:

over.beginText();
over.setFontAndSize(bf, 11);
over.setTextMatrix(169, 322);
over.showText("X");
over.endText();

person King    schedule 26.05.2017    source источник
comment
Откуда ты переберешься?   -  person Jan    schedule 26.05.2017
comment
Обновленный код. Дайте мне знать, если мне нужно добавить какой-либо другой код.   -  person King    schedule 26.05.2017
comment
хорошо выглядит до сих пор. Размещение X в месте флажка (только он появляется под) звучит так, как будто вы хотите ВЫБРАТЬ этот флажок?   -  person Jan    schedule 26.05.2017
comment
Да, цель состоит в том, чтобы заполнить существующий PDF-файл, и я хочу установить флажок, но единственный способ, которым я знаю, как это сделать, — закрыть его крестиком.   -  person King    schedule 26.05.2017
comment
Форма AcroFields =stamper.getAcroFields(); твой друг для этого   -  person Jan    schedule 26.05.2017
comment
Позволит ли это мне установить флажок, если да, то как я могу ссылаться на определенные флажки через код?   -  person King    schedule 26.05.2017
comment
да, он видит ответ :-)   -  person Jan    schedule 26.05.2017


Ответы (1)


Прежде всего:

Переберите поля формы в вашем PDF-файле и найдите допустимые значения для установки:

        AcroFields form = stamper.getAcroFields();
        for(Entry<String, Item> field : form.getFields().entrySet()) {
            System.out.println(field.getKey() + ": " + field.getValue());
            String[] values = form.getAppearanceStates(field.getKey());
            StringJoiner sb = new StringJoiner(",");
            for (String value : values) {
                sb.add(value);
            }
            System.out.println("Possible Options: " + sb.toString());
        }

Теперь вы сможете установить флажок, установив его допустимое значение:

        form.setField("myCheckbox", "myYesValue");
person Jan    schedule 26.05.2017
comment
Откуда вы взяли свои AcroFields? От Stamper / автора или от читателя (в этом случае они будут доступны только для чтения). Поделитесь кодом в редактировании вашего вопроса? - person Jan; 26.05.2017
comment
да, я использовал другой код для вывода идентификаторов из pdf и читал из ридера, а не из штампа. Получил работу, Спасибо! - person King; 26.05.2017