-
Notifications
You must be signed in to change notification settings - Fork 13
/
Listing_13_15_InspectForm.java
62 lines (55 loc) · 2.34 KB
/
Listing_13_15_InspectForm.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.itextpdf.samples.book.part4.chapter13;
import com.itextpdf.forms.fields.PdfFormCreator;
import com.itextpdf.kernel.pdf.PdfDictionary;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfName;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.xmp.XMPException;
import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfFormField;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.sql.SQLException;
import java.util.Map;
public class Listing_13_15_InspectForm {
public static final String DEST
= "./target/book/part4/chapter13/Listing_13_15_InspectForm_fieldflags.txt";
public static final String SUBSCRIBE
= "./src/main/resources/pdfs/subscribe.pdf";
public static void main(String args[]) throws IOException, SQLException, XMPException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new Listing_13_15_InspectForm().manipulatePdf(DEST);
}
protected void manipulatePdf(String dest) throws IOException, SQLException, XMPException {
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(dest));
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SUBSCRIBE));
PdfAcroForm form = PdfFormCreator.getAcroForm(pdfDoc, true);
Map<String, PdfFormField> fields = form.getAllFormFields();
PdfDictionary dict;
int flags;
PdfFormField item;
for (String key : fields.keySet()) {
out.write(key);
item = fields.get(key);
dict = item.getPdfObject();
if (null == dict.getAsNumber(PdfName.Ff)) {
// being here means that we should inspect widget annotations, (see getMerged() in itext5)
dict = item.getWidgets().get(0).getPdfObject();
}
if (null != dict.getAsNumber(PdfName.Ff)) {
flags = dict.getAsNumber(PdfName.Ff).intValue();
if ((flags & PdfFormField.FF_PASSWORD) > 0)
out.write(" -> password");
if ((flags & PdfFormField.FF_MULTILINE) > 0)
out.write(" -> multiline");
}
out.write('\n');
}
out.flush();
out.close();
pdfDoc.close();
}
}