CheckBox不是由Adobe Reader DC打印的 - iText 7.1.0 for Java

时间:2018-01-18 09:47:23

标签: itext7

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

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

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

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 个答案:

答案 0 :(得分:2)

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

checkBox.setVisibility(PdfFormField.VISIBLE);

第2部分。在您的特定情况下,复选框的外观使用画布说明绘制,而不是任何字体。这就是它的完成方式:

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 即可。请另外提问。你问的三个问题是不同的。