CheckBox 不是由 Adob​​e Reader DC 打印的 - iText 7.1.0 for Java

CheckBox is not printed by Adobe Reader DC - iText 7.1.0 for Java

我在使用 AcroForm CheckBox 时遇到了一些非常大的问题。

1. Adob​​e Reader DC 不打印 CheckBox(处于选中状态)。即使在设置了相应的 FieldFlag 之后。也许这是因为我的电脑上没有 ZapfDingsbats 字体? 2.如何为复选框的不同外观使用的所有符号(On/Off状态)更改此字体(我想使用Wingdings)?
3. 最后但同样重要的是:如何在未选中的复选框周围绘制边框?

非常感谢您的每一个提示和帮助!

package jumpstart;

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;

import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfButtonFormField;
import com.itextpdf.forms.fields.PdfFormField;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;

public class Problem6 {

    public static void main(String[] args) throws IOException {
        PdfWriter writer = new PdfWriter("problem6.pdf");
        PdfDocument pdf = new PdfDocument(writer);
        PdfPage page = pdf.addNewPage();
        PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
        PdfButtonFormField checkBox = PdfFormField.createCheckBox(pdf, new Rectangle(75, 750, 20, 20), "cbName1", "On",
                PdfFormField.TYPE_CROSS);
        // checkBox.setFieldFlag(PdfAnnotation.PRINT);
        form.addField(checkBox, page);
        pdf.close();
        Desktop.getDesktop().open(new File("problem6.pdf"));
    }

}

第 1 部分。要使 PdfFormField 可打印,您应该使用以下方法:

checkBox.setVisibility(PdfFormField.VISIBLE);

第 2 部分。在您的特定情况下,复选框的外观是使用 canvas 指令绘制的,而不是任何字体。这是如何完成的:

q
Q
0 20 m
20 0 l
20 20 m
0 0 l
S

第 3 部分。如您所见,没有使用字体,十字是用线条绘制的。 因此,不容易使用不同的字体。您可以创建自己的外观流并通过 PdfFormField#setAppearance 进行设置。但是你必须非常小心并且知道你在做什么。

您可以使用这些行设置字段边框:

checkBox.setBorderWidth(1);
checkBox.setBorderColor(ColorConstants.BLACK);

但这会为所有外观设置边框,包括 OnOff。如果您只想为 Off 外观绘制边框,您应该创建自定义外观并使用 PdfFormField#setAppearance.

P.S。请分别提问。你问的三个问题是不同的。