Membuat Tagged PDF di Java
Membuat PDF ber-tag berarti menambahkan elemen struktur yang membuat dokumen lebih mudah divalidasi terhadap persyaratan aksesibilitas PDF/UA dan lebih mudah diinterpretasikan oleh teknologi bantuan.
Membuat dokumen PDF ber‑tag sederhana
Gunakan contoh ini ketika Anda membutuhkan PDF ber‑tag minimal dengan judul dan paragraf dalam pohon struktur logis.
- Buat PDF baru
Documentdan dapatkan ituITaggedContent. - Atur judul dokumen dan bahasa, lalu buat elemen header dan paragraf yang diperlukan.
- Tambahkan Structure Elements ke elemen root dan simpan dokumen.
public static void createTaggedPdfDocumentSimple(Path outputFile) {
try (Document document = new Document()) {
ITaggedContent taggedContent = document.getTaggedContent();
StructureElement rootElement = taggedContent.getRootElement();
taggedContent.setTitle("Tagged Pdf Document");
taggedContent.setLanguage("en-US");
HeaderElement mainHeader = taggedContent.createHeaderElement();
mainHeader.setText("Main Header");
ParagraphElement paragraphElement = taggedContent.createParagraphElement();
paragraphElement.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
+ "Aenean nec lectus ac sem faucibus imperdiet. Sed ut erat ac magna ullamcorper hendrerit. "
+ "Cras pellentesque libero semper, gravida magna sed, luctus leo.");
rootElement.appendChild(mainHeader, true);
rootElement.appendChild(paragraphElement, true);
document.save(outputFile.toString());
}
}
Membuat dokumen PDF ber-tag lanjutan
Contoh ini membangun struktur yang lebih kaya dengan mencampur heading, paragraf, span, kutipan, dan pengaturan layout yang eksplisit.
- Buat PDF baru
Documentdan menginisialisasi metadata konten yang ditandai. - Bangun struktur heading dan paragraf, lalu tambahkan span dan elemen kutipan di dalam paragraf.
- Sesuaikan posisi paragraf, tambahkan elemen ke struktur akar, dan simpan dokumen.
public static void createTaggedPdfDocumentAdv(Path outputFile) {
try (Document document = new Document()) {
ITaggedContent taggedContent = document.getTaggedContent();
StructureElement rootElement = taggedContent.getRootElement();
taggedContent.setTitle("Tagged Pdf Document");
taggedContent.setLanguage("en-US");
HeaderElement header1 = taggedContent.createHeaderElement(1);
header1.setText("Header Level 1");
ParagraphElement paragraphWithQuotes = taggedContent.createParagraphElement();
paragraphWithQuotes.getStructureTextState().setFont(FontRepository.findFont("Arial"));
PositionSettings positionSettings = new PositionSettings();
positionSettings.setMargin(new MarginInfo(10, 5, 10, 5));
paragraphWithQuotes.adjustPosition(positionSettings);
SpanElement spanElement1 = taggedContent.createSpanElement();
spanElement1.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
+ "Aenean nec lectus ac sem faucibus imperdiet. Sed ut erat ac magna ullamcorper hendrerit. ");
QuoteElement quoteElement = taggedContent.createQuoteElement();
quoteElement.setText("Sed vulputate, quam sed lacinia luctus, ipsum nibh fringilla purus.");
quoteElement.getStructureTextState().setFontStyle(Nullable.of(FontStyles.Bold | FontStyles.Italic));
SpanElement spanElement2 = taggedContent.createSpanElement();
spanElement2.setText(" Sed non consectetur elit.");
paragraphWithQuotes.appendChild(spanElement1, true);
paragraphWithQuotes.appendChild(quoteElement, true);
paragraphWithQuotes.appendChild(spanElement2, true);
rootElement.appendChild(header1, true);
rootElement.appendChild(paragraphWithQuotes, true);
document.save(outputFile.toString());
}
}
Menambahkan gaya teks ke konten bertanda
Gunakan contoh ini ketika konten paragraf ber-tag harus membawa informasi font, warna, dan gaya secara eksplisit.
- Buat Tagged PDF baru
Document. - Buat elemen paragraf dan konfigurasikan status teks strukturnya.
- Atur teks paragraf dan simpan dokumen.
public static void addStyle(Path outputFile) {
try (Document document = new Document()) {
ITaggedContent taggedContent = document.getTaggedContent();
taggedContent.setTitle("Tagged Pdf Document");
taggedContent.setLanguage("en-US");
ParagraphElement paragraphElement = taggedContent.createParagraphElement();
taggedContent.getRootElement().appendChild(paragraphElement, true);
paragraphElement.getStructureTextState().setFontSize(Nullable.of(18.0f));
paragraphElement.getStructureTextState().setForegroundColor(Color.getRed());
paragraphElement.getStructureTextState().setFontStyle(Nullable.of(FontStyles.Italic));
paragraphElement.setText("Red italic text.");
document.save(outputFile.toString());
}
}
Menambahkan elemen struktur gambar
Contoh ini menunjukkan cara membuat gambar berlabel dengan teks alternatif, judul, tag khusus, konten gambar, dan penempatan.
- Buat Tagged PDF baru
Document. - Buat sebuah
FigureElement, atur metadata yang dapat diakses, dan tetapkan gambar. - Sesuaikan posisi gambar dan simpan dokumen.
public static void illustrateStructureElements(Path imageFile, Path outputFile) {
try (Document document = new Document()) {
ITaggedContent taggedContent = document.getTaggedContent();
taggedContent.setTitle("Tagged Pdf Document");
taggedContent.setLanguage("en-US");
FigureElement figure1 = taggedContent.createFigureElement();
taggedContent.getRootElement().appendChild(figure1, true);
figure1.setAlternativeText("Figure One");
figure1.setTitle("Image 1");
figure1.setTag("Fig1");
figure1.setImage(imageFile.toString(), 300);
PositionSettings positionSettings = new PositionSettings();
MarginInfo marginInfo = new MarginInfo();
marginInfo.setLeft(50);
marginInfo.setTop(20);
positionSettings.setMargin(marginInfo);
figure1.adjustPosition(positionSettings);
document.save(outputFile.toString());
}
}
Memvalidasi PDF ber-tag untuk PDF/UA
Gunakan contoh ini ketika Anda perlu memeriksa apakah PDF ber‑tag memenuhi aturan validasi PDF/UA.
- Buka PDF sumber
Document. - Jalankan validasi terhadap
PdfFormat.PDF_UA_1. - Tuliskan log validasi dan cetak hasil validasi.
public static void validateTaggedPdf(Path inputFile, Path logFile) {
try (Document document = new Document(inputFile.toString())) {
boolean isValid = document.validate(logFile.toString(), PdfFormat.PDF_UA_1);
System.out.println("Is Valid: " + isValid);
}
}
Menyesuaikan posisi elemen struktur
Contoh ini menerapkan pengaturan margin dan perataan eksplisit pada paragraf yang ditandai.
- Buat Tagged PDF baru
Document. - Tambahkan elemen struktur paragraf dan siapkan
PositionSettings. - Terapkan pengaturan posisi ke paragraf dan simpan dokumen.
public static void adjustPosition(Path outputFile) {
try (Document document = new Document()) {
ITaggedContent taggedContent = document.getTaggedContent();
taggedContent.setTitle("Tagged Pdf Document");
taggedContent.setLanguage("en-US");
ParagraphElement paragraph = taggedContent.createParagraphElement();
taggedContent.getRootElement().appendChild(paragraph, true);
paragraph.setText("Text.");
PositionSettings positionSettings = new PositionSettings();
MarginInfo marginInfo = new MarginInfo();
marginInfo.setLeft(300);
marginInfo.setTop(20);
marginInfo.setRight(0);
marginInfo.setBottom(0);
positionSettings.setMargin(marginInfo);
positionSettings.setHorizontalAlignment(HorizontalAlignment.None);
positionSettings.setVerticalAlignment(VerticalAlignment.None);
positionSettings.setFirstParagraphInColumn(false);
positionSettings.setKeptWithNext(false);
positionSettings.setInNewPage(false);
positionSettings.setInLineParagraph(false);
paragraph.adjustPosition(positionSettings);
document.save(outputFile.toString());
}
}
Mengonversi PDF yang ada ke PDF/UA dengan penandaan otomatis
Gunakan pendekatan ini ketika PDF yang ada harus dikonversi ke PDF/UA dan ditandai secara otomatis selama konversi.
- Buka PDF sumber
Document. - Buat
PdfFormatConversionOptionsdan aktifkan penandaan otomatis. - Jalankan konversi dan simpan dokumen output.
public static void convertToPdfUaWithAutomaticTagging(Path inputFile, Path outputFile, Path logFile) {
try (Document document = new Document(inputFile.toString())) {
PdfFormatConversionOptions options = new PdfFormatConversionOptions(
logFile.toString(), PdfFormat.PDF_UA_1, ConvertErrorAction.Delete);
AutoTaggingSettings autoTaggingSettings = new AutoTaggingSettings();
autoTaggingSettings.setEnableAutoTagging(true);
autoTaggingSettings.setHeadingRecognitionStrategy(HeadingRecognitionStrategy.Auto);
options.setAutoTaggingSettings(autoTaggingSettings);
document.convert(options);
document.save(outputFile.toString());
}
}
Membuat Tagged PDF dengan form bidang yang dapat diakses
Contoh ini menandai bidang formulir tanda tangan sehingga menjadi bagian dari pohon struktur logis.
- Buat PDF baru
Documentdan tambahkan halaman dengan bidang Form. - Tambahkan FormField ke koleksi formulir dokumen.
- Buat elemen struktur Form ber-tag, kaitkan dengan bidang, dan simpan dokumen.
public static void createPdfWithTaggedFormField(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
ITaggedContent taggedContent = document.getTaggedContent();
StructureElement rootElement = taggedContent.getRootElement();
SignatureField signatureField = new SignatureField(page, new Rectangle(50, 50, 100, 100, true));
signatureField.setPartialName("Signature1");
signatureField.setAlternateName("signature 1");
Form formFields = document.getForm();
formFields.add(signatureField);
FormElement form = taggedContent.createFormElement();
form.setAlternativeText("form 1");
form.tag(signatureField);
rootElement.appendChild(form, true);
document.save(outputFile.toString());
}
}
Membuat PDF ber-tag dengan halaman TOC
Gunakan contoh ini ketika PDF ber‑tag perlu menyertakan halaman daftar isi dasar yang ditautkan ke heading dokumen.
- Buat Tagged PDF baru
Documentdan tambahkan halaman TOC. - Buat
TOCElementdan sebuah header yang seharusnya muncul di TOC. - Tautkan entri TOC ke judul dan simpan dokumen.
public static void createPdfWithTocPage(Path outputFile) {
try (Document document = new Document()) {
ITaggedContent content = document.getTaggedContent();
StructureElement rootElement = content.getRootElement();
content.setLanguage("en-US");
Page tocPage = document.getPages().add();
tocPage.setTocInfo(new TocInfo());
TOCElement tocElement = content.createTOCElement();
rootElement.appendChild(tocElement, true);
document.getPages().add();
HeaderElement header = content.createHeaderElement(1);
header.setText("1. Header");
rootElement.appendChild(header, true);
TOCIElement toci = content.createTOCIElement();
tocElement.appendChild(toci, true);
header.addEntryToTocPage(tocPage, toci);
toci.addRef(header);
document.save(outputFile.toString());
}
}
Membuat PDF bertanda lanjutan dengan halaman TOC
Contoh ini membangun TOC ber‑tag yang lebih kompleks dengan judul halaman yang ditautkan, item daftar bersarang, dan beberapa tingkat heading.
- Buat Tagged PDF baru
Documentdan siapkan halaman TOC dengan judul yang terlihat. - Buat struktur TOC, tautkan judul dan entri TOC ke heading dan item daftar, dan tambahkan elemen konten terkait.
- Simpan dokumen akhir dengan struktur TOC lanjutan.
public static void createPdfWithTocPageAdvanced(Path outputFile) {
try (Document document = new Document()) {
ITaggedContent content = document.getTaggedContent();
StructureElement rootElement = content.getRootElement();
content.setLanguage("en-US");
Page tocPage = document.getPages().add();
tocPage.setTocInfo(new TocInfo());
tocPage.getTocInfo().setTitle(new TextFragment("Table of Contents"));
TOCElement tocElement = content.createTOCElement();
HeaderElement headerForTocPageTitle = content.createHeaderElement(1);
tocElement.linkTocPageTitleToHeaderElement(tocPage, headerForTocPageTitle);
rootElement.appendChild(headerForTocPageTitle, true);
rootElement.appendChild(tocElement, true);
document.getPages().add();
HeaderElement header = content.createHeaderElement(1);
header.setText("1. Header");
rootElement.appendChild(header, true);
TOCIElement toci = content.createTOCIElement();
tocElement.appendChild(toci, true);
header.addEntryToTocPage(tocPage, toci);
toci.addRef(header);
ListElement listElement = content.createListElement();
for (int i = 1; i < 4; i++) {
ListLIElement li = content.createListLIElement();
listElement.appendChild(li, true);
HeaderElement subHeader = content.createHeaderElement(2);
subHeader.getStructureTextState().setFontSize(Nullable.of(14.0f));
subHeader.setLanguage("en-US");
subHeader.setText("1." + i + " subheader ");
subHeader.addEntryToTocPage(tocPage, li);
li.addRef(subHeader);
ParagraphElement p = content.createParagraphElement();
p.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
p.setLanguage("en-US");
rootElement.appendChild(subHeader, true);
rootElement.appendChild(p, true);
}
toci.appendChild(listElement, true);
HeaderElement header2 = content.createHeaderElement(1);
header2.setText("2. Header");
rootElement.appendChild(header2, true);
TOCIElement toci2 = content.createTOCIElement();
tocElement.appendChild(toci2, true);
header2.addEntryToTocPage(tocPage, toci2);
toci2.addRef(header2);
document.save(outputFile.toString());
}
}