CheckBox 不是由 Adobe 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. Adobe 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);
但这会为所有外观设置边框,包括 On
和 Off
。如果您只想为 Off
外观绘制边框,您应该创建自定义外观并使用 PdfFormField#setAppearance
.
P.S。请分别提问。你问的三个问题是不同的。
我在使用 AcroForm CheckBox 时遇到了一些非常大的问题。
1. Adobe Reader DC 不打印 CheckBox(处于选中状态)。即使在设置了相应的 FieldFlag 之后。也许这是因为我的电脑上没有 ZapfDingsbats 字体?
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);
但这会为所有外观设置边框,包括 On
和 Off
。如果您只想为 Off
外观绘制边框,您应该创建自定义外观并使用 PdfFormField#setAppearance
.
P.S。请分别提问。你问的三个问题是不同的。