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

回答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
総合スコア29
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。