📄 pdfacroform.java
字号:
addFormField(field); return field; } public void setTextFieldParams(PdfFormField field, String text, String name, float llx, float lly, float urx, float ury) { field.setWidget(new Rectangle(llx, lly, urx, ury), PdfAnnotation.HIGHLIGHT_INVERT); field.setValueAsString(text); field.setDefaultValueAsString(text); field.setFieldName(name); field.setFlags(PdfAnnotation.FLAGS_PRINT); field.setPage(); } public void drawSingleLineOfText(PdfFormField field, String text, BaseFont font, float fontSize, float llx, float lly, float urx, float ury) { PdfContentByte da = new PdfContentByte(writer); da.setFontAndSize(font, fontSize); da.resetRGBColorFill(); field.setDefaultAppearanceString(da); PdfContentByte cb = writer.getDirectContent(); cb.moveTo(0, 0); PdfAppearance tp = cb.createAppearance(urx - llx, ury - lly); tp.drawTextField(0f, 0f, urx - llx, ury - lly); tp.beginVariableText(); tp.saveState(); tp.rectangle(3f, 3f, urx - llx - 6f, ury - lly - 6f); tp.clip(); tp.newPath(); tp.beginText(); tp.setFontAndSize(font, fontSize); tp.resetRGBColorFill(); tp.setTextMatrix(4, (ury - lly) / 2 - (fontSize * 0.3f)); tp.showText(text); tp.endText(); tp.restoreState(); tp.endVariableText(); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp); } public void drawMultiLineOfText(PdfFormField field, String text, BaseFont font, float fontSize, float llx, float lly, float urx, float ury) { PdfContentByte da = new PdfContentByte(writer); da.setFontAndSize(font, fontSize); da.resetRGBColorFill(); field.setDefaultAppearanceString(da); PdfContentByte cb = writer.getDirectContent(); cb.moveTo(0, 0); PdfAppearance tp = cb.createAppearance(urx - llx, ury - lly); tp.drawTextField(0f, 0f, urx - llx, ury - lly); tp.beginVariableText(); tp.saveState(); tp.rectangle(3f, 3f, urx - llx - 6f, ury - lly - 6f); tp.clip(); tp.newPath(); tp.beginText(); tp.setFontAndSize(font, fontSize); tp.resetRGBColorFill(); tp.setTextMatrix(4, 5); java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(text, "\n"); float yPos = ury - lly; while (tokenizer.hasMoreTokens()) { yPos -= fontSize * 1.2f; tp.showTextAligned(PdfContentByte.ALIGN_LEFT, tokenizer.nextToken(), 3, yPos, 0); } tp.endText(); tp.restoreState(); tp.endVariableText(); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, tp); } public PdfFormField addCheckBox(String name, String value, boolean status, float llx, float lly, float urx, float ury) { PdfFormField field = PdfFormField.createCheckBox(writer); setCheckBoxParams(field, name, value, status, llx, lly, urx, ury); drawCheckBoxAppearences(field, value, llx, lly, urx, ury); addFormField(field); return field; } public void setCheckBoxParams(PdfFormField field, String name, String value, boolean status, float llx, float lly, float urx, float ury) { field.setWidget(new Rectangle(llx, lly, urx, ury), PdfAnnotation.HIGHLIGHT_TOGGLE); field.setFieldName(name); if (status) { field.setValueAsName(value); field.setAppearanceState(value); } else { field.setValueAsName("Off"); field.setAppearanceState("Off"); } field.setFlags(PdfAnnotation.FLAGS_PRINT); field.setPage(); field.setBorderStyle(new PdfBorderDictionary(1, PdfBorderDictionary.STYLE_SOLID)); } public void drawCheckBoxAppearences(PdfFormField field, String value, float llx, float lly, float urx, float ury) { BaseFont font = null; try { font = BaseFont.createFont(BaseFont.ZAPFDINGBATS, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED); } catch(Exception e) { throw new ExceptionConverter(e); } float size = (ury - lly); PdfContentByte da = new PdfContentByte(writer); da.setFontAndSize(font, size); da.resetRGBColorFill(); field.setDefaultAppearanceString(da); PdfContentByte cb = writer.getDirectContent(); cb.moveTo(0, 0); PdfAppearance tpOn = cb.createAppearance(urx - llx, ury - lly); tpOn.drawTextField(0f, 0f, urx - llx, ury - lly); tpOn.saveState(); tpOn.resetRGBColorFill(); tpOn.beginText(); tpOn.setFontAndSize(font, size); tpOn.showTextAligned(PdfContentByte.ALIGN_CENTER, "4", (urx - llx) / 2, (ury - lly) / 2 - (size * 0.3f), 0); tpOn.endText(); tpOn.restoreState(); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, value, tpOn); PdfAppearance tpOff = cb.createAppearance(urx - llx, ury - lly); tpOff.drawTextField(0f, 0f, urx - llx, ury - lly); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, "Off", tpOff); } public PdfFormField getRadioGroup(String name, String defaultValue, boolean noToggleToOff) { PdfFormField radio = PdfFormField.createRadioButton(writer, noToggleToOff); radio.setFieldName(name); radio.setValueAsName(defaultValue); return radio; } public void addRadioGroup(PdfFormField radiogroup) { addFormField(radiogroup); } public PdfFormField addRadioButton(PdfFormField radiogroup, String value, float llx, float lly, float urx, float ury) { PdfFormField radio = PdfFormField.createEmpty(writer); radio.setWidget(new Rectangle(llx, lly, urx, ury), PdfAnnotation.HIGHLIGHT_TOGGLE); String name = ((PdfName)radiogroup.get(PdfName.V)).toString().substring(1); if (name.equals(value)) { radio.setAppearanceState(value); } else { radio.setAppearanceState("Off"); } drawRadioAppearences(radio, value, llx, lly, urx, ury); radiogroup.addKid(radio); return radio; } public void drawRadioAppearences(PdfFormField field, String value, float llx, float lly, float urx, float ury) { PdfContentByte cb = writer.getDirectContent(); cb.moveTo(0, 0); PdfAppearance tpOn = cb.createAppearance(urx - llx, ury - lly); tpOn.drawRadioField(0f, 0f, urx - llx, ury - lly, true); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, value, tpOn); PdfAppearance tpOff = cb.createAppearance(urx - llx, ury - lly); tpOff.drawRadioField(0f, 0f, urx - llx, ury - lly, false); field.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, "Off", tpOff); } public PdfFormField addSelectList(String name, String[] options, String defaultValue, BaseFont font, float fontSize, float llx, float lly, float urx, float ury) { PdfFormField choice = PdfFormField.createList(writer, options, 0); setChoiceParams(choice, name, defaultValue, llx, lly, urx, ury); StringBuffer text = new StringBuffer(); for (int i = 0; i < options.length; i++) { text.append(options[i]).append("\n"); } drawMultiLineOfText(choice, text.toString(), font, fontSize, llx, lly, urx, ury); addFormField(choice); return choice; } public PdfFormField addSelectList(String name, String[][] options, String defaultValue, BaseFont font, float fontSize, float llx, float lly, float urx, float ury) { PdfFormField choice = PdfFormField.createList(writer, options, 0); setChoiceParams(choice, name, defaultValue, llx, lly, urx, ury); StringBuffer text = new StringBuffer(); for (int i = 0; i < options.length; i++) { text.append(options[i][1]).append("\n"); } drawMultiLineOfText(choice, text.toString(), font, fontSize, llx, lly, urx, ury); addFormField(choice); return choice; } public PdfFormField addComboBox(String name, String[] options, String defaultValue, boolean editable, BaseFont font, float fontSize, float llx, float lly, float urx, float ury) { PdfFormField choice = PdfFormField.createCombo(writer, editable, options, 0); setChoiceParams(choice, name, defaultValue, llx, lly, urx, ury); if (defaultValue == null) { defaultValue = options[0]; } drawSingleLineOfText(choice, defaultValue, font, fontSize, llx, lly, urx, ury); addFormField(choice); return choice; } public PdfFormField addComboBox(String name, String[][] options, String defaultValue, boolean editable, BaseFont font, float fontSize, float llx, float lly, float urx, float ury) { PdfFormField choice = PdfFormField.createCombo(writer, editable, options, 0); setChoiceParams(choice, name, defaultValue, llx, lly, urx, ury); String value = null; for (int i = 0; i < options.length; i++) { if (options[i][0].equals(defaultValue)) { value = options[i][1]; break; } } if (value == null) { value = options[0][1]; } drawSingleLineOfText(choice, value, font, fontSize, llx, lly, urx, ury); addFormField(choice); return choice; } public void setChoiceParams(PdfFormField field, String name, String defaultValue, float llx, float lly, float urx, float ury) { field.setWidget(new Rectangle(llx, lly, urx, ury), PdfAnnotation.HIGHLIGHT_INVERT); if (defaultValue != null) { field.setValueAsString(defaultValue); field.setDefaultValueAsString(defaultValue); } field.setFieldName(name); field.setFlags(PdfAnnotation.FLAGS_PRINT); field.setPage(); field.setBorderStyle(new PdfBorderDictionary(2, PdfBorderDictionary.STYLE_SOLID)); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -