0
0

More than 1 year has passed since last update.

Javaでタグ付きPDFを作成する方法

Last updated at Posted at 2023-01-06

タグ付きPDFファイルは、構造要素を持つPDFファイルです。これらは、補助技術に依存するユーザがコンテンツにアクセスできるようにするために使用されます。Spire.PDF for Javaは、Javaアプリケーションでタグ付きPDFを作成することをサポートしています。この記事では、テキスト、画像、図形、表などのPDF要素にタグを追加する方法について説明します。

【依存関係の追加】

この方法は、Spire.PDF for Javaが必要ですので、先にjarファイルをインポートしてください。

1. Maven

Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf</artifactId>
        <version>8.12.6</version>
    </dependency>
</dependencies>

2. 公式サイトよりJarファイルをダウンロード

まず、Spire.PDF for Javaの公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Pdf.jarファイルを依存関係としてプロジェクトにインポートしてください。

テキストにタグを追加する

無料のSpire.PDF for Javaは、タグ付きテキストを含むPDFを作成するPdfTaggedContentクラスを提供しています。以下は、その詳細な手順です。

  • PdfDocumentクラスオブジェクトを作成します。
  • 作成したPDF文書に PdfDocument.getPages.add() メソッドでページを追加しています。
  • PdfPageBase.setTabOrder(TabOrder.Structure) メソッドを用いて、タブオーダーをStructureに設定する。
  • PdfTaggedContentクラスのオブジェクトを作成します。
  • PdfTaggedContent.getStructureTreeRoot().appendChildElement() メソッドでドキュメントのルートに "document" 要素を追加し、Structure 要素を作成する。
  • PdfStructureElement.appendChildElement() メソッドを使用して、"document" 要素の下に "paragraph" 要素を追加します。
  • PdfStructureElement.beginMarkedContent() メソッドを使用して、見出し要素の開始を示す開始タグを追加します。
  • PdfPageBase.getCanvas.drawString() メソッドを使用して、ページに段落テキストを描画します。
  • PdfStructureElement.endMarkedContent() メソッドを使用して終了タグを追加し、段落要素がここで終了することを意味するようにします。
  • PdfDocument.saveToFile() メソッドを使用してドキュメントを保存します。

Java

import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import com.spire.pdf.interchange.taggedpdf.PdfStandardStructTypes;
import com.spire.pdf.interchange.taggedpdf.PdfStructureElement;
import com.spire.pdf.interchange.taggedpdf.PdfTaggedContent;

import java.awt.*;

public class createTaggedPDF {

    public static void main(String[] args) throws Exception {

        //PDFドキュメントを作成する
        PdfDocument doc = new PdfDocument();

        //ページを追加する
        PdfPageBase page = doc.getPages().add(PdfPageSize.A4, new PdfMargins(20));

        //タブオーダーを設定する
        page.setTabOrder(TabOrder.Structure);

        //PdfTaggedContentクラスのインスタンスを作成する
        PdfTaggedContent taggedContent = new PdfTaggedContent(doc);

        //ドキュメントのタイトルと言語を設定する
        taggedContent.setLanguage("ja-JP");
        taggedContent.setTitle("タグ付きPDF");

        //フォントを設定する
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Gothic UI",Font.PLAIN,12), true);
        PdfSolidBrush brush = new PdfSolidBrush(new PdfRGBColor(Color.black));

        //Structure要素を作成する
        PdfStructureElement article = taggedContent.getStructureTreeRoot().appendChildElement(PdfStandardStructTypes.Document);
        PdfStructureElement paragraph1 = article.appendChildElement(PdfStandardStructTypes.Paragraph);
        PdfStructureElement span1 = paragraph1.appendChildElement(PdfStandardStructTypes.Span);
        article.setTitle("テキストのタグ");

        //タグ付き段落を追加する
        span1.beginMarkedContent(doc.getPages().get(0));
        PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Justify);
        page.getCanvas().drawString("PDFドキュメントの1段落目", font, brush, new Rectangle(40, 80, 480, 80), format);
        paragraph1.setTitle("1つ目のテキストのタグ");
        span1.endMarkedContent(doc.getPages().get(0));

        //タグ付き段落をもう一つ追加する
        PdfStructureElement paragraph2 = article.appendChildElement(PdfStandardStructTypes.Paragraph);
        paragraph2.beginMarkedContent(doc.getPages().get(0));
        page.getCanvas().drawString("PDFドキュメントの2段落目",font, brush, new Rectangle(40, 160, 480, 60), format);
        paragraph2.endMarkedContent(doc.getPages().get(0));
        paragraph2.setTitle("2つ目のテキストのタグ");

        //ドキュメントを保存する
        String result = "タグ付きPDF.pdf";
        doc.saveToFile(result);
        doc.close();
    }
}

【出力されるPDFファイル】
テキストにタグを追加する

画像にタグを追加する

Spire.PDF for javaが提供するPdfTaggedContentインスタンスを使用することで、PDF文書内の画像にタグを追加することができます。

  • PdfDocumentクラスのオブジェクトを作成します。
  • 作成したPDF文書に PdfDocument.getPages.add() メソッドでページを追加しています。
  • PdfPageBase.setTabOrder(TabOrder.Structure) メソッドを使用して、タブオーダーをStructureに設定します。
  • PdfTaggedContentインスタンスのオブジェクトを作成します。
  • PdfTaggedContent.getStructureTreeRoot().appendChildElement() メソッドを使用して、ドキュメントのルートに "document" 要素を追加し、Structure 要素を作成します。
  • PdfStructureElement.appendChildElement() メソッドを用いて、"document" 要素の下に "figure" 要素を追加する。
  • PdfStructureElement.beginMarkedContent() メソッドを使用して、見出し要素の開始を示す開始タグを追加する。
  • PdfPageBase.getCanvas.drawImage() メソッドを使用して、ページ上に画像を描画します。
  • PdfStructureElement.endMarkedContent() メソッドで終了タグを追加し、画像要素がここで終了することを意味するようにします。
  • PdfDocument.saveToFile() メソッドを使用して、ドキュメントを保存します。

Java

import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import com.spire.pdf.interchange.taggedpdf.PdfStandardStructTypes;
import com.spire.pdf.interchange.taggedpdf.PdfStructureElement;
import com.spire.pdf.interchange.taggedpdf.PdfTaggedContent;

import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;


public class createTaggedPDFImage {

    public static void main(String[] args) throws Exception {

        //PdfDocumentクラスのオブジェクトを作成する
        PdfDocument doc = new PdfDocument();

        //ページを追加する
        PdfPageBase page = doc.getPages().add(PdfPageSize.A4, new PdfMargins(20));

        //タブオーダーを設定する
        page.setTabOrder(TabOrder.Structure);

        //PdfTaggedContentクラスのインスタンスを作成する
        PdfTaggedContent taggedContent = new PdfTaggedContent(doc);

        //ドキュメントのタイトルと言語を設定する
        taggedContent.setLanguage("ja-JP");
        taggedContent.setTitle("タグ付きPDF");

        //Structure要素を作成する
        PdfStructureElement article = taggedContent.getStructureTreeRoot().appendChildElement(PdfStandardStructTypes.Document);
        PdfStructureElement figure = article.appendChildElement(PdfStandardStructTypes.Figure);
        article.setTitle("画像のタグ");

        //タグ付き画像の追加
        figure.setAlt("代替テキスト");
        figure.beginMarkedContent(doc.getPages().get(0), null);
        PdfImage image = PdfImage.fromFile("Computer.png");
        Dimension2D dimension2D = new Dimension();
        dimension2D.setSize( 200,200);
        page.getCanvas().drawImage(image, new Point2D.Float(40, 80),dimension2D);
        figure.endMarkedContent(doc.getPages().get(0));
        figure.setTitle("画像にタグを付ける");

        //ドキュメントを保存する
        String result = "タグ付きPDF.pdf";
        doc.saveToFile(result);
        doc.close();
    }
}

【出力されるPDFファイル】
画像にタグを追加する

表にタグを追加する

Spire.PDF for javaは、PDFファイル内のテーブルにタグを追加することもサポートしています。ここで詳細な手順は次のとおりです。

  • PdfDocumentクラスオブジェクトを作成します。
  • PdfDocument.getPages.add() メソッドを使用して作成されたPDF文書にページを追加します。
  • PdfPageBase.setTabOrder(TabOrder.Structure) メソッドを使用して、タブオーダーをStructureに設定します。
  • PdfTaggedContentクラスのオブジェクトを作成します。
  • PdfTaggedContent.getStructureTreeRoot().appendChildElement() メソッドを使用して、ドキュメントのルートに "document" 要素を追加して構造体要素を作成します。
  • PdfStructureElement.appendChildElement() メソッドを用いて、"document" 要素の下に "table" 要素を追加します。
  • PdfStructureElement.beginMarkedContent() メソッドを使用して、見出し要素の先頭を示す開始タグを追加します。
  • PdfTable.draw(page, new Point2D.Float(x, y)) メソッドを用いて、PDFページに表を描画します。
  • PdfStructureElement.endMarkedContent() メソッドを使用して終了タグを追加し、表要素がここで終了することを意味するようにします。
  • PdfDocument.saveToFile() メソッドでドキュメントを保存します。

Java

import com.spire.pdf.*;
import com.spire.pdf.bookmarks.PdfTextStyle;
import com.spire.pdf.graphics.*;
import com.spire.pdf.interchange.taggedpdf.PdfStandardStructTypes;
import com.spire.pdf.interchange.taggedpdf.PdfStructureElement;
import com.spire.pdf.interchange.taggedpdf.PdfTaggedContent;
import com.spire.pdf.tables.PdfColumn;
import com.spire.pdf.tables.PdfHeaderSource;
import com.spire.pdf.tables.PdfTable;

import java.awt.*;
import java.awt.geom.Point2D;

public class createTaggedPDFTable {

    public static void main(String[] args) throws Exception {

        //PdfDocument クラスのオブジェクトを作成する
        PdfDocument doc = new PdfDocument();

        //ページを追加する
        PdfPageBase page = doc.getPages().add(PdfPageSize.A4, new PdfMargins(20));

        //タブオーダーを設定する
        doc.getPages().get(0).setTabOrder(TabOrder.Structure);

        //PdfTaggedContent クラスのオブジェクトを作成する
        PdfTaggedContent taggedContent = new PdfTaggedContent(doc);

        //ドキュメントのタイトルと言語を設定する
        taggedContent.setLanguage("ja-JP");
        taggedContent.setTitle("タグ付きPDF");

        //フォントとブラシを作成する
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Gothic UI",Font.PLAIN,14), true);
        PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Yu Mincho",Font.PLAIN,12), true);
        PdfSolidBrush brush = new PdfSolidBrush(new PdfRGBColor(Color.black));

        //Structure要素を作成する
        PdfStructureElement article = taggedContent.getStructureTreeRoot().appendChildElement(PdfStandardStructTypes.Document);
        PdfStructureElement figure = article.appendChildElement(PdfStandardStructTypes.Table);
        figure.setTitle("表にタグを追加する");

        //表にタグを追加する
        figure.beginMarkedContent(doc.getPages().get(0), null);

        //PDFページに表を追加し、そのデータを設定する
        PdfTable table = new PdfTable();
        table.getStyle().setBorderPen(new PdfPen(brush, 0.5f));
        table.getStyle().getHeaderStyle().setStringFormat(new PdfStringFormat(PdfTextAlignment.Center));
        table.getStyle().setHeaderSource(PdfHeaderSource.Rows);
        table.getStyle().setHeaderRowCount(1);
        table.getStyle().setShowHeader(true);
        table.getStyle().setCellPadding(2);
        table.getStyle().setHeaderSource(PdfHeaderSource.Rows);
        table.getStyle().setHeaderRowCount(1);
        table.getStyle().setShowHeader(true);
        table.getStyle().getDefaultStyle().setFont(font1);
        table.getStyle().getHeaderStyle().setFont(font);

        String[] data = {"名前;年齢;役職名;メモ",
                "John;23;プログラマー; ",
                "Katty;21;財務担当者; ",
                "Coco;25;プログラマー;インターン",
                "Kyle;27;プログラマー; "
        };
        String[][] dataSource = new String[data.length][];
        for (int i = 0; i < data.length; i++) {
            dataSource[i] = data[i].split("[;]", -1);
        }

        table.setDataSource(dataSource);
        for(int i = 0; i < table.getColumns().getCount();i++)
        {
            PdfColumn column= table.getColumns().get(i);
            column.setStringFormat(new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle));
        }

        //ページに表を描画する
        table.draw(page, new Point2D.Float(0, 150));

        figure.endMarkedContent(page);

        //ドキュメントを保存する
        String result = "タグ付きPDF.pdf";
        doc.saveToFile(result);
        doc.close();
    }
}

【出力されるPDFファイル】
表にタグを追加する

この記事では、タグを使ったPDFファイルの作成方法について紹介します。また、Spire.PDF for JavaでPDFドキュメントを操作するための多くの機能があります。あなたはこのツールに関する任意の質問がある場合は、ヘルプのためのSpire.PDF Forumに移動することができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0