質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Q&A

解決済

1回答

336閲覧

iTextでPDF/UA互換PDFを作成するにはどうしたらいいですか?

iText_Q

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

0グッド

0クリップ

投稿2019/06/27 04:50

iText 2.1.7を利用して作成したサイトに、動的に作成したPDFを複数置いています。しかし、ユーザーの中には障害を持っているため、JAWSなどの画面リーダーを利用してPDFをレンダリングしているユーザーも数多くおられます。PDFへのタグ指定にはsetTagged()メソッドを利用しますが、PDFの一部の要素の順序が正しくありません。一部はsetTagged()を呼び出した後、さらにごちゃごちゃになってしまいました!
PDF/UAに関して読んだところ、問題解決に役立ちそうでした。ですが、PDF/UA文書の作成方法についての良いサンプルコードが見つかりませんでした。サンプルコードをご提供していただけますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PdfUAのサンプルコードをご覧ください。PDF/UA遵守するために必要なことが段階ごとに説明されています。2014年にiText SummitとJavaOneから類似サンプルコードを提示しました。iText Summit動画チュートリアルをご覧ください。

public void manipulatePdf(String dest) throws IOException, XMPException { PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest, new WriterProperties().setPdfVersion(PdfVersion.PDF_1_7))); Document document = new Document(pdfDoc, new PageSize(PageSize.A4).rotate()); //TAGGED PDF //Make document tagged pdfDoc.setTagged(); //=============== //PDF/UA //Set document metadata pdfDoc.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true)); pdfDoc.getCatalog().setLang(new PdfString("en-US")); PdfDocumentInfo info = pdfDoc.getDocumentInfo(); info.setTitle("English pangram"); //===================== Paragraph p = new Paragraph(); //PDF/UA //Embed font PdfFont font = PdfFontFactory.createFont(FONT, PdfEncodings.WINANSI, true); p.setFont(font); //================== Text c = new Text("The quick brown "); p.add(c); Image i = new Image(ImageDataFactory.create(FOX)); //PDF/UA //Set alt text i.getAccessibilityProperties().setAlternateDescription("Fox"); //============== p.add(i); p.add(" jumps over the lazy "); i = new Image(ImageDataFactory.create(DOG)); *//PDF/UA //Set alt text i.getAccessibilityProperties().setAlternateDescription("Dog"); //================== p.add(i); document.add(p); p = new Paragraph("\n\n\n\n\n\n\n\n\n\n\n\n").setFont(font).setFontSize(20); document.add(p); List list = new List(); list.add((ListItem) new ListItem("quick").setFont(font).setFontSize(20)); list.add((ListItem) new ListItem("brown").setFont(font).setFontSize(20)); list.add((ListItem) new ListItem("fox").setFont(font).setFontSize(20)); list.add((ListItem) new ListItem("jumps").setFont(font).setFontSize(20)); list.add((ListItem) new ListItem("over").setFont(font).setFontSize(20)); list.add((ListItem) new ListItem("the").setFont(font).setFontSize(20)); list.add((ListItem) new ListItem("lazy").setFont(font).setFontSize(20)); list.add((ListItem) new ListItem("dog").setFont(font).setFontSize(20)); document.add(list); document.close(); }

setTagged文書を利用してタグが指定された文書を作成しましたが、それだけでは不十分で、文書データも設定しなければなりません。文書タイトルと文書に使用される言語も表示しなければなりません。XMPメタデータは必須です。

また、すべてのフォントを含めなければなりません。画像がある場合は、代替テキストが必要です。サンプルコードでは、「DOG(犬)」と「FOX(キツネ)」という単語を画像に代替させています。このような画像を正しく「読み上げることができる」よう、getAccessibilityProperties().setAlternateDescription()メソッドを使用してください。

サンプルコードの最後に番号付けされたリストを追加しました。投稿者の方は別の質問で、JAWSを利用してリストを読んで話すことができないと言っておられました。上記のサンプルコードで作成したPDFファイル、即ちpdfua.pdfを確認していただくと、JAWSが番号やテキストとともに、文書を予定した順序どおり読むことができると分かるでしょう。

「作動しない」理由は簡単です。PDF/UAの標準より以前バージョンのiTextを使用しているからです。また、ご利用中のバージョンでsetTagged()メソッドを使用する場合は、最も低いPDFレベルでタグ構造を作成しなければなりません。iText最新バージョンは、より高いレベルに対応しています。ご希望の作業を実行したければ、最新バージョンのiTextをご利用ください。

投稿2019/06/27 04:59

iText_A

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問