Java 创建、填充PDF表单域

合集下载

java itext acrofields字段用法

java itext acrofields字段用法

java itext acrofields字段用法iText是一种用于处理PDF文件的Java库,它允许开发人员在创建、修改和读取PDF文件时进行灵活的操作。

iText的AcroFields类提供了一种方便的方式来操作PDF表单中的字段,包括填充字段值、获取字段属性和校验字段。

AcroFields字段用法分为以下几个方面:1. 填充字段值:在PDF表单中,经常需要将特定的值填充到字段中,比如姓名、地址、日期等。

使用iText的AcroFields类,我们可以通过以下步骤来填充字段值:1.1 创建一个PdfReader对象,用于读取PDF文件。

```javaPdfReader reader = new PdfReader("input.pdf");```1.2 创建一个PdfStamper对象,用于写入数据到PDF文件中。

```javaPdfStamper stamper = new PdfStamper(reader, new FileOutputStream("output.pdf"));```1.3 获取AcroFields对象,并使用setValue方法填充字段值。

```javaAcroFields fields = stamper.getAcroFields();fields.setField("name", "John Doe");fields.setField("address", "123 Street, City");```1.4 关闭PdfStamper对象,确保已经保存填充的字段值到PDF文件中。

```javastamper.close();```2. 获取字段属性:除了填充字段值,有时候也需要获取字段的一些属性信息,比如字段的类型、默认值、是否只读等。

使用iText的AcroFields类,我们可以通过以下方法获取字段的属性:```javaAcroFields fields = reader.getAcroFields();String type = fields.getFieldType("name");String defaultValue = fields.getField("name");boolean readOnly = fields.getFieldFlag("name", PdfFormField.FF_READ_ONLY);```getFieldType方法返回字段的类型,可以是文本、按钮、选择框等。

java中pdfcell单元格格式

java中pdfcell单元格格式

在Java中,使用iText库是处理PDF文档的一种常见方式,包括创建、编辑和提取PDF内容。

PdfPCell是iText库中的一个类,用于表示PDF文档中的表格单元格。

你可以使用PdfPCell 来设置单元格的格式,包括字体、颜色、对齐方式、边框等。

以下是一些常见的PdfPCell单元格格式设置的示例:设置字体和字号:javaFont font = new Font(FontFamily.HELVETICA, 12, Font.BOLD);PdfPCell cell = new PdfPCell(new Phrase("Hello, World!", font));设置文本颜色:javaFont coloredFont = new Font(FontFamily.HELVETICA, 12, Font.NORMAL, BaseColor.RED); PdfPCell coloredCell = new PdfPCell(new Phrase("Red Text", coloredFont));设置背景色:javaPdfPCell cellWithBackground = new PdfPCell(new Phrase("Cell with Background")); cellWithBackground.setBackgroundColor(BaseColor.LIGHT_GRAY);设置对齐方式:javaPdfPCell alignedCell = new PdfPCell(new Phrase("Aligned Text"));alignedCell.setHorizontalAlignment(Element.ALIGN_CENTER); // 水平居中alignedCell.setVerticalAlignment(Element.ALIGN_MIDDLE); // 垂直居中设置边框:javaPdfPCell cellWithBorder = new PdfPCell(new Phrase("Cell with Border"));cellWithBorder.setBorder(Rectangle.BOX); // 设置所有边框cellWithBorder.setBorderColor(BaseColor.BLACK); // 设置边框颜色cellWithBorder.setBorderWidth(1f); // 设置边框宽度设置单元格内容的换行和间距:javaParagraph p = new Paragraph("This is a long text that should wrap inside the cell.");p.setAlignment(Element.ALIGN_JUSTIFIED); // 两端对齐PdfPCell cellWithParagraph = new PdfPCell(p);cellWithParagraph.setNoWrap(false); // 允许内容换行cellWithParagraph.setPaddingTop(10f); // 设置上内边距cellWithParagraph.setPaddingBottom(10f); // 设置下内边距注意:在使用iText库时,请确保你使用的版本是与你的项目兼容的,并且遵循相应的许可协议。

java pdfoptions 参数说明

java pdfoptions 参数说明

PdfOptions是Apache PDFBox 库中的一个类,用于设置生成PDF 文档的选项。

这个类主要提供了一些静态的常量,用于配置生成的PDF 文档的各种属性。

以下是一些常用的PdfOptions参数及其说明:PageSize:定义PDF 文档的页面大小。

例如,PageSize.A4表示使用A4 大小的页面。

PageOrientation:定义PDF 文档的页面方向。

可以是PageOrientation.PORTRAIT(纵向)或NDSCAPE(横向)。

UserUnit:定义PDF 文档中的单位,通常是点(1英寸=72点)。

Compression:设置PDF 文档的压缩选项。

例如,Compression.DEFLATE表示使用Deflate 压缩算法。

Encryption:设置PDF 文档的加密选项。

例如,使用AES 加密算法,指定加密密钥等。

Printing:设置PDF 文档的打印选项。

例如,是否允许打印、修改或注释等。

Metadata:设置PDF 文档的元数据选项。

例如,添加标题、作者、关键字等元数据信息。

PageMode:设置PDF 文档的页面模式。

例如,E_NONE表示不使用任何页面模式。

ViewerPreferences:设置PDF 文档的查看器偏好选项。

例如,是否显示书签、页码等。

Language:设置PDF 文档的语言选项。

例如,Language.ENGLISH表示使用英文。

通过创建PdfOptions对象并设置相应的参数,可以自定义生成的PDF 文档的属性和行为。

具体使用时,需要根据实际需求选择适当的参数进行配置。

Java生成PDF文档(表格、列表、添加图片等)

Java生成PDF文档(表格、列表、添加图片等)

Java⽣成PDF⽂档(表格、列表、添加图⽚等)1 import java.awt.Color;2 import java.io.FileOutputStream;3 import com.lowagie.text.Cell;4 import com.lowagie.text.Chapter;5 import com.lowagie.text.Document;6 import com.lowagie.text.Font;7 import com.lowagie.text.Image;8 import com.lowagie.text.List;9 import com.lowagie.text.ListItem;10 import com.lowagie.text.PageSize;11 import com.lowagie.text.Paragraph;12 import com.lowagie.text.Section;13 import com.lowagie.text.Table;14 import com.lowagie.text.pdf.BaseFont;15 import com.lowagie.text.pdf.PdfWriter;16 public class ITextDemo {17 public boolean iTextTest() {18 try {19 /** 实例化⽂档对象 */20 Document document = new Document(PageSize.A4, 50, 50, 50, 50);21 /** 创建 PdfWriter 对象 */22 PdfWriter.getInstance(document,// ⽂档对象的引⽤23 new FileOutputStream("d://ITextTest.pdf"));//⽂件的输出路径+⽂件的实际名称24 document.open();// 打开⽂档25 /** pdf⽂档中中⽂字体的设置,注意⼀定要添加iTextAsian.jar包 */26 BaseFont bfChinese = BaseFont.createFont("STSong-Light",27 "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);28 Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);//加⼊document:29 /** 向⽂档中添加内容,创建段落对象 */30 document.add(new Paragraph("First page of the document."));// Paragraph添加⽂本31 document.add(new Paragraph("我们是害⾍", FontChinese));32 /** 创建章节对象 */33 Paragraph title1 = new Paragraph("第⼀章", FontChinese);34 Chapter chapter1 = new Chapter(title1, 1);35 chapter1.setNumberDepth(0);36 /** 创建章节中的⼩节 */37 Paragraph title11 = new Paragraph("表格的添加", FontChinese);38 Section section1 = chapter1.addSection(title11);39 /** 创建段落并添加到⼩节中 */40 Paragraph someSectionText = new Paragraph("下⾯展⽰的为3 X 2 表格.",41 FontChinese);42 section1.add(someSectionText);43 /** 创建表格对象(包含⾏列矩阵的表格) */44 Table t = new Table(3, 2);// 2⾏3列45 t.setBorderColor(new Color(220, 255, 100));46 t.setPadding(5);47 t.setSpacing(5);48 t.setBorderWidth(1);49 Cell c1 = new Cell(new Paragraph("第⼀格", FontChinese));50 t.addCell(c1);51 c1 = new Cell("Header2");52 t.addCell(c1);53 c1 = new Cell("Header3");54 t.addCell(c1);55 // 第⼆⾏开始不需要new Cell()56 t.addCell("1.1");57 t.addCell("1.2");58 t.addCell("1.3");59 section1.add(t);60 /** 创建章节中的⼩节 */61 Paragraph title13 = new Paragraph("列表的添加", FontChinese);62 Section section3 = chapter1.addSection(title13);63 /** 创建段落并添加到⼩节中 */64 Paragraph someSectionText3 = new Paragraph("下⾯展⽰的为列表.", FontChinese);65 section3.add(someSectionText3);66 /** 创建列表并添加到pdf⽂档中 */67 List l = new List(true, true, 10);// 第⼀个参数为true,则创建⼀个要⾃⾏编号的列表,68 // 如果为false则不进⾏⾃⾏编号69 l.add(new ListItem("First item of list"));70 l.add(new ListItem("第⼆个列表", FontChinese));71 section3.add(l);72 document.add(chapter1);73 /** 创建章节对象 */74 Paragraph title2 = new Paragraph("第⼆章", FontChinese);75 Chapter chapter2 = new Chapter(title2, 1);76 chapter2.setNumberDepth(0);77 /** 创建章节中的⼩节 */78 Paragraph title12 = new Paragraph("png图⽚添加", FontChinese);79 Section section2 = chapter2.addSection(title12);80 /** 添加图⽚ */81 section2.add(new Paragraph("图⽚添加: 饼图", FontChinese));82 Image png = Image.getInstance("D:/pie.png");//图⽚的地址83 section2.add(png);84 document.add(chapter2);85 document.close();86 return true;87 } catch (Exception e2) {88 System.out.println(e2.getMessage());89 }90 return false;91 }92 public static void main(String args[]) {93 System.out.println(new ITextDemo().iTextTest());94 }95 }。

java根据模板生成pdf文件并导出

java根据模板生成pdf文件并导出

java根据模板生成pdf文件并导出首先你的制作一个pdf模板:1.先用word做出模板界面2.文件另存为pdf格式文件3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf文件(注:如果没有这个软件可以通过我的百度云下载,链接:/s/1pL2klzt)如果无法下载可以联系博主。

4.点击右边的"准备表单"按钮,选择"测试.pdf"选择开始进去到编辑页面,打开后它会自动侦测并命名表单域,右键表单域,点击属性,出现文本域属性对话框(其实无需任何操作,一般情况下不需要修改什么东西,至少我没有修改哦。

如果你想修改fill1等信息,可以进行修改)5.做完上面的工作后,直接"另存为"将pdf存储就可以****************************************************************** ***********以上部分是制作pdf模板操作,上述完成后,就开始通过程序来根据pdf模板生成pdf文件了,上java程序:1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖[html] view plain copy print?<!--https:///artifact/com.itextpdf/itextpdf--> <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency> [html] view plain copy print?<!-- https:///artifact/com.itextpdf/itext-asian --> <span style="white-space:pre;"></span><dependency> <spanstyle="white-space:pre;"> </span><groupId>com.itextpdf</groupId> <span style="white-space:pre;"> </span><artifactId>itext-asian</artifactId> <span style="white-space:pre;"> </span><version>5.2.0</version> <spanstyle="white-space:pre;"></span></dependency> 2.下面就是生成pdf代码了[java] view plain copy print?importjava.io.ByteArrayOutputStream; importjava.io.FileOutputStream; import java.io.IOException; import com.itextpdf.text.Document; importcom.itextpdf.text.DocumentException; importcom.itextpdf.text.pdf.AcroFields; importcom.itextpdf.text.pdf.PdfCopy; importcom.itextpdf.text.pdf.PdfImportedPage; importcom.itextpdf.text.pdf.PdfReader; importcom.itextpdf.text.pdf.PdfStamper; public class Snippet { // 利用模板生成pdf public static void fillTemplate() { // 模板路径String templatePath = "E:/测试3.pdf"; // 生成的新文件路径String newPDFPath = "E:/ceshi.pdf"; PdfReader reader; FileOutputStream out; ByteArrayOutputStream bos; PdfStamper stamper; try { out = new FileOutputStream(newPDFPath);// 输出流reader = new PdfReader(templatePath);// 读取pdf模板bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();String[] str = { "123456789", "TOP__ONE", "男","1991-01-01", "130222111133338888", "河北省保定市" };int i = 0; java.util.Iterator<String> it = form.getFields().keySet().iterator(); while (it.hasNext()) { String name =it.next().toString();System.out.println(name);form.setField(name, str[i++]); }stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为truestamper.close(); Document doc = new Document(); PdfCopy copy = new PdfCopy(doc, out); doc.open(); PdfImportedPage importPage =copy.getImportedPage(new PdfReader(bos.toByteArray()), 1); copy.addPage(importPage);doc.close(); } catch (IOException e){ System.out.println(1); } catch (DocumentException e){ System.out.println(2); }} public static void main(String[] args){ fillTemplate(); } } 3.运行结果如下****************************************************************** ***如果没有模板,就行自己生成pdf文件保存到磁盘:下面的方法可以实现:[java] view plain copy print?public static void test1(){//生成pdf Document document = new Document();try { PdfWriter.getInstance(document, new FileOutputStream("E:/1.pdf"));document.open(); document.add(new Paragraph("hello word"));document.close(); } catch (Exception e){ System.out.println("file create exception"); } } 但是上述方法中包含中文时就会出现问题,所以可以使用下面这行代码实现,所使用的jar包,上面的两个依赖都包含了:[java] view plain copy print?public static voidtest1_1(){ BaseFont bf; Font font = null; try { bf =BaseFont.createFont( "STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);//创建字体font = new Font(bf,12);//使用字体} catch (Exception e){ e.printStackTrace(); }Document document = new Document(); try{ PdfWriter.getInstance(document, new FileOutputStream("E:/2.pdf"));document.open(); document.add(new Paragraph("hello word 你好世界",font));//引用字体document.close(); } catch (Exception e){ System.out.println("file create exception"); } }****************************************************************** ********************当然,如果你想弄的炫一点,想实现其他字体,可以去网上搜字体文件然后下载下来,放到项目里,我这里是在项目里新建了一个font文件夹,将字体文件放到了里面。

[原创]java向word模板中填充数据(总结)

[原创]java向word模板中填充数据(总结)

[原创]java向word模板中填充数据(总结) 使⽤过PageOffice动态⽣成word⽂档的⼈都知道,PageOffice可以给word⽂档的指定位置进⾏填充,这⾥我们所说的指定位置在PageOffice的专业术语⾥⾯有两个概念,⼀个叫做数据区域(DataRegion),另⼀个叫做数据标签(DataTag)。

⼀、概念 数据区域:是Word⽂档中具有 "PO_" 前缀命名的书签所定位的⽂档区域。

简单来说,数据区域就是⼀种特殊的Word书签对象,便于定位Word⽂档中的内容。

数据标签:是任意的有效字符组成的特殊样式的字符串(如“【时间】”、“{姓名}”、“${name}”等等)作为标记,理论上这样的字符串(⽐如:“性别”、“地址”、“aa”、“bbcc”)也可以当做数据标签,但是不推荐使⽤,因为这样的标签不能从视觉上直观的看出word⽂档中包含了哪些数据标签。

⼆、使⽤ 数据区域⾥⾯可以填充些的内容:⽂本、图⽚、Word⽂件、Excel⽂件。

WordDocument doc = new WordDocument();//填充⽂本DataRegion dataRegion1 = doc.openDataRegion("PO_userName");dataRegion1.setValue("张三");//还可以给填充的⽂本设置字体,颜⾊,粗体等样式dataRegion1.getFont().setColor(Color.blue);dataRegion1.getFont().setSize(24);dataRegion1.getFont().setName("⾪书");dataRegion1.getFont().setBold(true);//填充图⽚doc.openDataRegion("PO_deptName").setValue("[image]img/123.jpg[/image]");//填充word⽂件doc.openDataRegion("PO_deptName").setValue("[word]doc/aabb.doc[/word]");//填充excel⽂件doc.openDataRegion("PO_deptName").setValue("[excel]doc/bbcc.xls[/excel]"); 数据标签中可以填充的内容:⽂本。

java根据内容坐标给pdf填充内容的方法

java根据内容坐标给pdf填充内容的方法

java根据内容坐标给pdf填充内容的方法PDF文件作为一种常用的文档格式,已经被广泛应用于各种领域。

然而,对于一些需要编辑PDF文件的情况,如需要在PDF文件中根据内容坐标填充内容,现有的PDF处理库可能无法满足需求。

本文将介绍一种基于Java的PDF处理方法,可以实现根据内容坐标给PDF填充内容的功能。

一、PDF文件读取首先,我们需要使用Java中的PDF库来读取PDF文件,获取需要填充内容的区域信息。

常见的PDF库有iText、Apache PDFBox等。

在本方法中,我们使用iText库作为示例。

具体实现过程如下:1. 创建一个PdfReader对象,指定需要读取的PDF文件路径。

```javaPdfReader reader = new PdfReader("path/to/pdf/file.pdf");```2. 遍历PDF文档中的每一页,获取每个页面的信息。

```javafor (int page = 1; page <= reader.getNumberOfPages();page++) {// 获取当前页面的信息Document document = new Document(reader, PageSize.A4);PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("output/page_" + page + ".pdf"));document.open();// 获取当前页面的内容信息...}```二、内容坐标计算在获取PDF文件中的内容信息后,我们需要根据内容坐标计算填充内容的区域位置。

通常来说,PDF文件中的内容坐标是以像素为单位进行计算的。

因此,我们需要根据实际需求,将像素坐标转换为页面坐标或屏幕坐标。

具体实现过程如下:1. 根据内容坐标计算填充区域的起始位置和结束位置。

itext 7 core中pdfacroform的用法

itext 7 core中pdfacroform的用法

itext 7 core中pdfacroform的用法iText是一种流行的Java库,用于处理PDF文档。

iText 7 Core是iText 7系列的核心库,提供了丰富的功能,其中之一是处理PDF表单(AcroForm)。

本文将详细介绍iText 7 Core中PDF AcroForm的用法,包括表单创建、填充和读取。

1. 引入iText 7 Core库:首先,在你的Java项目中引入iText 7 Core 库。

你可以通过Maven或手动下载jar文件进行引入。

以下是Maven 的依赖配置:<dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.1.16</version> <!--请根据实际版本进行配置--></dependency>2. 创建PDF文档和AcroForm:使用iText 7 Core创建PDF文档并添加AcroForm。

以下是一个简单的示例:import com.itextpdf.kernel.pdf.PdfDocument;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.forms.PdfAcroForm;public class CreatePDFWithAcroForm {public static void main(String[]args){try(PdfWriter writer =new PdfWriter("example.pdf");PdfDocument pdfDocument =new PdfDocument(writ er)){PdfAcroForm form =PdfAcroForm.getAcroForm(pdfDoc ument,true);// 在此处添加表单字段// form.addField(...);}catch(Exception e){e.printStackTrace();}}}在上述代码中,我们创建了一个PDF文档并获取了其AcroForm对象,以便在后续添加表单字段。

java itextpdf acrofields字段用法

java itextpdf acrofields字段用法

java itextpdf acrofields字段用法一、引言iTextPDF是一个用于处理PDF文档的Java库,它提供了丰富的功能来创建、编辑和操作PDF文档。

AcroFields是iTextPDF中的一个重要组件,用于在PDF文档中创建和操作表单字段。

本文将详细介绍Java、iTextPDF和AcroFields字段的用法。

二、Java与iTextPDF库Java是一种流行的编程语言,广泛应用于桌面应用、Web应用和移动应用开发。

iTextPDF是一个Java库,用于处理PDF文档。

通过使用iTextPDF库,开发人员可以创建、编辑和操作PDF文档,包括添加文本、图像、表单字段等。

三、AcroFields字段AcroFields是iTextPDF库中的一个组件,用于在PDF文档中创建和操作表单字段。

常见的表单字段包括文本字段、复选框、单选按钮、下拉列表等。

通过使用AcroFields,开发人员可以在PDF文档中创建表单字段,并使用Java代码设置字段的值、验证用户输入等。

四、字段类型及用法1. 文本字段:文本字段是最常见的表单字段之一,用于接收用户输入的文本信息。

在iTextPDF中,可以使用AcroField对象来创建文本字段,并使用Java代码设置字段的值和验证规则。

2. 复选框:复选框允许用户选择多个选项。

可以使用AcroField 对象的checkBox方法创建复选框,并使用Java代码设置复选框的值和验证规则。

3. 单选按钮:单选按钮允许用户从多个选项中选择一个。

可以使用AcroField对象的radioButton方法创建单选按钮,并使用Java代码设置单选按钮的值和验证规则。

4. 下拉列表:下拉列表允许用户从预定义的选项中选择一个。

可以使用AcroField对象的select方法创建下拉列表,并使用Java代码设置下拉列表的值和选项。

5. 字段属性:AcroFields对象提供了丰富的属性设置方法,用于修改表单字段的外观和行为。

Java 获取PDF表单域的值

Java 获取PDF表单域的值

Java 获取PDF表单域的值本文将介绍在Java程序中来获取PDF表单域值的方法,包括获取指定(可通过索引值或表单域名称)表单域的值及获取文档中所有表单域的值。

创建、填充PDF表单域以及设置表单域只读可以参考这篇文章里的方法。

使用工具:Free Spire.PDF for Java (免费版)Jar文件获取:方法1:通过官网下载jar文件包。

下载后,解压文件,将lib文件夹下的Spire.Pdf.jar 导入java程序。

方法2:通过maven仓库安装导入,可参考导入方法。

测试文文档如下:Java代码示例【示例1】获取指定表单域的值import com.spire.pdf.PdfDocument;import com.spire.pdf.widget.PdfFormWidget;import com.spire.pdf.widget.PdfTextBoxFieldWidget;import java.io.FileWriter;import java.io.IOException;public class GetSpecificFormfieldValue {public static void main(String[] args) {//加载PDF文档PdfDocument pdf = new PdfDocument();pdf.loadFromFile("test.pdf");//获取表单域PdfFormWidget formWidget = (PdfFormWidget)pdf.getForm();//通过索引值来获取指定表单域中的值PdfTextBoxFieldWidget textbox =( PdfTextBoxFieldWidget)formWidget.getFieldsWidget().get(0);//PdfTextBoxFieldWidget textbox =( PdfTextBoxFieldWidget)formWidget.getFieldsWidget().get("TextBox");//通过表单域名称来获取值//将获取的值写入txt文档String text = textbox.getText();try {//将文本写入 .txt文件FileWriter writer = new FileWriter("GetSpecificFormfieldValue.txt");writer.write(text);writer.flush();} catch (IOException e) {e.printStackTrace();}pdf.close();}}指定表单域值获取结果:【示例2】获取文中所有表单域的值import com.spire.pdf.PdfDocument;import com.spire.pdf.fields.PdfField;import com.spire.pdf.widget.*;import java.io.FileWriter;import java.io.IOException;public class GetAllFormfieldValue {public static void main(String[] args) {//加载PDF文档PdfDocument pdf = new PdfDocument();pdf.loadFromFile("测试.pdf");//获取表单域PdfFormWidget formWidget = (PdfFormWidget)pdf.getForm();StringBuilder sb = new StringBuilder();//遍历表单域控件集合并提取所有表单的值for (int i = 0; i < formWidget.getFieldsWidget().getCount(); i++){PdfField field = (PdfField)formWidget.getFieldsWidget().getList().get(i);//获取文本框的值if (field instanceof PdfTextBoxFieldWidget){PdfTextBoxFieldWidget textBoxField = (PdfTextBoxFieldWidget)field ;String text = textBoxField.getText();sb.append("文本框内容: " + text + "\r\n");}//获取列表框的值if (field instanceof PdfListBoxWidgetFieldWidget){PdfListBoxWidgetFieldWidget listBoxField = (PdfListBoxWidgetFieldWidget)field;//获取列表框中选中的值String selectedValue = listBoxField.getSelectedValue();sb.append("列表框选中的内容: " + selectedValue + "\r\n");//获取列表框中的所有选项值sb.append("列表框内容:\r\n");PdfListWidgetItemCollection items = listBoxField.getValues();for (PdfListWidgetItem item : (Iterable<PdfListWidgetItem>) items){sb.append(item.getValue() + "\r\n");}}//获取组合框的值if (field instanceof PdfComboBoxWidgetFieldWidget){PdfComboBoxWidgetFieldWidget comBoxField = (PdfComboBoxWidgetFieldWidget)field ;//获取组合框中选中的值String selectedValue = comBoxField.getSelectedValue();sb.append("组合框选中的内容: " + selectedValue + "\r\n");//获取组合框中所有选项值sb.append("组合框内容:\r\n");PdfListWidgetItemCollection items = comBoxField.getValues();for (PdfListWidgetItem item : (Iterable<PdfListWidgetItem>) items) {sb.append(item.getValue() + "\r\n");}}//获取单选按钮值if (field instanceof PdfRadioButtonListFieldWidget){PdfRadioButtonListFieldWidget radioBtnField = (PdfRadioButtonListFieldWidget)field;String Value = radioBtnField.getValue();sb.append("单选按钮内容: " + Value + "\r\n");}//获取复选框值if (field instanceof PdfCheckBoxWidgetFieldWidget){PdfCheckBoxWidgetFieldWidget checkBoxField = (PdfCheckBoxWidgetFieldWidget)field;//获取复选框的选中状态boolean state = checkBoxField.getChecked();sb.append("复选框是否被选中? " + state + "\r\n");}}try {//将文本写入 .txt文件FileWriter writer = new FileWriter("GetAllFormfieldValues.txt");writer.write(sb.toString());writer.flush();} catch (IOException e) {e.printStackTrace();}pdf.close();}}表单域读取结果:(本文完)。

使用Java在macOS系统中进行PDF文件操作

使用Java在macOS系统中进行PDF文件操作

使用Java在macOS系统中进行PDF文件操作在日常工作和学习中,我们经常会遇到需要对PDF文件进行操作的情况,比如合并多个PDF文件、提取特定页面、加密解密等。

而在macOS系统中,使用Java语言进行PDF文件操作是一种常见且高效的方式。

本文将介绍如何利用Java在macOS系统中进行PDF文件操作,包括读取、创建、编辑和保存PDF文件。

1. 准备工作在开始之前,我们需要准备好以下工具和环境:macOS系统:确保你的电脑上安装了macOS操作系统。

Java开发环境:安装并配置好Java开发环境,确保可以编译和运行Java程序。

PDF文件库:选择适合的Java PDF文件库,比如iText、Apache PDFBox等。

2. 读取PDF文件首先,我们来看看如何使用Java在macOS系统中读取PDF文件。

通过选择合适的PDF文件库,我们可以轻松实现对PDF文件的读取操作。

下面是一个简单的示例代码:示例代码star:编程语言:javaimport org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.text.PDFTextStripper;import java.io.File;import java.io.IOException;public class ReadPDF {public static void main(String[] args) {try {PDDocument document = PDDocument.load(new File("example.pdf"));PDFTextStripper pdfStripper = new PDFTextStripper();String text = pdfStripper.getText(document);System.out.println(text);document.close();} catch (IOException e) {e.printStackTrace();}}}示例代码end上面的代码使用了Apache PDFBox库来读取名为example.pdf的PDF文件,并将其内容输出到控制台。

VBA操作PDF表单的技巧与应用

VBA操作PDF表单的技巧与应用

VBA操作PDF表单的技巧与应用PDF(Portable Document Format)是一种非常常见的文档格式,具有跨平台和文件保真度高的优点,广泛应用于各个领域。

在处理PDF文档的过程中,表单无疑是其中一项重要的内容,它可以用于收集用户的信息以及进行数据输入和处理。

在本文中,我们将介绍如何使用VBA(Visual Basic for Applications)来操作PDF表单,包括表单字段的填充和获取、表单的创建和修改等。

1. 填充PDF表单字段填充PDF表单字段是一个常见的需求,它可以用于自动化地填写大量的表单数据。

使用VBA操作PDF表单可以极大地简化这个过程。

下面是操作的步骤:步骤1:打开PDF文档并启用Acrobat库。

```Dim AcroApp As Acrobat.AcroAppDim AcroDoc As Acrobat.AcroPDDocSet AcroApp = CreateObject("AcroExch.App")Set AcroDoc = CreateObject("AcroExch.PDDoc")AcroDoc.Open "C:\example.pdf"```步骤2:获取表单字段并填写数据。

```Dim jso As ObjectSet jso = AcroDoc.GetJSObjectjso.fieldName.Value = "数据"```步骤3:保存并关闭PDF文档。

```AcroDoc.Save 1, "C:\example_filled.pdf"AcroDoc.CloseAcroApp.Exit```通过以上步骤,我们可以快速地填充PDF表单字段并保存为新的PDF文档。

2. 获取PDF表单字段的值另一个常见的任务是获取PDF表单字段的值,这可以用于提取用户输入的数据或者进行数据处理。

PDFBOX详细介绍

PDFBOX详细介绍

PDF和Java技巧(PDFBox) 之五兆芳芳创作0717 08:29:44| 分类: java(B/S)|字号订阅原文题目:Making PDFs Portable: Integrating PDF and Java Technology原文日期:3月24日原文作者:Ben Litchfield摘要自从Adobe公司1993年第一次宣布公共PDF参考以来,支持各类语言战争台的PDF东西和类库就如雨后春笋般涌现.然而,Java应用开发中Adobe技巧的支持相对滞后了.自从Adobe公司1993年第一次宣布公共PDF参考以来,支持各类语言战争台的PDF东西和类库就如雨后春笋般涌现.然而,Java应用开发中Adobe技巧的支持相对滞后了.这是个奇怪的现象,因为PDF文档是企业信息系统存储和互换信息的大势所趋,而Java技巧特别适合这种应用.然而,Java开发人员似乎直到最近才取得成熟可用的PDF支持.PDFBox(一个BSD许可下的源码开放项目)是一个为开发人员读取和创建PDF文档而准备的纯Java类库.它提供如下特性:•提取文本,包含Unicode字符.•和Jakarta Lucene等文本搜索引擎的整合进程十分复杂.•加密/解密PDF文档.•从PDF和XFDF格局中导入或导出表单数据.•向已有PDF文档中追加内容.•将一个PDF文档切分为多个文档.•笼盖PDF文档.PDFBox APIPDFBox设计时采取面向对象的方法来描述PDF文档.PDF文档的数据是一系列根本对象的荟萃:数组,布尔型,字典,数字,字符串和二进制流.PDFBox在org.pdfbox.cos包(COS模型)中定义这些根本对象类型.你可以使用这些对象与PDF文档进行任何交互,但你应该先对PDF文档内部结构以及高层概念作一些深入的了解.例如,页面和字体都是带有特殊属性的字典对象;PDF参考手册提供这些特殊属性的寄义和类型的说明,但这是一个枯燥的文档查阅进程.于是,org.pdfbox.pdfmodel包(PD模型)应运而生,它的根本是COS模型,但提供了以一种熟悉的方法拜访PDF 文档对象的高层API(如图1).对底层COS模型进行了封装的PDPage和PDFont等类就在这个包中.注意,虽然PD模型提供了一些优秀的功效,但它依然是一个开发中的模型.在有些实例中,你可能需要借助于COS 模型才干拜访PDF的特定功效性.所有的PD模型对象都提供前往相应的COS模型对象的办法.所以,在一般情况下,你都会使用PD模型,但PD模型力所不实时你可以直接操纵底层的COS模型.上文对PDFBox作了大体上的介绍,现在是举一些例子的时候了.我们从如何读已存在的PDF文档开始:1. PDDocument document =2. PDDocument.load( "./test.pdf" );上面的语句解析指定的PDF文件并在内存中创建其文档对象.考虑到处理大文档时的效率问题,PDFBox只在内存中存储文档结构,图像、内嵌字体和页面内容等对象将被缓存在一个临时文件中.注意:PDDocument对象使用完毕时需要调用其close()办法来释放创建时使用的资源.文本提取和Lucene整合这是一个信息展现时代(an information retrieval age),不管信息存放在哪种媒体中,应用程序都应该支持检索和索引.对信息进行组织和分类从而形成可检索的格局是很关头的.这对于文本文档和HTML文档来说是很复杂的,但PDF文档包含大量的结构和元信息,提取文档内容决不是一件复杂的事情.PDF语言和Postscript相似,两者中的对象都是作为矢量绘制在页面的某些位置.例如:1. /Helv 12 Tf2. 0 13.0847 Td3. (Hello World) Tj上面的指令将字体设为12号的Helvetica,移到下一行然后打印“Hello World”.这些命令流通常是经过压缩的,文字在屏幕上的显示顺序其实不一定是文件中的字符出现顺序.因此,你有时无法直接从原始PDF文档中提取字符串.然而,PDFBox成熟的文本提取算法使得开发人员可以提取文档内容,就像在阅读器中呈现的那样.Lucene是Apache Jakarta项目的子项目,它是一个流行的源代码开放的搜索引擎库.开发人员可以使用Lucene来创建索引,并基于该索引对大量的文本内容进行庞杂的检索.Lucene只支持文本内容的检索,所以开发人员需要将其他形式的数据转换为文本形式才干使用Lucene.例如,Microsoft Word和StarOffice文档都必须先转换为文本形式才干添加到Lucene索引中.PDF文件也不例外,但PDFBox提供一个特殊的整合对象,这让在Lucene索引中包含PDF文档变得很是容易.将一个根本PDF文档转换为Lucene文档只需要一条语句:1. Document doc = LucenePDFDocument.getDocument( file );这条语句解析指定的PDF文档,提取其内容并创建一个Lucene文档对象.然后你就可以将该对象添加到Lucene索引中了.如上文所述,PDF文档中也包含作者信息和关头词等元数据,在索引PDF文档时对这些元数据进行跟踪时很重要的.表1列出了创建Lucene文档时PDFBox将填写(populate)的字段.这种整合使得开发人员可以轻松地使用Lucene来支持PDF文档的检索和索引.当然,有些应用程序要求更成熟的文本提取办法.此时可以直接使用PDFTextStripper类,或承继该类来满足这种庞杂的需求.通过承继PDFTextStripper并笼盖showCharacter()办法,你可以从许多方面对文本提取进行控制.例如,使用x、y位置信息进行限制以提取特定文本块.你可以有效地疏忽所有的y坐标大于某个值的文本,这样文档头部内容就会被排除.另一个例子.经常有这种情况:从表单创建了一组PDF文档,但这些原始数据被丢失了.也就是说,这些文档都包含一些你感兴趣的文本,并且这些文本都在相似的位置上,但填充文档的表单数据丢失了.例如,你有一些信封,在相同的位置上都有名字和地址信息.这时,你就可以使用PDFTextStripper的派生类来提取期望的字段,这个类就像一种截取屏幕区域的设备.加密/解密PDF的一个流行特性是允许对文档内容进行加密、对拜访进行控制,限制只能阅读未加密文档.PDF文档加密时采取一个主密码和一个可选的用户密码.如果设定了用户密码,那么PDF阅读器(如Acrobat)将在显示文档之前提示输入密码.而主密码则用于授权修改文档内容.PDF标准允许PDF文档的创建者对用户使用Acrobat阅读器查抄文档时的某些操纵进行限制.这些限制包含:•打印•修改内容•提取内容PDF文档平安的讨论不在本文范围之内,有兴趣的读者可以参考PDF标准的相关部分.PDF文档的平安模型是可插拔式的(pluggable),你可以在加密文档时使用不合的平安处理器(security handler).对本文而言,PDFBox支持尺度的平安处理器,它是大多数PDF文档所使用的.加密文档时必须先指定一个平安处理器,然后使用一个主密码和用户密码进行加密.在下面的代码中,文档被加密,用户不需要敲入就可以在Acrobat中打开它(没有设置用户密码),但是该文档不成被打印.1. //load the document2. PDDocument pdf =3. PDDocument.load( "test.pdf" );4. //create the encryption options5. PDStandardEncryption encryptionOptions =6. new PDStandardEncryption();7. encryptionOptions.setCanPrint( false );8. pdf.setEncryptionDictionary(9. encryptionOptions );10. //encrypt the document11. pdf.encrypt( "master", null );12. //save the encrypted document13. //to the file system14. pdf.save( "testoutput.pdf");更详细的示例拜见PDFBox宣布版中包含的加密东西类源代码:org.pdfbox.Encrypt.许多应用程序可以生成PDF文档,但不支持控制文档的平安选项.这时PDFBox就可以用来在发送给用户之前截获并加密PDF文档.表单整合当应用程序的输出是一系列表单域的值时,提供将表单保管成文件的功效是很需要的.这时PDF技巧将是一个很好的选择.开发人员可以手动编写PDF指令来绘制图形、表格和文本.或将数据存成XML形式并使用XSLFO模版来创建PDF 文档.然而,这些办法都是比较耗时,容易出错,并且灵活性也比较差.对于复杂的表单而言,一个更好的办法是创建模版,然后将给定的输入数据填入该模版,从而生成文档.Employment Eligibility Verification是一个大多数人都熟悉的表单,它又叫做“I9表单”,拜见:/graphics/formsfee/forms/files/i9.pdf你可以使用PDFBox宣布版中的一个示例程序列出表单域名单:还有一个示例程序用于向指定的域中拔出文本形式的数据:1. java org.pdfbox.examples.fdf.SetField i9.pdf NAME1 Smith在Acrobat中打开这个PDF文档你就会看到"Last Name"域已被填写了.你也可以使用以下代码来完成相同的操纵:1. PDDocument pdf =2. PDDocument.load( "i9.pdf" );3. PDDocumentCatalog docCatalog =4. pdf.getDocumentCatalog();5. PDAcroForm acroForm =6. docCatalog.getAcroForm();7. PDField field =8. acroForm.getField( "NAME1" );9. field.setValue( "Smith" );10. pdf.save( "i9copy.pdf" );下面的代码可用于提取方才填写的表单域的值:1. PDField field =2. acroForm.getField( "NAME1" );3. System.out.println(4. "First Name=" field.getValue() );Acrobat支持将表单数据导入或导出到一个特定的文件格局“表单数据格局”(Forms Data Format).这种文件有两类:FDF和XFDF.FDF文件存放表单数据的格局与PDF相同,而XFDF则以XML格局存放表单数据.PDFBox在一个类中处理FDF和XFDF:FDFDocument.下面的代码片断演示了如何从上面的I9表单导出FDF数据:1. PDDocument pdf =2. PDDocument.load( "i9.pdf" );3. PDDocumentCatalog docCatalog =4. pdf.getDocumentCatalog();5. PDAcroForm acroForm =6. docCatalog.getAcroForm();7. FDFDocument fdf = acroForm.exportFDF();8. fdf.save( "exportedData.fdf" );PDFBox表单整合步调:1. 使用Acrobat或其他可视化东西创建PDF表单模版2. 记下每个需要的(desirable)表单域的名称3. 将模版存放在应用程序可以拜访到的地方4. 当PDF被请求时,使用PDFBox解析PDF模版5. 填充指定的表单域6. 将填充结果(PDF)前往给用户东西除了上文介绍的API之外,PDFBox还提供一系列命令行东西.表2列出了这些东西类并作冗长介绍.备注PDF标准共有1172页之多,其实现的确是一浩荡工程.同样,PDFBox宣布版中说它“正在进行中”,新的功效会慢慢地添加上去.它的主要弱点是从零开始创建PDF文档.然而,有一些源码开放的Java项目可用于填补这个缺口.例如,Apache FOP项目支持从特殊的XML文档生成PDF,这个XML文档描述了要生成的PDF文档.此外,iText提供一个高层API用于创建表格和列表.PDFBox的下一个版本将支持新的PDF 1.5 对象流和穿插引用流.然后将提供内嵌字体和图像的支持.在PDFBox的努力下,Java应用程序中的PDF技巧有望得到充分的支持.参考资源关于作者Ben Litchfield是一位拥有LPA Systems开发和整合经验的商业系统参谋.在过来的两年中,他领导着PDFBox开发组.Ben拥有Rochester技巧研究院的软件工程方面的学士学位.在过来的5年中,他一直在提供企业应用程序的解决计划.(更多)。

pdfbox 应用案例

pdfbox 应用案例

pdfbox 应用案例PDFBox 是一个开源的 Java 库,用于处理 PDF 文件。

它提供了丰富的功能,可以创建、操作和提取 PDF 文件中的内容。

本文将介绍几个实际应用场景,展示 PDFBox 的强大功能和广泛应用。

一、PDF 文档转换PDFBox 提供了将 PDF 文档转换为其他格式的功能。

通过使用PDFBox,我们可以轻松将 PDF 文档转换为文本文件、图像文件或HTML 文件。

例如,我们可以将一份调查问卷的 PDF 文件转换为文本文件,便于进行数据处理和分析。

对于需要在网络上展示内容的场景,将 PDF 文件转换为 HTML 文件可以方便地嵌入到网页中,并支持在线查看和搜索。

二、PDF 表单处理PDFBox 具有处理 PDF 表单的能力。

在许多工作场景中,我们需要与用户进行数据交互,并收集用户的输入信息。

PDF 表单是一种理想的方式,可以规范数据的格式和收集方式。

PDFBox 可以用于创建、填充和验证 PDF 表单。

我们可以使用 PDFBox 创建自定义表单,并将用户的输入信息填充到表单中,然后对输入数据进行验证和处理。

这对于一些需要收集用户反馈或用户注册的应用非常有用。

三、PDF 文档合并与拆分有时我们需要合并多个 PDF 文档为一个,或者拆分一个大的 PDF文档为多个小的文件。

PDFBox 提供了便捷的方式实现这种需求。

通过使用 PDFBox 的合并和拆分功能,我们可以将多个 PDF 文档合并为一个完整的文档,或者将一个大的 PDF 文档拆分成多个独立的文件。

这对于需要整理和归档大量 PDF 文档的场景非常有帮助,也提高了文档的可管理性和可读性。

四、PDF 文档加密与解密PDFBox 支持加密和解密 PDF 文件。

在一些需要保密信息的场景中,我们可以使用 PDFBox 对 PDF 文件进行加密,以确保只有授权的用户可以访问内容。

通过设置密码和权限控制,我们可以限制对 PDF 文件的打印、复制粘贴、修改等操作。

java通过PDF模板填写PDF表单

java通过PDF模板填写PDF表单

java通过PDF模板填写PDF表单本⽂实例为⼤家分享了java通过PDF模板填写PDF表单的具体代码,包括图⽚,供⼤家参考,具体内容如下需要⽤到的java包:itext.jar、iTextAsian.jar的JAR包。

这个包⾥⾯定义了与中⽂输出相关的⼀些⽂件。

编写的表单如下:import java.io.ByteArrayOutputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.HashMap;import java.util.Map;import com.itextpdf.text.DocumentException;import com.itextpdf.text.Image;import com.itextpdf.text.Rectangle;import com.itextpdf.text.pdf.AcroFields;import com.itextpdf.text.pdf.BaseFont;import com.itextpdf.text.pdf.PdfContentByte;import com.itextpdf.text.pdf.PdfReader;import com.itextpdf.text.pdf.PdfStamper;/*** pdf⼯具类* @author MOSHUNWEI* @since 2018-02-01*/public class PDFUtil {/*** 根据模板⽣成pdf* @param data Map(String,Object)* @return*/public static boolean createPDF(String path,Map<String, Object> data) {PdfReader reader = null;AcroFields s = null;PdfStamper ps = null;ByteArrayOutputStream bos = null;try {reader = new PdfReader("D:\\test.pdf");bos = new ByteArrayOutputStream();ps = new PdfStamper(reader, bos);s = ps.getAcroFields();/*** 使⽤中⽂字体使⽤ AcroFields填充值的不需要在程序中设置字体,在模板⽂件中设置字体为中⽂字体 Adobe 宋体 std L*/BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);/*** 设置编码格式*/s.addSubstitutionFont(bfChinese);// 遍历data 给pdf表单表格赋值for (String key : data.keySet()) {s.setField(key,data.get(key).toString());}// 如果为false那么⽣成的PDF⽂件还能编辑,⼀定要设为trueps.setFormFlattening(true);/*** 添加图⽚*/String imgpath="D:/n5.jpg";int pageNo = s.getFieldPositions("img").get(0).page;Rectangle signRect = s.getFieldPositions("img").get(0).position;float x = signRect.getLeft();float y = signRect.getBottom();// 读图⽚Image image = Image.getInstance(imgpath);// 获取操作的页⾯PdfContentByte under = ps.getOverContent(pageNo);// 根据域的⼤⼩缩放图⽚image.scaleToFit(signRect.getWidth(), signRect.getHeight());// 添加图⽚image.setAbsolutePosition(x, y);under.addImage(image);@SuppressWarnings("resource")FileOutputStream fos = new FileOutputStream("d:\\shouju_fb.pdf");fos.write(bos.toByteArray());return true;} catch (IOException | DocumentException e) {System.out.println("读取⽂件异常");e.printStackTrace();return false;}finally {try {bos.close();ps.close();reader.close();} catch (IOException | DocumentException e) {System.out.println("关闭流异常");e.printStackTrace();}}}public static void main(String[] args) {Map<String, Object> data = new HashMap<String, Object>();data.put("id", "12312321");data.put("name", "⼩帅哥");data.put("sex", "男");data.put("age", "21");PDFUtil.createPDF("D:/n5.jpg",data);}}还有相应的编辑pdf表单的⼯具,默认⽤Adobe Acrobat。

itextpdf 填充pdf模板 获取文本高度的方法

itextpdf 填充pdf模板 获取文本高度的方法

itextpdf 填充pdf模板获取文本高度的方法(原创实用版3篇)目录(篇1)1.ITextPDF 简介2.填充 PDF 模板的方法3.获取文本高度的方法4.总结正文(篇1)1.ITextPDF 简介iTextPDF 是一个用于处理 PDF 文件的 Java 库。

它提供了许多功能,如创建、编辑、解析和填写 PDF 表单等。

在日常工作中,我们可能会使用 iTextPDF 来生成或处理 PDF 文件,如填写表单、合并文档等。

2.填充 PDF 模板的方法在使用 iTextPDF 时,我们可能会遇到需要填充 PDF 模板的情况。

例如,我们需要将一些动态生成的数据填充到 PDF 表单中。

这时,我们可以使用 iTextPDF 提供的 API 来实现这一功能。

首先,我们需要导入 iTextPDF 库,并创建一个 Document 对象。

然后,通过 open() 方法打开需要填充的 PDF 文件。

接下来,使用getDocument().getReader() 方法获取 PDF 文件的 Reader 对象。

通过Reader 对象,我们可以遍历 PDF 文件中的每一页,并获取页面上的文本。

在遍历过程中,我们可以使用 PdfStamper 类来修改 PDF 文件。

PdfStamper 类提供了许多方法,如 setText() 方法用于设置文本,setFont() 方法用于设置字体,setColor() 方法用于设置颜色等。

通过这些方法,我们可以将动态生成的数据填充到 PDF 表单中。

3.获取文本高度的方法在填充 PDF 模板时,我们可能需要获取文本的高度。

为了实现这一功能,我们可以使用 iTextPDF 提供的测量工具——PdfContentByte。

PdfContentByte 类提供了许多方法,如 getHeight() 方法用于获取文本的高度,getWidth() 方法用于获取文本的宽度等。

首先,我们需要创建一个 PdfContentByte 对象。

java pdfstamper用法

java pdfstamper用法

java pdfstamper用法Java PDFStamper用法PDFStamper是Java中一个重要的类,它可以用于在已有的PDF 文档上进行编辑和修改。

下面是一些常见的用法和示例。

创建PDFStamper对象PDFStamper是通过PdfWriter来创建的。

以下是创建PDFStamper 对象的基本代码:PdfReader reader = new PdfReader("");PdfStamper stamper = new PdfStamper(reader, new FileOutp utStream(""));在PDF文档中添加文本您可以使用PDFStamper在PDF文档的指定位置添加文本。

下面是一个例子:PdfContentByte content = (pageNumber);BaseFont font = (, , );();(font, 12);(x, y);("Hello, World!");();在PDF文档中添加图片您可以使用PDFStamper在PDF文档的指定位置添加图片。

下面是一个例子:Image image = ("");(x, y);(image);设置文本样式和颜色您可以使用PDFStamper设置文本的样式和颜色。

以下是一些示例:- 设置字体大小:java (font, 12); - 设置字体颜色:java (); - 设置文本的对齐方式:java (_CENTER, "Hello,World!", x, y, rotation);加密PDF文档您可以使用PDFStamper加密PDF文档以保护其内容。

以下是一个例子:(USER_PASSWORD, OWNER_PASSWORD, _PRINTING, _AES_12 8);关闭PDFStamper对象在完成PDF文档编辑后,需要关闭PDFStamper以确保文件被正确保存。

java pdfacroform.drawsinglelineoftext的用法

java pdfacroform.drawsinglelineoftext的用法

java pdfacroform.drawsinglelineoftext的用法Java PDF Acroform 的使用:绘制单行文本一、简介PDF Acroform 是用于在 PDF 文档中添加交互功能的一种技术。

它允许在 PDF 文档中添加表单字段,如文本框、选择框、按钮等。

在Java 中使用 PDF Acroform,可以通过 Acroform 库来实现。

本文将详细介绍 Java PDF Acroform 中`drawSingleLineOfText` 方法的用法,该方法用于在 PDF 文档中绘制单行文本。

二、准备工作确保已将所需的库和依赖项添加到项目中。

以下是一些必要的库:* Apache PDFBox:用于处理 PDF 文档的库。

* Apache Commons IO:用于文件操作和输入输出的库。

三、代码示例以下是一个简单的 Java 代码示例,演示如何使用 PDFBox 和Acroform 库来绘制单行文本:```javaimport org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.pdmodel.PDPage;import org.apache.pdfbox.pdmodel.PDPageContentStream;import mon.PDRectangle;import org.apache.pdfbox.pdmodel.font.PDType1Font;import org.apache.pdfbox.pdformecture.PDAcroForm;importorg.apache.pdfbox.pdmodel.interactive.form.PDRectangle;import org.apache.pdfbox.pdmodel.interactive.form.PDField;public class DrawSingleLineOfText {public static void main(String[] args) {try {// 创建 PDF 文档和页面PDDocument document = new PDDocument();PDPage page = new PDPage(PDRectangle.A4);document.addPage(page);// 创建表单对象并添加到文档中PDAcroForm acroForm = newPDAcroForm(document);document.setAcroFormData(acroForm);// 创建文本字段对象并设置属性PDField field =acroForm.getField("myTextField");field.setPartialName("myTextField"); // 设置字段名称和部分名称,以便在 PDF 中唯一标识该字段field.setAppearance(PDField.APPEARANCE_TEXTFIELD); // 设置字段类型为文本框field.setValue("This is a line of text"); // 设置字段初始值field.setFlags(PDField.FLAG_NO_BORDER); // 设置字段边框为无边框样式,以便绘制文本而不影响其他元素布局 field.setBoundingBox(new PDRectangle(newfloat[] {50, 50, 200, 5})); // 设置字段边界框位置和大小,以便在指定位置绘制文本框field.setLocked(true); // 设置字段为锁定状态,防止用户修改字段值field.setNeedAppearances(true); // 设置是否需要显示文本字段的位置和大小,影响页面布局和用户体验,需要根据实际需求进行调整acroForm.getFields().add(field); // 将文本字段添加到表单中// 在指定位置绘制单行文本框并将内容填入其中PDRectangle rect = new PDRectangle(new float[] {50, 50, 200, 5}); // 指定文本框位置和大小PDPageContentStream contentStream = new PDPageContentStream(document, rect, AppendMode.APPEND, true);contentStream.beginText(); // 开始绘制文本框内容contentStream.setFont(PDType1Font.HELVETICA_BOLD); // 设置字体样式和大小,可以根据实际需求进行调整contentStream.newLineAtOffset(5, -20); // 在指定位置绘制第一行文本的开头,需要与边框和间距进行适当调整以确保内容居中显示在文本框中contentStream.showText("This is a line of text"); // 显示第一行文本内容,需要根据实际需求进行调整以确保内容居中显示在文本框中,并且不会超出边界框范围contentStream.endText(); // 结束绘制文本框内容并保存结果到 PDF 中contentStream.close(); // 关闭内容流对象并释放资源// 保存 PDF 文档到文件系统或输出流中document.save("output/myFormDocument.pdf"); // 根据实际需求调整文件路径和名称,并确保文件路径存在且具有写入权限。

pdf表单java编程

pdf表单java编程

pdf表单java编程要在Java中处理PDF表单,你可以使用Apache的PDFBox库。

PDFBox是一个开源的Java PDF库,可以用于创建、渲染、打印、分割、合并、修改和抽取文本和元数据等操作。

下面是一个简单的示例,展示如何使用PDFBox库在PDF表单上填写数据:javaimport org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; import org.apache.pdfbox.pdmodel.interactive.form.PDField; importorg.apache.pdfbox.pdmodel.interactive.form.PDTerminalField;import java.io.File;import java.io.IOException;public class FillPDFForm {public static void main(String[] args) {try {// 加载PDF文档PDDocument pdfDocument = PDDocument.load(new File("path_to_your_pdf_file"));// 获取表单PDAcroForm acroForm =pdfDocument.getDocumentCatalog().getAcroForm();if (acroForm != null) {// 填写表单字段PDField field =acroForm.getField("your_field_name");if (field != null) {field.setValue("your_field_value"); } else {System.err.println("字段不存在");}} else {System.err.println("此PDF没有表单");}// 保存填写后的表单pdfDocument.save("path_to_filled_pdf_file"); // 关闭文档pdfDocument.close();} catch (IOException e) {e.printStackTrace();}}}在这个示例中,你需要替换path_to_your_pdf_file为你的PDF文件的路径,your_field_name为你要填写的表单字段名称,以及your_field_value为你要填入的值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java 创建、填充PDF表单域表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。

下面的示例中,将分享通过Java编程在PDF中添加以及填充表单域的方法。

包括:文本框、复选框、单选按钮、列表框、组合框、签名域、按钮等。

这里填充表单域可分为2种情况,一种是在创建表单域时填充,一种是加载已经创建好表单域的文档进行填充。

此外,对于已经创建表单域并填写好的文档,也可以设置只读,防止修改、编辑。

要点概括:1.创建表单域2.填充表单域3.设置表单域只读工具:Free Spire.PDF for Java v2.0.0(免费版)Jar文件导入步骤1:在Java程序中新建一个文件夹可命名为Lib。

并将产品包中的2个jar文件复制到新建的文件夹下。

步骤2:复制文件后,添加到引用类库:选中这两个jar文件,点击鼠标右键,选择“Build Path”–“Add to Build Path”。

完成引用。

Java代码示例(供参考)1.创建并填充PDF表单域import java.awt.*;import java.awt.geom.Point2D;import java.awt.geom.Rectangle2D;import com.spire.pdf.FileFormat;import com.spire.pdf.PdfDocument;import com.spire.pdf.PdfPageBase;import com.spire.pdf.fields.*;import com.spire.pdf.graphics.*;public class AddFormFieldsToPdf {public static void main(String[] args) throws Exception {//创建PdfDocument对象,并添加页面PdfDocument doc = new PdfDocument();PdfPageBase page = doc.getPages().add();//初始化位置变量float baseX = 100;float baseY = 0;//创建画刷对象PdfSolidBrush brush1 = new PdfSolidBrush(newPdfRGBColor(Color.BLUE));PdfSolidBrush brush2 = new PdfSolidBrush(newPdfRGBColor(Color.black));//创建TrueType字体PdfTrueTypeFont font= new PdfTrueTypeFont(new Font("Arial Unicode MS",Font.PLAIN,10),true);//添加文本框String text = "姓名:";//添加文本page.getCanvas().drawString(text, font, brush1, newPoint2D.Float(0, baseY));//在PDF中绘制文字Rectangle2D.Float tbxBounds= new Rectangle2D.Float(baseX, baseY, 150, 15);//创建Rectangle2D对象PdfTextBoxField textBox = new PdfTextBoxField(page, "TextBox");//创建文本框对象textBox.setBounds(tbxBounds);//设置文本框的BoundstextBox.setText("刘兴");//填充文本框textBox.setFont(font);//应用文本框的字体doc.getForm().getFields().add(textBox);//添加文本框到PDF域的集合baseY +=25;//添加复选框page.getCanvas().drawString("所在院系:", font, brush1, newPoint2D.Float(0, baseY));java.awt.geom.Rectangle2D.Float rec1 = newjava.awt.geom.Rectangle2D.Float(baseX, baseY, 15, 15);PdfCheckBoxField checkBoxField = new PdfCheckBoxField(page, "CheckBox1");//创建第一个复选框对象checkBoxField.setBounds(rec1);checkBoxField.setChecked(false);//填充复选框page.getCanvas().drawString("经管系", font, brush2, newPoint2D.Float(baseX + 20, baseY));java.awt.geom.Rectangle2D.Float rec2 = newjava.awt.geom.Rectangle2D.Float(baseX + 70, baseY, 15, 15);PdfCheckBoxField checkBoxField1 = new PdfCheckBoxField(page,"CheckBox2");//创建第二个复选框对象checkBoxField1.setBounds(rec2);checkBoxField1.setChecked(true);//填充复选框page.getCanvas().drawString("创新班", font, brush2, newPoint2D.Float(baseX+90, baseY));doc.getForm().getFields().add(checkBoxField);//添加复选框到PDFbaseY += 25;//添加列表框page.getCanvas().drawString("录取批次:", font, brush1, new Point2D.Float(0, baseY));java.awt.geom.Rectangle2D.Float rec = newjava.awt.geom.Rectangle2D.Float(baseX, baseY, 150, 50);PdfListBoxField listBoxField = new PdfListBoxField(page, "ListBox");//创建列表框对象listBoxField.getItems().add(new PdfListFieldItem("第一批次", "item1"));listBoxField.getItems().add(new PdfListFieldItem("第二批次", "item2"));listBoxField.getItems().add(new PdfListFieldItem("第三批次", "item3"));;listBoxField.setBounds(rec);listBoxField.setFont(font);listBoxField.setSelectedIndex(0);//填充列表框doc.getForm().getFields().add(listBoxField);//添加列表框到PDFbaseY += 60;//添加单选按钮page.getCanvas().drawString("招收方式:", font, brush1, new Point2D.Float(0, baseY));PdfRadioButtonListField radioButtonListField = new PdfRadioButtonListField(page, "Radio");//创建单选按钮对象PdfRadioButtonListItem radioItem1 = new PdfRadioButtonListItem("Item1");//创建第一个单选按钮radioItem1.setBounds(new Rectangle2D.Float(baseX, baseY, 15, 15));page.getCanvas().drawString("全日制", font, brush2, newPoint2D.Float(baseX + 20, baseY));PdfRadioButtonListItem radioItem2 = newPdfRadioButtonListItem("Item2");//创建第二个单选按钮radioItem2.setBounds(new Rectangle2D.Float(baseX+ 70, baseY, 15, 15));page.getCanvas().drawString("成人教育", font, brush2, newPoint2D.Float(baseX + 90, baseY));radioButtonListField.getItems().add(radioItem1);radioButtonListField.getItems().add(radioItem2);radioButtonListField.setSelectedIndex(0);//选择填充第一个单选按钮doc.getForm().getFields().add(radioButtonListField);//添加单选按钮到PDFbaseY += 25;//添加组合框page.getCanvas().drawString("最高学历:", font, brush1, newPoint2D.Float(0, baseY));Rectangle2D.Float cmbBounds= new Rectangle2D.Float(baseX, baseY, 150, 15);//创建cmbBounds对象PdfComboBoxField comboBoxField = new PdfComboBoxField(page, "ComboBox");//创建comboBoxField对象comboBoxField.setBounds(cmbBounds);comboBoxField.getItems().add(new PdfListFieldItem("博士", "item1"));comboBoxField.getItems().add(new PdfListFieldItem("硕士", "itme2"));comboBoxField.getItems().add(new PdfListFieldItem("本科", "item3"));comboBoxField.getItems().add(new PdfListFieldItem("大专", "item4"));comboBoxField.setSelectedIndex(0);comboBoxField.setFont(font);doc.getForm().getFields().add(comboBoxField);//添加组合框到PDFbaseY += 25;//添加签名域page.getCanvas().drawString("本人签字确认\n以上信息属实:", font, brush1, new Point2D.Float(0, baseY));PdfSignatureField sgnField= newPdfSignatureField(page,"sgnField");//创建sgnField对象Rectangle2D.Float sgnBounds= new Rectangle2D.Float(baseX, baseY, 150, 80);//创建sgnBounds对象sgnField.setBounds(sgnBounds);doc.getForm().getFields().add(sgnField);//添加sgnField到PDFbaseY += 90;//添加按钮page.getCanvas().drawString("", font, brush1, newPoint2D.Float(0, baseY));Rectangle2D.Float btnBounds= new Rectangle2D.Float(baseX, baseY, 50, 15);//创建btnBounds对象PdfButtonField buttonField = new PdfButtonField(page, "Button");//创建buttonField对象buttonField.setBounds(btnBounds);buttonField.setText("提交");//设置按钮显示文本buttonField.setFont(font);doc.getForm().getFields().add(buttonField);//添加按钮到PDF//保存文档doc.saveToFile("result.pdf", FileFormat.PDF);}}创建(填充)效果:2.加载并填充已有的表单域文档测试文档如下:import com.spire.pdf.FileFormat;import com.spire.pdf.PdfDocument;import com.spire.pdf.fields.PdfField;import com.spire.pdf.widget.*;public class FillFormField_PDF{public static void main(String[] args ){//创建PdfDocument 对象,并加载PDF 文档PdfDocument doc = new PdfDocument();doc .loadFromFile("output.pdf");//获取文档中的域PdfFormWidget form = (PdfFormWidget) doc .getForm(); //获取域控件集合PdfFormFieldWidgetCollection formWidgetCollection = form .getFieldsWidget();//遍历域控件并填充数据for (int i = 0; i < formWidgetCollection.getCount(); i++) {PdfField field = formWidgetCollection.get(i);if (field instanceof PdfTextBoxFieldWidget) {PdfTextBoxFieldWidget textBoxField = (PdfTextBoxFieldWidget) field;textBoxField.setText("吴敏");}if (field instanceof PdfCheckBoxWidgetFieldWidget) {PdfCheckBoxWidgetFieldWidget checkBoxField = (PdfCheckBoxWidgetFieldWidget) field;switch(checkBoxField.getName()){case"CheckBox1":checkBoxField.setChecked(true);break;case"CheckBox2":checkBoxField.setChecked(true);break;}}if (field instanceof PdfRadioButtonListFieldWidget) {PdfRadioButtonListFieldWidget radioButtonListField = (PdfRadioButtonListFieldWidget) field;radioButtonListField.setSelectedIndex(1);}if (field instanceof PdfListBoxWidgetFieldWidget) {PdfListBoxWidgetFieldWidget listBox = (PdfListBoxWidgetFieldWidget) field;listBox.setSelectedIndex(1);}if (field instanceof PdfComboBoxWidgetFieldWidget) {PdfComboBoxWidgetFieldWidget comboBoxField = (PdfComboBoxWidgetFieldWidget) field;comboBoxField.setSelectedIndex(1);}}//保存文档doc.saveToFile("FillFormFields.pdf", FileFormat.PDF); }}填充效果:3.限制表单域编辑(只读)import com.spire.pdf.PdfDocument;public class FieldReadonly_PDF {public static void main(String[] args) throws Exception { {//创建PdfDocument对象,并加载包含表单域的PDF文档PdfDocument pdf = new PdfDocument();pdf.loadFromFile("test.pdf");//将文档中的所有表单域设置为只读pdf.getForm().setReadOnly(true);//保存文档pdf.saveToFile("result.pdf");}}生成的文档中,表单域将不可编辑,为只读状态。

相关文档
最新文档