itext7学习笔记——第4章实践&example

x33g5p2x  于2021-12-28 转载在 其他  
字(14.0k)|赞(0)|评价(0)|浏览(507)

本章的例子,请参考我翻译的博文:itext7学习笔记——第4章,里面有详细的解释,有什么不懂得也可以评论或者私信我!

例子1:文本注释

在一个Paragraph之前添加最简单的文本注释,代码如下:

  1. /** * Created by ASUS on 2017/9/12. */
  2. import com.itextpdf.kernel.color.Color;
  3. import com.itextpdf.kernel.geom.Rectangle;
  4. import com.itextpdf.kernel.pdf.PdfDocument;
  5. import com.itextpdf.kernel.pdf.PdfString;
  6. import com.itextpdf.kernel.pdf.PdfWriter;
  7. import com.itextpdf.kernel.pdf.annot.PdfAnnotation;
  8. import com.itextpdf.kernel.pdf.annot.PdfTextAnnotation;
  9. import com.itextpdf.layout.Document;
  10. import com.itextpdf.layout.element.Paragraph;
  11. import java.io.File;
  12. import java.io.IOException;
  13. /** * Simple text annotation example. */
  14. public class C04E01_01_TextAnnotation {
  15. public static final String DEST = "results/chapter04/text_annotation.pdf";
  16. public static void main(String args[]) throws IOException {
  17. File file = new File(DEST);
  18. file.getParentFile().mkdirs();
  19. new C04E01_01_TextAnnotation().createPdf(DEST);
  20. }
  21. public void createPdf(String dest) throws IOException {
  22. //Initialize PDF document
  23. PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
  24. //Initialize document
  25. Document document = new Document(pdf);
  26. document.add(new Paragraph("The example of text annotation."));
  27. //Create text annotation
  28. PdfAnnotation ann = new PdfTextAnnotation(new Rectangle(20, 800, 0, 0))
  29. .setColor(Color.GREEN)
  30. .setTitle(new PdfString("iText"))
  31. .setContents("With iText, you can truly take your documentation needs to the next level.")
  32. .setOpen(true);
  33. pdf.getFirstPage().addAnnotation(ann);
  34. //Close document
  35. document.close();
  36. }
  37. }

例子2:链接注释

在”here”上面添加链接注释,并创建链接到itext官网,代码如下:

  1. /** * Created by ASUS on 2017/9/12. */
  2. import com.itextpdf.kernel.geom.Rectangle;
  3. import com.itextpdf.kernel.pdf.PdfDocument;
  4. import com.itextpdf.kernel.pdf.PdfWriter;
  5. import com.itextpdf.kernel.pdf.action.PdfAction;
  6. import com.itextpdf.kernel.pdf.annot.PdfLinkAnnotation;
  7. import com.itextpdf.layout.Document;
  8. import com.itextpdf.layout.element.Link;
  9. import com.itextpdf.layout.element.Paragraph;
  10. import java.io.File;
  11. import java.io.IOException;
  12. /** * Simple link annotation example. */
  13. public class C04E01_02_LinkAnnotation {
  14. public static final String DEST = "results/chapter04/link_annotation.pdf";
  15. public static void main(String args[]) throws IOException {
  16. File file = new File(DEST);
  17. file.getParentFile().mkdirs();
  18. new C04E01_02_LinkAnnotation().createPdf(DEST);
  19. }
  20. public void createPdf(String dest) throws IOException {
  21. //Initialize PDF document
  22. PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
  23. //Initialize document
  24. Document document = new Document(pdf);
  25. //Create link annotation
  26. PdfLinkAnnotation annotation = new PdfLinkAnnotation(new Rectangle(0, 0))
  27. .setAction(PdfAction.createURI("http://itextpdf.com/"));
  28. Link link = new Link("here", annotation);
  29. Paragraph p = new Paragraph("The example of link annotation. Click ")
  30. .add(link.setUnderline())
  31. .add(" to learn more...");
  32. document.add(p);
  33. //Close document
  34. document.close();
  35. }
  36. }

例子3:线注释

在一个pdf文档里面添加线注释,代码如下:

  1. /** * Created by ASUS on 2017/9/12. */
  2. import com.itextpdf.kernel.color.Color;
  3. import com.itextpdf.kernel.geom.Rectangle;
  4. import com.itextpdf.kernel.pdf.*;
  5. import com.itextpdf.kernel.pdf.annot.PdfAnnotation;
  6. import com.itextpdf.kernel.pdf.annot.PdfLineAnnotation;
  7. import java.io.File;
  8. import java.io.IOException;
  9. /** * Simple line annotation example. */
  10. public class C04E01_03_LineAnnotation {
  11. public static final String DEST = "results/chapter04/line_annotation.pdf";
  12. public static void main(String args[]) throws IOException {
  13. File file = new File(DEST);
  14. file.getParentFile().mkdirs();
  15. new C04E01_03_LineAnnotation().createPdf(DEST);
  16. }
  17. public void createPdf(String dest) throws IOException {
  18. //Initialize PDF document
  19. PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
  20. PdfPage page = pdf.addNewPage();
  21. PdfArray lineEndings = new PdfArray();
  22. lineEndings.add(new PdfName("Diamond"));
  23. lineEndings.add(new PdfName("Diamond"));
  24. //Create line annotation with inside caption
  25. PdfAnnotation annotation = new PdfLineAnnotation(
  26. new Rectangle(0, 0),
  27. new float[]{20, 790, page.getPageSize().getWidth() - 20, 790})
  28. .setLineEndingStyles((lineEndings))
  29. .setContentsAsCaption(true)
  30. .setTitle(new PdfString("iText"))
  31. .setContents("The example of line annotation")
  32. .setColor(Color.BLUE);
  33. page.addAnnotation(annotation);
  34. //Close document
  35. pdf.close();
  36. }
  37. }

例子4:标记注释

在pdf里面创建标记注释,代码如下

  1. /** * Created by ASUS on 2017/9/12. */
  2. import com.itextpdf.kernel.color.Color;
  3. import com.itextpdf.kernel.geom.Rectangle;
  4. import com.itextpdf.kernel.pdf.PdfArray;
  5. import com.itextpdf.kernel.pdf.PdfDocument;
  6. import com.itextpdf.kernel.pdf.PdfString;
  7. import com.itextpdf.kernel.pdf.PdfWriter;
  8. import com.itextpdf.kernel.pdf.annot.PdfAnnotation;
  9. import com.itextpdf.kernel.pdf.annot.PdfTextMarkupAnnotation;
  10. import com.itextpdf.layout.Document;
  11. import com.itextpdf.layout.element.Paragraph;
  12. import com.itextpdf.layout.property.TextAlignment;
  13. import com.itextpdf.layout.property.VerticalAlignment;
  14. import java.io.File;
  15. import java.io.IOException;
  16. /** * Simple text markup annotation example. */
  17. public class C04E01_04_TextMarkupAnnotation {
  18. public static final String DEST = "results/chapter04/textmarkup_annotation.pdf";
  19. public static void main(String args[]) throws IOException {
  20. File file = new File(DEST);
  21. file.getParentFile().mkdirs();
  22. new C04E01_04_TextMarkupAnnotation().createPdf(DEST);
  23. }
  24. public void createPdf(String dest) throws IOException {
  25. //Initialize PDF document
  26. PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
  27. //Initialize document
  28. Document document = new Document(pdf);
  29. Paragraph p = new Paragraph("The example of text markup annotation.");
  30. document.showTextAligned(p, 20, 795, 1, TextAlignment.LEFT,
  31. VerticalAlignment.MIDDLE, 0);
  32. //Create text markup annotation
  33. PdfAnnotation ann = PdfTextMarkupAnnotation.createHighLight(new Rectangle(105, 790, 64, 10),
  34. new float[]{169, 790, 105, 790, 169, 800, 105, 800})
  35. .setColor(Color.YELLOW)
  36. .setTitle(new PdfString("Hello!"))
  37. .setContents(new PdfString("I'm a popup."))
  38. .setTitle(new PdfString("iText"))
  39. .setOpen(true)
  40. .setRectangle(new PdfArray(new float[]{100, 600, 200, 100}));
  41. pdf.getFirstPage().addAnnotation(ann);
  42. //Close document
  43. document.close();
  44. }
  45. }

例子5:创建表单

在pdf里面创建工作信息表单,代码如下:

  1. /** * Created by ASUS on 2017/9/12. */
  2. import com.itextpdf.forms.PdfAcroForm;
  3. import com.itextpdf.forms.fields.PdfButtonFormField;
  4. import com.itextpdf.forms.fields.PdfChoiceFormField;
  5. import com.itextpdf.forms.fields.PdfFormField;
  6. import com.itextpdf.forms.fields.PdfTextFormField;
  7. import com.itextpdf.kernel.geom.PageSize;
  8. import com.itextpdf.kernel.geom.Rectangle;
  9. import com.itextpdf.kernel.pdf.PdfDocument;
  10. import com.itextpdf.kernel.pdf.PdfWriter;
  11. import com.itextpdf.kernel.pdf.action.PdfAction;
  12. import com.itextpdf.layout.Document;
  13. import com.itextpdf.layout.element.Paragraph;
  14. import com.itextpdf.layout.property.TextAlignment;
  15. import java.io.File;
  16. import java.io.IOException;
  17. /** * Simple widget annotation example. */
  18. public class C04E02_JobApplication {
  19. public static final String DEST = "results/chapter04/job_application.pdf";
  20. public static void main(String args[]) throws IOException {
  21. File file = new File(DEST);
  22. file.getParentFile().mkdirs();
  23. new C04E02_JobApplication().createPdf(DEST);
  24. }
  25. public void createPdf(String dest) throws IOException {
  26. //Initialize PDF document
  27. PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
  28. PageSize ps = PageSize.A4;
  29. pdf.setDefaultPageSize(ps);
  30. // Initialize document
  31. Document document = new Document(pdf);
  32. C04E02_JobApplication.addAcroForm(document);
  33. //Close document
  34. document.close();
  35. }
  36. public static PdfAcroForm addAcroForm(Document doc) {
  37. Paragraph title = new Paragraph("Application for employment")
  38. .setTextAlignment(TextAlignment.CENTER)
  39. .setFontSize(16);
  40. doc.add(title);
  41. doc.add(new Paragraph("Full name:").setFontSize(12));
  42. doc.add(new Paragraph("Native language: English French German Russian Spanish").setFontSize(12));
  43. doc.add(new Paragraph("Experience in: cooking driving software development").setFontSize(12));
  44. doc.add(new Paragraph("Preferred working shift:").setFontSize(12));
  45. doc.add(new Paragraph("Additional information:").setFontSize(12));
  46. //Add acroform
  47. PdfAcroForm form = PdfAcroForm.getAcroForm(doc.getPdfDocument(), true);
  48. //Create text field
  49. PdfTextFormField nameField = PdfTextFormField.createText(doc.getPdfDocument(),
  50. new Rectangle(99, 753, 425, 15), "name", "");
  51. form.addField(nameField);
  52. //Create radio buttons
  53. PdfButtonFormField group = PdfFormField.createRadioGroup(doc.getPdfDocument(), "language", "");
  54. PdfFormField.createRadioButton(doc.getPdfDocument(), new Rectangle(130, 728, 15, 15), group, "English");
  55. PdfFormField.createRadioButton(doc.getPdfDocument(), new Rectangle(200, 728, 15, 15), group, "French");
  56. PdfFormField.createRadioButton(doc.getPdfDocument(), new Rectangle(260, 728, 15, 15), group, "German");
  57. PdfFormField.createRadioButton(doc.getPdfDocument(), new Rectangle(330, 728, 15, 15), group, "Russian");
  58. PdfFormField.createRadioButton(doc.getPdfDocument(), new Rectangle(400, 728, 15, 15), group, "Spanish");
  59. form.addField(group);
  60. //Create checkboxes
  61. for (int i = 0; i < 3; i++) {
  62. PdfButtonFormField checkField = PdfFormField.createCheckBox(doc.getPdfDocument(), new Rectangle(119 + i * 69, 701, 15, 15),
  63. "experience".concat(String.valueOf(i+1)), "Off", PdfFormField.TYPE_CHECK);
  64. form.addField(checkField);
  65. }
  66. //Create combobox
  67. String[] options = {"Any", "6.30 am - 2.30 pm", "1.30 pm - 9.30 pm"};
  68. PdfChoiceFormField choiceField = PdfFormField.createComboBox(doc.getPdfDocument(), new Rectangle(163, 676, 115, 15),
  69. "shift", "Any", options);
  70. form.addField(choiceField);
  71. //Create multiline text field
  72. PdfTextFormField infoField = PdfTextFormField.createMultilineText(doc.getPdfDocument(),
  73. new Rectangle(158, 625, 366, 40), "info", "");
  74. form.addField(infoField);
  75. //Create push button field
  76. PdfButtonFormField button = PdfFormField.createPushButton(doc.getPdfDocument(),
  77. new Rectangle(479, 594, 45, 15), "reset", "RESET");
  78. button.setAction(PdfAction.createResetForm(new String[] {"name", "language", "experience1", "experience2", "experience3", "shift", "info"}, 0));
  79. form.addField(button);
  80. return form;
  81. }
  82. }

例子6:填充表单

创建完表单以后,填充表单内容,代码如下:

  1. /** * Created by ASUS on 2017/9/12. */
  2. import com.itextpdf.forms.PdfAcroForm;
  3. import com.itextpdf.forms.fields.PdfFormField;
  4. import com.itextpdf.kernel.pdf.PdfDocument;
  5. import com.itextpdf.kernel.pdf.PdfWriter;
  6. import com.itextpdf.layout.Document;
  7. import java.io.File;
  8. import java.io.IOException;
  9. import java.util.Map;
  10. /** * Simple filling out form example. */
  11. public class C04E03_CreateAndFill {
  12. public static final String DEST = "results/chapter04/create_and_fill.pdf";
  13. public static void main(String args[]) throws IOException {
  14. File file = new File(DEST);
  15. file.getParentFile().mkdirs();
  16. new C04E03_CreateAndFill().createPdf(DEST);
  17. }
  18. public void createPdf(String dest) throws IOException {
  19. //Initialize PDF document
  20. PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
  21. // Initialize document
  22. Document doc = new Document(pdf);
  23. PdfAcroForm form = C04E02_JobApplication.addAcroForm(doc);
  24. Map<String, PdfFormField> fields = form.getFormFields();
  25. fields.get("name").setValue("James Bond");
  26. fields.get("language").setValue("English");
  27. fields.get("experience1").setValue("Off");
  28. fields.get("experience2").setValue("Yes");
  29. fields.get("experience3").setValue("Yes");
  30. fields.get("shift").setValue("Any");
  31. fields.get("info").setValue("I was 38 years old when I became an MI6 agent.");
  32. doc.close();
  33. }
  34. }

例子7:预填充表单

打开已存在的pdf,预填充表单内容,代码如下:

  1. /** * Created by ASUS on 2017/9/12. */
  2. import com.itextpdf.kernel.pdf.PdfDocument;
  3. import com.itextpdf.kernel.pdf.PdfReader;
  4. import com.itextpdf.kernel.pdf.PdfWriter;
  5. import com.itextpdf.forms.PdfAcroForm;
  6. import com.itextpdf.forms.fields.PdfFormField;
  7. import java.io.*;
  8. import java.util.Map;
  9. /** * Simple filling out form example. */
  10. public class C04E04_FillForm {
  11. public static final String SRC = "src/main/resources/pdf/job_application.pdf";
  12. public static final String DEST = "results/chapter04/fill_form.pdf";
  13. public static void main(String args[]) throws IOException {
  14. File file = new File(DEST);
  15. file.getParentFile().mkdirs();
  16. new C04E04_FillForm().manipulatePdf(SRC, DEST);
  17. }
  18. public void manipulatePdf(String src, String dest) throws IOException {
  19. //Initialize PDF document
  20. PdfDocument pdf = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
  21. PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
  22. Map<String, PdfFormField> fields = form.getFormFields();
  23. fields.get("name").setValue("James Bond");
  24. fields.get("language").setValue("English");
  25. fields.get("experience1").setValue("Off");
  26. fields.get("experience2").setValue("Yes");
  27. fields.get("experience3").setValue("Yes");
  28. fields.get("shift").setValue("Any");
  29. fields.get("info").setValue("I was 38 years old when I became an MI6 agent.");
  30. pdf.close();
  31. }
  32. }

例子8:锁定表单

打开已存在的pdf,锁定表单填充的内容,使之不能被编辑,代码如下:

  1. /** * Created by ASUS on 2017/9/12. */
  2. import com.itextpdf.kernel.pdf.PdfDocument;
  3. import com.itextpdf.kernel.pdf.PdfReader;
  4. import com.itextpdf.kernel.pdf.PdfWriter;
  5. import com.itextpdf.forms.PdfAcroForm;
  6. import com.itextpdf.forms.fields.PdfFormField;
  7. import java.io.*;
  8. import java.util.Map;
  9. /** * Simple filling out form example. */
  10. public class C04E05_FlattenForm {
  11. public static final String SRC = "src/main/resources/pdf/job_application.pdf";
  12. public static final String DEST = "results/chapter04/flatten_form.pdf";
  13. public static void main(String args[]) throws IOException {
  14. File file = new File(DEST);
  15. file.getParentFile().mkdirs();
  16. new C04E05_FlattenForm().manipulatePdf(SRC, DEST);
  17. }
  18. public void manipulatePdf(String src, String dest) throws IOException {
  19. //Initialize PDF document
  20. PdfDocument pdf = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
  21. PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
  22. Map<String, PdfFormField> fields = form.getFormFields();
  23. fields.get("name").setValue("James Bond");
  24. fields.get("language").setValue("English");
  25. fields.get("experience1").setValue("Off");
  26. fields.get("experience2").setValue("Yes");
  27. fields.get("experience3").setValue("Yes");
  28. fields.get("shift").setValue("Any");
  29. fields.get("info").setValue("I was 38 years old when I became an MI6 agent.");
  30. form.flattenFields();
  31. pdf.close();
  32. }
  33. }

Example代码下载

本章代码可在如下地址下载(IDEA工程):iText7——第四章源代码工程

相关文章