代码之家  ›  专栏  ›  技术社区  ›  Dirk Kampfmeier

Adobe Reader DC-iText 7.1.0 for Java未打印复选框

  •  1
  • Dirk Kampfmeier  · 技术社区  · 8 年前

    我对AcroForm CheckBox有一些非常大的问题。

    1、Adobe Reader DC未打印复选框(处于选中状态)。即使设置了相应的FieldFlag。也许这是因为我的电脑上没有字体ZapfDingsbats? Adobe Reader Preview 2、如何更改复选框不同外观使用的所有符号(开/关状态)的字体(我想使用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 回复  |  直到 8 年前
        1
  •  2
  •   Alexey Subach    8 年前

    第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);
    

    但这将为所有外观设置边界,包括 On Off . 如果希望仅为绘制边框 外观,您应该创建自定义外观并使用 PdfFormField#设置外观 .

    . 请单独提问。你问的三个问题是不同的。

    推荐文章