JPEDAL アーカイブ - 株式会社インターワーク https://www.intwk.co.jp/tag/jpedal/ AI solution company Thu, 05 Dec 2024 06:46:14 +0000 ja hourly 1 https://wordpress.org/?v=6.9 https://www.intwk.co.jp/wp-content/uploads/2017/09/cropped-INTERWORK_T-1-32x32.png JPEDAL アーカイブ - 株式会社インターワーク https://www.intwk.co.jp/tag/jpedal/ 32 32 タグ付きPDF入門:試して分かった!AI活用とアクセシビリティ https://www.intwk.co.jp/2024/12/05/%e3%82%bf%e3%82%b0%e4%bb%98%e3%81%8dpdf%e5%85%a5%e9%96%80ai%e6%b4%bb%e7%94%a8%e3%81%a8%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b7%e3%83%93%e3%83%aa%e3%83%86%e3%82%a3/ Thu, 05 Dec 2024 01:00:12 +0000 https://www.intwk.co.jp/?p=21640 タグ付きPDFの仕様が策定されてから20年以上が経過しましたが、この構造化技術はあまり注目されることなく時が過ぎてきました。しかし、AI時代の到来により状況は一変しています。ChatGPTなどのAIによる文書理解において、タグ付きPDFはタグなしのPDFと比較して、驚くほど正確な解析を実現できることが明らかになってきました。アクセシビリティから文書解析、HTMLへの変換まで—長年活用されていなかったタグ付きPDFが、AI時代の文書活用に新たな可能性をもたらす具体的なメリットを、実例とともに細かく解説していきます。

投稿 タグ付きPDF入門:試して分かった!AI活用とアクセシビリティ株式会社インターワーク に最初に表示されました。

]]>

タグ付きPDFとは?

タグ付きPDFは、PDF文書内の構造や要素に「タグ」を付与することで、その意味や役割を明確に示した形式です。この「タグ」により、文書が視覚的な見た目だけでなく、コンピュータやプログラムがその構造や要素を正確に読み取れる形に整理されています。

タグ付きPDFが示す情報例:

  • 見出し(H1、H2など)
  • 段落(P)
  • リスト項目(LI)
  • 画像(代替テキスト付き)
  • 表(行、列、セルの構造を明示)

これにより、タグ付きPDFは「論理構造を持つデータ」として文書を扱うことが可能になります

一般的なPDFとの違い

通常のPDFは、文字や画像の配置が座標データとして保存されているだけで、文書の構造(例: どこが見出しでどこが段落か)は人間の目には分かっても、プログラムには理解できません。一方、タグ付きPDFでは、文書の構造や意味を「タグ」として内部的に記録するため、文書の内容をコンバーターやシステムが正確に理解・処理できる形式となっています。

例えば、見た目が同じ「表」でも、タグ付きPDFでは「これは表」「このセルは見出し」といった情報が記録されます。そのため、視覚障害者向けのスクリーンリーダーやAIによるデータ解析で、内容を適切に認識できます。

PDFの進化とタグ付きPDFの登場

PDFは1993年にAdobeが開発した、デバイスに依存せず見た目を維持できる文書形式です。2001年のPDF 1.4で文書構造を示すタグ機能が導入され、アクセシビリティと再利用性が向上しました。2017年にはPDF 2.0として国際標準化され、タグ機能がさらに強化されています。

※PDF 2.0は2024年現在、PDFの最新バージョンであり、タグ機能のさらなる強化が行われています

タグの論理構造ツリーとは?

タグ付きPDFは、文書の内容を階層的な「ツリー構造」で整理する仕組みを持っています。この構造を「論理構造ツリー」と呼びます。論理構造ツリーでは、文書内の各要素(見出し、段落、画像、表など)が親子関係を持ちながら整理され、文書全体の構造を明確に示します。

この仕組みにより、PDFビューアやプログラムが文書内容を効率的かつ正確に解釈することができます。たとえば、スクリーンリーダーは論理構造ツリーを基に、文書を正しい順序で読み上げます。

ツリー構造の基本例

論理構造ツリーの基本的な考え方は、HTMLのDOM(Document Object Model)に似ています。文書全体が「ルート」ノードとなり、その下に各要素が階層的に配置されます。

以下は、簡単な文書の論理構造ツリーの例です:

文書例:
				
					文書タイトル:タグ付きPDFの概要

見出し1:タグ付きPDFとは?
段落:タグ付きPDFは文書内の構造を明確にする仕組みです。

見出し2:論理構造ツリー
段落:文書の構造を階層的に整理したものです。
画像:ツリー構造のイメージ

				
			
論理構造ツリーの表現:
				
					<Root> (文書全体)
│
├── <H1> タグ付きPDFとは?
│   └── <P> タグ付きPDFは文書内の構造を明確にする仕組みです。
│
├── <H1> 論理構造ツリー
│   ├── <P> 文書の構造を階層的に整理したものです。
│   └── <Figure> 画像(代替テキスト:ツリー構造のイメージ)

				
			
  • <Root>: 文書全体のルートノード。
  • <H1>: 見出しタグ。文書のセクションを明確に示します。
  • <P>: 段落タグ。セクション内の本文を記載します。
  • <Figure>: 画像タグ。画像の代替テキストが付与されます。

要素の役割と関係性

  1. 親子関係:
    各セクション(<H1>)は「親ノード」となり、その下に具体的な内容(段落や画像など)が「子ノード」としてぶら下がります。
  2. 順序:
    ツリー構造では、文書内の各要素の順序が明示されるため、内容がどの順番で表示・解釈されるべきかが明確です。
  3. 再利用性:
    この構造を持つことで、文書をHTMLやXMLに変換する際も、見出しや段落、画像といった役割が保持されます。

タグ付きPDFは例えばAdobe AcrobatやJPedalなどのPDFツールでツリー構造を見ることができます。

タグ付きPDFのメリット

デジタル化が進む現代のビジネス環境において、PDFは重要なドキュメント形式として広く使用されています。しかし、従来のPDFには文書構造の明確化や再利用性において課題がありました。タグ付きPDFは、アクセシビリティからAI対応まで、現代のデジタルニーズに応える革新的な解決策として注目を集めています。以下では、タグ付きPDFがもたらす6つの重要なメリットについて詳しく解説します。

  1. アクセシビリティの向上
    • 視覚障害者が使用するスクリーンリーダーで、文書の正しい読み上げ順序が確保されます。
    • 画像には代替テキストを設定することで、画像の内容も伝えることが可能になります。
  2. データ解析とAI対応
    • タグ情報があることで、文書の構造をAIや検索エンジンが正確に解釈し、効率的な情報抽出が可能になります。
    • 自然言語処理(NLP)や機械学習のデータソースとしても優れています。
  3. 検索エンジン最適化(SEO)
    • タグ付きPDFは、検索エンジンで内容が正確に解釈されやすく、より多くの人に見つけてもらうことが可能です。
  4. リフロー表示への対応
    • タグ付きPDFは、画面サイズに応じてテキストを再配置する『リフロー表示』に対応しやすく、スマートフォンでも読みやすく表示できる可能性があります。ただし、ビューアや文書の構造に依存する場合があります。
  5. 法規制や標準への準拠
    • 多くの国や地域で、公共機関や企業にアクセシビリティ対応が義務付けられている中、タグ付きPDFはこれらの要件を満たすための重要な手段となっています。
  6. 業務効率化
    • タグを利用して文書を他の形式(例: HTML、Word)に変換する際、構造を保った高品質な変換が可能です。
    • 一度作成した文書を複数の用途に再利用できるため、ドキュメント制作の効率が大幅に向上します。

サンプルPDFファイルを作成して、タグあり、なしを比較する。

ここからは、Microsoft Wordで作成したPDFファイル2つ(タグありとタグなし)を比較しながら、文書の構造化、AIによる理解度、HTML変換における効果などについて詳しく説明していきます。

Adobe Acrobatでツリー表示して、文章の構造化を見る

Adobe Acrobatでアクセシビリティタグの表示を使うことで簡単にPDFのタグを見ることができます。
今回作成したサンプルPDFは以下から閲覧出来ます。

タグなしPDFのツリー表示

タグなしPDFのツリー表示
Adobe Acrobatでアクセシビリティタグの表示をしてもタグがないという表示

タグありPDFのツリー表示

タグありPDFのツリー表示:実際のツリー例1 文章
こちらはタグ付きPDFでのツリー表示で<H1>の文章の表示
ツリー例 画像の箇所
画像の部分はFigureと表示される。画像サイズが表示されている
ツリー例 表の部分
表の見出し部分の表示。THeadとして表示されている

スクリーンリーダーでの違い

最初のサンプルではスクリーンリーダーでの違いが見られなかったため、新しいサンプルPDFを作成し、MacのAdobe Acrobatで検証を行いました。

タグなしPDFでは、冒頭のタイトルとして設定した「吾輩は猫である。名前はまだ無い。」や、イラストによって分断された文章を、一つのまとまった文章として認識できず、個別の文として読み上げました。一方、タグ付きPDFでは、タグによって文章のつながりが認識され、適切な読み上げが実現できました。今回のサンプルでは大きな違いは見られませんでしたが、タグ付きPDFはタグの上から下へと読み順が明確になるため、複雑なレイアウトの文書で特に効果を発揮すると考えられます。

リフロー表示への対応

MacとWindowsのAdobe Acrobatでリフロー表示を試してみましたが、タグ付きPDFでも表示されないケースがあり、表示された場合でも期待通りの結果は得られない場合がありました。

なお、iPhoneのAdobe Acrobat Readerでは、タグのありなしに関係なくリーディングモードでの表示が可能でした。

AIにおける理解度の違い

それでは、タグあり、なしのPDFを使って、AIの理解度の違いを調べて見ましょう。今回は、ChatGPTとマインドマップが作成できるMapifyを使って調べて見ました。

ChatGPT 4oによる要約文の結果

以下は、タグありとタグなしのPDFを添付し、「添付のPDFの内容を200文字程度で要約してください」と依頼した際の結果です。

タグなしPDFでの要約文

このPDFは、「効果的なAIプロンプトの作成」に関するガイドです。AIとの対話でより良い結果を得るためのプロンプト作成技術を解説しています。基本原則として「明確性と具体性」「文脈の提供」「段階的アプローチ」を挙げ、目的別のプロンプト例や、曖昧さ回避や情報過多防止といった注意点も紹介。さらに「ロールプレイ」や「フィードバックループ」などの高度な戦略も含まれています。実践と改善を通じてスキルを高める重要性が強調されています。

タグありPDFでの要約文

このPDFは、AIプロンプトの効果的な作成方法について詳述したガイドです。プロンプトの基本から応用までを扱い、特に「明確性」「具体性」「文脈提供」が重要であると強調しています。実践的なテクニックとして、目的の明確化、フォーマット指定、制約条件の設定、例示の活用を挙げています。さらに、ロールプレイやフィードバックループを用いた戦略や、曖昧さ回避、情報過多防止の方法も説明しています。継続的な改善を通じて、プロンプト作成スキルの向上を目指す内容です。

この2つの比較から分かるように、タグなしPDFは構造が明確でないため、情報の整理や理解が困難になることがあります。一方、タグ付きPDFでは、見出し、表、箇条書きなどが正確に認識され、情報が体系的に整理されています。

表における理解度比較

ChatGPT 4oを使用して、タグありPDFとタグなしPDFの2種類のファイルに対して「目的別プロンプト効果の比較」の表の要約を依頼し、その結果を比較しました。

タグなしPDFの要約:
  • ビジネス文書作成: 基本的なプロンプトでは一般的な内容のみ得られるが、効果的なプロンプトでは詳細な市場分析や実用的な提案が可能。
  • プログラミング支援: 基本的なプロンプトは浅い提案のみ提供されるが、効果的なプロンプトではエラーの根本原因特定と再発防止のアドバイスが得られる。
  • 教育コンテンツ作成: 基本的なプロンプトは抽象的だが、効果的なプロンプトでは対象年齢に適した説明と具体的な学習方法が提供される。
  • マーケティング分析: 基本的なプロンプトでは表面的な比較のみだが、効果的なプロンプトでは具体的なデータと実用的な戦略が得られる。
  • クリエイティブ作業: 基本的なプロンプトは一般的な内容に留まるが、効果的なプロンプトでは感情的な訴求力や具体的なエピソードが含まれる。

タグありPDFの要約
  • ビジネス文書作成: 競合分析やターゲット層の明確化、具体的な販売戦略が得られる。
  • プログラミング支援: エラーの原因を特定し、文脈を考慮した修正案とテストケースを提供。
  • 教育コンテンツ作成: 生徒のレベルに応じた説明、図解、実験案、テストなど多様な学習要素が含まれる。
  • マーケティング分析: 価格帯、差別化ポイント、SNS活用方法を含む詳細な分析と新規参入戦略への示唆が得られる。
  • クリエイティブ作業: ブランドストーリーが感情的に訴求力のある内容で構成され、具体的なエピソードが追加される。

タグなしPDFは表の内容自体を読み取ることはできますが、表形式を正確に認識できず、情報が段落として処理されてしまいます。そのため、構造が曖昧になり、要約が困難になります。一方、タグ付きPDFでは表の構造が正確に保持され、各用途のプロンプト効果が明確に区分されているため、スムーズな要約が可能です。特に表形式の情報を含む場合、タグ付きPDFは効率的かつ正確な情報伝達という大きな利点があることが明らかになりました。

画像の理解度比較

画像についての理解度は、残念ながら、MacならびにWindowsのMicrosoft Wordで図に代替テキストを記載しましたが、PDFのタグには図のサイズのみが記載されて、代替テキストのタグは付けられませんでした。

ただし、タグあり・なしのPDFを確認したところ、1ページ目には「より良いプロンプトを使って効果をあげるイメージ」と説明された画像が含まれていることはChatGPTに認識されていました。

PDFの構造理解度の比較

次に、AIマインドマップ作成ツールのMapifyを使用して、タグありPDFとタグなしPDFの違いを比較検証しました。以下は、「PDFの内容をマインドマップに変換してください」という依頼に対してMapifyが生成したマインドマップの例です。並べ替えや編集は一切していない状態です。

タグなしPDFでMapifyを使って作成したマインドマップ

タグなしPDFでMapifyを使って作成したマインドマップ
タグなしPDFでMapifyを使ってマインドマップを作成したもの。
全体像は把握できるものの、階層構造が浅い。

タグありPDFでMapifyを使って作成したマインドマップ

タグありPDFでMapifyを使ってマインドマップを作成したもの。
体系的に細かくマップ化されている。

タグ付きPDFでは情報が階層的かつ詳細に整理され、内容を体系的に理解しやすいマインドマップが生成されます。これに対し、タグなしPDFでは全体像は把握できるものの、階層構造が浅く、詳細情報や具体例が欠落しがちです。このため、特に複雑な情報を扱う場合、タグ付きPDFの方が優れた結果を提供します。

HTMLへの変換

JPedalのようなPDF開発ツールを利用することで、タグありのPDF、すなわち構造化されたPDFをXMLやHTMLへ変換することができます。下記はJavaのPDFライブラリーのJPedalを使ってタグ付きPDFをHTMLに変換したページです。

Adobe Acrobatで見たツリー表示のH1、H2などの見出しや、段落(P)、リスト項目(LI)、表(行、列、セルの構造を明示)等が正しくHTMLへ変換されています。変換されたHTMLは、CSSメディアクエリを活用することで、様々な画面サイズに対応したレスポンシブデザインの実装が可能です。タグ付きPDFから変換される見出しや段落、表などの要素は、画面サイズに応じて適切にレイアウトを調整できる構造を持っています。

下記の変換したHTMLページは、JavaのPDFライブラリーJPedalで変換したHTMLファイルをそのままWebサーバに置いたものです。

書き出されたHTMLの一部(抜粋して編集しています)

				
					<!-- Created from JPedal -->
<!DOCTYPE html>
<html>
    <body>
        <p>効果的なAIプロンプトの作成ガイド:</p>
        <p>より良い結果を得るための実践的アプローチ</p>
        <p>人工知能(AI)システムとの対話が日常的になった現代において、効果的なプロンプト(指示文)の作成は、望む結果を得るための重要なスキルとなっています。本ガイドでは、AIシステムから最適な結果を引き出すためのプロンプト作成の基本から応用まで、実践的なアプローチを解説していきます。</p>
        <h1>プロンプトとは何か</h1>
        <p>プロンプトとは、AIシステムに対して私たちが入力する指示や質問のことです。単なる質問や命令以上に、AIとの対話を成功に導くための重要な橋渡しの役割を果たします。効果的なプロンプトは、明確な目的、適切な文脈、そして具体的な期待を含み、AIシステムがユーザーの意図を正確に理解し、期待される出力を生成することを可能にします。</p>
        <section>
            <p>図 1:より良いプロンプトを使って効果をあげるイメージ </p>
            <figure></figure>
        </section>
        <figure></figure>
        <h1>効果的なプロンプト作成の基本原則</h1>
        <h2>明確性と具体性</h2>
        <p>プロンプトの作成で最も重要な原則は、明確性と具体性です。曖昧な表現や抽象的な指示は、期待とは異なる結果を招く可能性が高くなります。例えば、「良い文章を書いて」という指示よりも、「環境問題について、高校生向けに1000文字程度の説明文を書いてください。具体的な例を2つ以上含め、解決策も提示してください」というように具体的に指示する方が、望む結果に近づきやすくなります。</p>
        <h2>文脈の提供</h2>
        <p>AIシステムは与えられた情報のみに基づいて応答を生成します。そのため、必要な背景情報や文脈を適切に提供することが重要です。例えば、特定の業界や専門分野に関連する質問をする場合、その分野特有の用語や常識的な前提を明示的に説明することで、より正確な応答を得ることができます。</p>
        <h2>段階的なアプローチ</h2>
        <p>複雑な課題に対しては、一度に全てを要求するのではなく、段階的なアプローチを取ることが効果的です。最初に基本的な情報や方向性を確認し、その結果に基づいて詳細な指示を追加していく方法です。これにより、プロセスの各段階で結果を確認し、必要に応じて軌道修正することが可能になります</p>
                <h1>目的別プロンプト効果の比較 </h1>
        <table>
          <tbody>
                <tr>
                    <th>ビジネス文書作成(企画書) </th><th>「新商品の企画書を書いて」 </th><th>・一般的で表面的な内容・具体性に欠ける提案・構造が不明確 </th><th>「20代女性向けのスキンケア商品の企画書を作成してください。以下の要素を含めてください:・市場分析(競合製品3つ以上)・ターゲット層の具体的なペルソナ・製品の差別化ポイント3つ・価格設定の根拠・販売チャネル戦略文字数は1500字程度でお願いします」 </th><th>・明確な市場分析・具体的な製品提案・論理的な価格設定・実行可能な販売戦略・適切な文量での提案 </th>
                </tr>
                          </tbody>
        </table>

         <h2>効果的なプロンプト作成のための主要ポイント</h2>
        <h3>1.具体性と詳細さ</h3>
        <ul>
            <li>•目的と対象を明確に指定</li>
            <li>•必要な要素を箇条書きで列挙</li>
            <li>•期待する成果物の形式を明示</li>
        </ul>


    </body>
</html>

				
			

まとめ

タグ付きPDFは、文書内の構造や要素に「タグ」を付与し、その意味や役割を明確にした革新的な文書形式です。これは、従来のPDFが抱えていた文書構造の明確化や再利用性の課題に対する、現代のデジタルニーズに即した解決策となっています。

本記事の限られた実験結果からも、AIによる効率的な情報抽出、リフロー表示、スクリーンリーダー対応という主要な効果が確認できました。また、世界各国で求められるアクセシビリティ要件を満たす可能性を持つ文書形式として注目を集めています。

業務においては、文書を他の形式(HTML、Word等)に変換する際、構造を維持した高品質な変換が可能です。これにより、一つの文書を複数の用途に再利用でき、レスポンシブ対応やドキュメント制作の効率が飛躍的に向上します。さらなる実証実験は必要ですが、タグ付きPDFは、アクセシビリティ、データ活用、業務効率化など、現代のデジタル社会の多様なニーズに応える重要な文書形式として確立されつつあります。

残念ながら、政府発行の白書や多くの企業のドキュメント等はPDFで提供されているものの、ほとんどがタグ付きPDFになっていません。特に企業においては、社内文書のタグ付きPDF化を進めることで、AIによる文書解析の精度向上、業務効率化、さらにはナレッジマネジメントの高度化など、これからのデジタルトランスフォーメーションに向けた大きなメリットが期待できるのではないでしょうか?

タグ付きPDFを構造化されたHTMLに変換するには、PDF開発に欠かせないJavaのPDFライブラリ「JPedal」がおすすめです。

また、PDFドキュメントをHTML5やSVG形式に高精度で変換できるソフトウェア「BuildVu」を活用することで、ウェブサイトでの表示や検索エンジン最適化が飛躍的に向上します。

投稿 タグ付きPDF入門:試して分かった!AI活用とアクセシビリティ株式会社インターワーク に最初に表示されました。

]]>
PDFメタデータとは?開発者が知っておくべき基礎知識 https://www.intwk.co.jp/2024/10/22/pdf%e3%83%a1%e3%82%bf%e3%83%87%e3%83%bc%e3%82%bf%e3%81%a8%e3%81%af/ Tue, 22 Oct 2024 04:00:13 +0000 https://www.intwk.co.jp/?p=21507 PDFファイルを扱う際、「メタデータ」という言葉を耳にすることが多いでしょう。メタデータとは、ドキュメントに関する情報を指し、ファイルの作成者や作成日、使用されたソフトウェアなど、ドキュメントを説明する情報が含まれています。この記事では、開発者向けにPDFメタデータの基本からその利用方法までをわかりやすく解説します。

投稿 PDFメタデータとは?開発者が知っておくべき基礎知識株式会社インターワーク に最初に表示されました。

]]>

著者 Jacob Collins (IDRsolutions)  翻訳/編集 インターワーク

PDFメタデータの概要と進化

メタデータは、PDFファイルの「データに関するデータ」です。PDFの歴史において、メタデータの扱いは大きく進化してきました。初期のPDFバージョンでは、タイトルや作成者、作成日時などの基本的な情報のみを含む情報の「辞書」が使用されていました。この方式では拡張性に制限があり、カスタムメタデータの追加が困難でした。

そこで2001年、Adobe社はXMP(Extensible Metadata Platform)を導入しました。XMPは、XMLベースの強力なメタデータフレームワークです。RDF(Resource Description Framework)に基づく構造化データとして設計され、国際規格(ISO 16684-1)として標準化されています。XMPの大きな特徴は、複数の名前空間をサポートしており、アプリケーション固有のメタデータも柔軟に定義できる点です。

XMPでのメタデータ記述は以下のような形式で行われます:

				
					<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/">
  <rdf:RDF xmlns:rdf="<http://www.w3.org/1999/02/22-rdf-syntax-ns#>">
    <rdf:Description rdf:about=""
      xmlns:dc="<http://purl.org/dc/elements/1.1/>"
      xmlns:pdf="<http://ns.adobe.com/pdf/1.3/>"
      xmlns:xmp="<http://ns.adobe.com/xap/1.0/>">
      <dc:title>
        <rdf:Alt>
          <rdf:li xml:lang="x-default">文書タイトル</rdf:li>
        </rdf:Alt>
      </dc:title>
      <dc:creator>
        <rdf:Seq>
          <rdf:li>作成者名</rdf:li>
        </rdf:Seq>
      </dc:creator>
      <xmp:CreateDate>2024-10-22T10:00:00+09:00</xmp:CreateDate>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>

				
			

現代のPDF標準(ISO 32000-2)では、XMPとの完全な統合が実現され、アクセシビリティとセキュリティの面でも大きく改善されています。また、構造化タグ付けのサポートにより、文書の論理構造をより正確に表現できるようになりました。

メタデータの重要性と活用

PDFメタデータは、文書管理において重要な役割を果たしています。基本的な文書情報に加え、著作権情報やライセンス条項、カスタムメタデータフィールド、ワークフロー情報など、多岐にわたる情報を管理できます。これらの情報は、企業のコンプライアンスチェックや監査において、文書の真正性を確認する重要な手がかりとなります。

特に、メタデータの重要な役割の一つは、異なるシステムやプラットフォーム間での相互運用性を確保することです。例えば、社内文書管理システムで作成されたPDFファイルを、取引先の異なる文書システムで利用する場合でも、標準化されたメタデータがあれば、ドキュメントの属性や管理情報を正確に引き継ぐことができます。具体的には、以下のようなケースで活用されています:

  • 契約書管理システムと電子署名プラットフォーム間での文書の受け渡し時に、作成者情報や承認フローの状態を保持
  • 設計図面の改訂管理において、CADシステムから文書管理システムへの連携時に、バージョン情報や変更履歴を維持
  • 医療文書システム間での患者情報や作成日時、担当医師情報などの重要なメタデータの引き継ぎ
  • 電子出版システムでの書誌情報(著者、出版社、ISBN等)の管理と外部システムとの連携

これらの例では、XMPメタデータの標準化された形式により、システム間でのスムーズな情報の受け渡しが実現されています。

Javaを使えば、数行のコードでPDFメタデータを抽出することができます。

また、アクセシビリティの面では、PDFメタデータが大きな価値を持ちます。文書のアクセシビリティを確保することは、より多くのユーザーが情報にアクセスできるようにするために重要です。例えば、見出し情報のタグ付けによって、スクリーンリーダーを使用している視覚障害者が文書の論理構造を正確に理解できるようになります。

画像コンテンツに関しては、代替テキスト(altテキスト)の付与が重要な役割を果たします。グラフや図表、写真などの視覚的な情報に対して適切な代替テキストが設定されていれば、スクリーンリーダーがその内容を読み上げることができ、視覚障害のあるユーザーも文書の内容を十分に理解することができます。

さらに、PDFのメタデータには読み上げ順序の情報も含めることができます。これにより、スクリーンリーダーは文書の論理的な流れに従って自然な順序で内容を読み上げることができます。例えば、複数列のレイアウトや、図表と本文が混在する場合でも、適切な順序で情報を伝えることが可能になります。このような構造化された情報により、すべてのユーザーが効率的に文書を理解できる環境が整います。

開発者のためのメタデータ操作

開発者がPDFメタデータを扱う方法はいくつかあります。PDFescapeやSmallpdfなどのオンラインツールを使用する方法もありますが、プログラムによる操作も可能です。たとえば、JPedalライブラリを使用すると、メタデータの読み取りや編集、XMPメタデータの操作などが可能です。この機能を活用することで、以下のようなアプリケーションの開発が実現できます:

  • 文書の有効期限や改訂日をメタデータから自動チェックする文書管理システム
  • PDFファイルの作成者情報を基に、部署ごとの文書作成状況を可視化するレポーティングツール
  • カスタムメタデータを利用した社内文書の分類・検索システム
  • XMPメタデータを活用した文書のワークフロー管理システム(承認状態の追跡など)
  • バッチ処理による大量PDFファイルのメタデータ一括更新ツール

他にもJPedalにはPDF関連の開発に必要な様々な機能が含まれています。無料のトライアルも提供しておりますので、ぜひお試しください。

■JPedalの主な機能
  • PDFを画像に変換
  • JavaでPDFを表示
  • JavaからPDFを印刷
  • PDF内のテキストを検索
  • PDFからテキストを抽出
  • PDFから画像を抽出
  • PDFからメタデータを抽出
  • PDFフォーム注釈の編集 など

PDFアプリ開発ツール(SDK)をお探しのみなさま、効率のよい開発作業のためにJPedalがきっとお役に立つことと思います。JPedalは無料で試用していただけますので、まずはお試しのうえ、ぜひ導入をご検討ください。

JPedalのシステム開発やプログラミング、無料トライアルの情報はこちらをご覧ください。技術的なことから費用面まで、ご質問・ご相談もこちらからお寄せください。

投稿 PDFメタデータとは?開発者が知っておくべき基礎知識株式会社インターワーク に最初に表示されました。

]]>
PDFを最適化して軽量化!使われないオブジェクト削除で得られる驚きの効果 https://www.intwk.co.jp/2024/10/16/pdf%e3%82%92%e6%9c%80%e9%81%a9%e5%8c%96%e3%81%97%e3%81%a6%e8%bb%bd%e9%87%8f%e5%8c%96/ Wed, 16 Oct 2024 09:00:01 +0000 https://www.intwk.co.jp/?p=21461 Javaでシステム開発を行う中で、PDFファイルのサイズが予想以上に大きくなり困った経験はありませんか?その原因の一つに「使われないオブジェクト」の存在があります。今回は、Javaの開発者でJPedalのプロダクトマネージャーのJacob氏の記事を元に、使われないオブジェクトとは何か、その削除方法、削除によるファイルサイズの削減効果、そしてその他のメリットについて解説します。

投稿 PDFを最適化して軽量化!使われないオブジェクト削除で得られる驚きの効果株式会社インターワーク に最初に表示されました。

]]>

著者 Jacob Collins (IDRsolutions)  翻訳/編集 インターワーク

使われないオブジェクトとは

通常、PDFファイルが修正されると、元のコンテンツはそのまま残され、新しいコンテンツが追加される形になります。これを「増分更新」と呼びます。このプロセスにより、変更されたオブジェクトは新たにファイルに追加され、元のオブジェクトもファイル内に残り続けます。これら元のオブジェクトは使用されることなくスペースを占有します。

使われないオブジェクトには、画像/グラフィック、マルチメディア、フォント、テキスト、メタデータ、フォーム、注釈、ページ、ブックマークなど、PDFファイル内のさまざまな要素が含まれます。これらが残留することで、ファイルサイズが不必要に大きくなる原因となります。

使われないオブジェクトの削除方法

Javaでプログラム的に削除する方法

大量のPDFファイルやシステムで自動生成されるPDFを効率的に最適化するには、プログラムによる自動化が不可欠です。ここでは、Javaで実装された高機能なPDFライブラリであるJPedalを使用して、使われないオブジェクトを削除する方法を紹介します。

  1. JPedalのダウンロードと設定
    • JPedalのページからトライアルを申込み、トライアル版をダウンロードします。
    • プロジェクトのクラスパスまたはモジュールパスにjpedal.jarを追加します。
  2. PDFファイルのハンドルを作成
    • 操作対象のPDFファイルを指すFileオブジェクトを作成します。
  3. 使われないオブジェクトの削除を実行以下のコードを実行して、使われないオブジェクトを削除します。

				
					PdfOptimizer.optimizePDF(
        new File("/path/to/input.pdf"),
        new File("/path/to/output.pdf"),
        PdfOptimizer.Optimization.REMOVEUNUSEDOBJECTS
);

				
			

コマンドラインで削除する方法

手作業で個別に最適化を行うのは手間がかかりますが、コマンドラインを使用すればスクリプトを使って大量のPDFファイルを一括で処理することが可能です。
  1. JPedalのトライアル版をダウンロード
    • JPedalのトライアル版をダウンロードし、jpedal.jarを取得します。
  2. コマンドを実行 以下のコマンドを実行して、使われないオブジェクトを削除します。
				
					java -cp jpedal.jar org.jpedal.tools.PdfOptimizer --removeUnusedObjects inputFile outputFile
				
			


※スクリプトを組むことで、フォルダ内のすべてのPDFファイルを一括処理することも可能です。

手動での最適化のメリットと課題

手動で最適化するソフトウェアとしてメジャーなソフト、Adobe Acrobatには、画像のダウンサンプリング、フォントの埋め込み、透明効果の統合、未使用オブジェクトの削除など、多くのPDF最適化機能があります。これらを使用して個々のPDFファイルを手動で最適化することも可能です。

しかし、大量のPDFファイルやシステムで自動生成されるPDFを扱う場合、手作業で最適化するのは現実的ではありません。

一方、JPedalを使用すれば、プログラムやスクリプトを使って自動的に使われないオブジェクトの削除が可能です。これにより、大量のPDFファイルを効率的に最適化できます。

ファイルサイズの減量効果

使われないオブジェクトを削除することで、ファイルサイズを大幅に削減できる可能性があります。具体的な削減率は元のファイルの構造や未使用オブジェクトの量によりますが、以下のような効果が期待できます:

  • 未使用画像の削除:高解像度の未使用画像を削除することで、ファイルサイズを大幅に削減できます。
  • 不要なフォントの除去:使用されていないフォントデータを削除することで、数MBのサイズ減少が可能です。
  • メタデータのクリア:不要なメタデータや編集履歴を削除し、ファイルをクリーンに保ちます。

JPedalのその他の特長

JPedalは使われないオブジェクトの削除以外にも、次のような機能を提供しています:

PDFの画像変換とサムネイル生成PDFをさまざまな画像形式に変換し、任意のサイズの画像を生成できます。
PDFの表示Java Swing PDF Viewerを使用して、複数ページの表示、検索、印刷、注釈編集が可能です。
PDFの印刷Java Printing Servicesを使ってPDFを印刷できます。
テキストの抽出と検索PDFからのテキスト抽出、ワイルドカードや正規表現を使ったテキスト検索が可能です。
画像の抽出PDF内の画像を高品質で抽出します。
PDFメタデータへのアクセスページサイズ、アウトライン、ページ数などのメタデータを取得可能です。
PDFフォームの操作XFAとAcroFormsをサポートし、PDFフォームデータの読み取りと編集が可能です。
アノテーションの操作PDFファイルに注釈を追加・編集できます。
PDFのマージ・分割PDF文書を結合・分割したり、特定のページを削除することが可能です。
コンテンツの安全性JPedalはローカル環境で動作し、サードパーティのライブラリを使用しないため、ファイルの安全性を確保します。

これらの機能により、PDFのさまざまな操作を自動化・効率化でき、開発者にとって非常に有用なツールとなります。

JPedalを利用することで、使われないオブジェクトの削除だけでなく、多彩な機能による効率的なPDF操作が可能になります。プログラム的に自動化することで、時間と労力を節約し、システム全体のパフォーマンスとセキュリティを向上させることができます。PDFファイルの最適化を自動化し、業務の効率化を図るために、ぜひJPedalの導入を検討してみてはいかがでしょうか。

PDFアプリ開発ツール(SDK)をお探しのみなさま、効率のよい開発作業のためにJPedal、BuildVu、JDeliがきっとお役に立つことと思います。
これら3製品は無料で試用していただけますので、まずはお試しのうえ、ぜひ導入をご検討ください。
JPedal、BuildVu、JDeliのシステム開発やプログラミング、無料トライアルの情報は下記の各製品のトライアルページをご覧ください。技術的なことから費用面まで、ご質問・ご相談も各製品ページの問合せボタンからお寄せください。

投稿 PDFを最適化して軽量化!使われないオブジェクト削除で得られる驚きの効果株式会社インターワーク に最初に表示されました。

]]>
PDFを画像に変換−JPedalライブラリの実力 https://www.intwk.co.jp/2024/08/16/pdf%e3%82%92%e7%94%bb%e5%83%8f%e3%81%ab%e5%a4%89%e6%8f%9b%e2%88%92jpedal%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e3%81%ae%e5%ae%9f%e5%8a%9b/ Fri, 16 Aug 2024 05:08:47 +0000 https://www.intwk.co.jp/?p=20588 PDFを画像に変換することで、互換性向上、編集の容易さ、セキュリティ強化などのメリットが得られます。OCR前処理にも適し、アプリケーション統合の柔軟性も向上。JPedalを使用した無料のオンライン変換と無料トライアルによるコマンドライン操作の両方を紹介し、効率的なPDF処理方法を解説します。開発者からビジネスユーザーまで幅広く役立つ内容です。

投稿 PDFを画像に変換−JPedalライブラリの実力株式会社インターワーク に最初に表示されました。

]]>

PDFから画像へ:ビジネスニーズに応える変換の必要性

PDFは文書共有の標準フォーマットとして広く使われていますが、ビジネスの多様なニーズに応えるためには、時としてPDFを画像に変換する必要性が生じます。なぜでしょうか?

まず、画像形式はほぼすべてのデバイスやプラットフォームで表示可能であり、互換性の問題を解消します。WebサイトやSNSでの共有も容易になります。また、画像に変換することで、元のPDF内のテキストや機密情報を保護しつつ、視覚的な情報を共有できます。

さらに、eコマースサイトの商品カタログ作成、デジタルアーカイブの構築、プレゼンテーション資料の準備など、様々なビジネスシーンでPDFから画像への変換が求められます。大量のPDFを効率的に処理し、ワークフローを最適化するためにも、PDFから画像への変換は重要なプロセスとなっています。

このような需要に応えるツールとして、本記事では、このJPedalを使用してPDFファイルを画像に変換する方法を詳しく解説していきます。開発者の皆様はもちろん、ビジネスプロセスの改善を検討されている方々にとっても、JPedalの機能を活用することで、効率的なPDF処理ワークフローを構築し、業務を大幅に改善できることをお分かりいただけるでしょう。

JPedalの主な特徴

  1. 高性能:大規模なPDFファイルも迅速に処理できる優れたパフォーマンスを誇ります。
  2. 多機能:PDFの表示、変換、印刷、テキスト抽出など、幅広い機能を提供します。
  3. 柔軟性:様々なプラットフォームやJavaフレームワークと互換性があり、既存のシステムに容易に統合できます。
  4. 精度:高品質な画像変換を実現し、元のPDFの視覚的忠実性を維持します。
  5. 開発者フレンドリー:直感的なAPIと充実したドキュメンテーションにより、迅速な開発が可能です。
  6. 継続的なサポート:定期的なアップデートと専門的なサポートにより、常に最新のPDF規格に対応しています。
  7. JPedalは、企業向けの堅牢なソリューションとして、多くの業界で信頼されています。無料トライアル版も利用可能で、その性能を実際に体験することができます。

PDFを画像に変換するメリット

PDFは広く使用されているドキュメント形式ですが、画像に変換することで新たな可能性が開かれます。この変換プロセスは、単なるフォーマットの変更以上の価値をもたらし、多くのビジネスシーンで活用できます。以下に、PDFを画像に変換する主な利点をまとめます。

PDFを画像に変換する主なメリット:

1.互換性の向上ほぼすべてのデバイスやプラットフォームで表示可能
2.編集・加工の容易さ一般的な画像編集ソフトで自由に修正や調整が可能
3.セキュリティとブランディングすかし(ウォーターマーク)の追加による著作権保護や企業ブランドの強化
4.機能拡張QRコード埋め込みやメタデータ充実化による情報アクセス性の向上
5.OCR処理の前処理PDFを画像に変換することで、OCR(光学文字認識)ソフトウェアとの互換性や変換速度が向上
6.アプリケーション統合とシステム設計の柔軟性向上画像形式にすることで、様々なアプリケーションやシステムでの取り扱いが容易

無料オンラインコンバーターの使用方法

PDFを画像に素早く変換したい場合、無料のオンラインコンバーターが便利です。専用ソフトのインストールなしで、ウェブブラウザだけで作業ができます。ここでは、JPedalの無料オンライン PDF から画像への変換ツールの使用方法を解説します。

  1. JPedalの無料のオンラインコンバーターへアクセスします。
無料オンラインコンバーターの使用方法1
  1. 「ファイルを選ぶ」で、画像に変換したいPDFファイルを選びます。
  2. 詳細オプションではPDFのパスワード設定やスケール(1 から 10)を設定できます。
  3. 「変換する」を押すとファイルをアップロードして、変換をはじめます。
  4. 変換が完了すると「Zipダウンロード」を押して変換したファイルをダウンロードします。
  1. ダウンロードしたファイルを解凍して、ファイルを閲覧します。

このオンラインコンバーターでは、PDFから様々な画像ファイルや、HTML5、SVGへの変換。Word、Excel、PowerPointフォーマットのファイルを直接変換することができます。「オンラインで PDF からPNG に変換」の青い文字をクリックすると変更できます。

YouTube動画でも解説しています

JPedal試用版によるコマンドライン変換

オンラインコンバーターは手軽ですが、ファイルサイズや変換回数に制限があり、多くの場合PDFから画像への変換に特化しています。より高度なPDF処理が必要な場合、JPedalの無料トライアルをお試しください。JPedalは画像変換以外にも、PDF表示やテキスト抽出など多彩な機能を提供し、大容量ファイルの処理や自動化にも対応します。開発者やシステム管理者向けのこの強力なツールの使用方法を、コマンドラインを使った方法で解説します。

 

1. 環境設定

Java のインストールと設定

Java Development Kit (JDK) をダウンロードしインストールします。Oracle JDK または OpenJDK から選択できます。

JPedalがサポートしているJavaのバージョンについてはこちらをご覧下さい。

環境変数の設定
  • JAVA_HOME 環境変数を設定し、Javaのインストールディレクトリを指定します。
  • PATH 環境変数に %JAVA_HOME%\\bin を追加します。

この設定により、コマンドプロンプトでJava関連のコマンドを実行できるようになります。

JPedal のダウンロード

JPedalのウェブページから無料トライアルを申し込みます。申込み後、IDRSolutions社からダウンロードのメールが届きます。

https://www.intwk.co.jp/jpedal/

ダウンロードしたZIPファイルを任意のディレクトリに解凍します。

2. コマンドライン実行の手順

  1. コマンドプロンプト(Windows)またはターミナル(Mac/Linux)を開きます。
  2. JPedalの解凍ディレクトリに移動します:
				
					cd path/to/jpedal/directory
				
			
  1. 例:1つのPDFファイルをPNG形式に変換
				
					java -jar jpedal-trial.jar --convert "pdfFile.pdf" output_directory png
//pmgをbmpやjpgに変更することができます
				
			
  1. 例:フォルダにあるPDFファイル全てをPNG形式に変換
				
					java -jar jpedal-trial.jar --convert input_directory output_directory png
				
			
  1. 指定したページのみを変換する
				
					java -jar jpedal-trial.jar --convert input_directory output_directory png 5-7
				
			
  1. 指定ページで書き出す画像のスケールを変更する
				
					java -jar jpedal-trial.jar --convert input_directory output_directory png 0.5 5-10
				
			
  1. 他の利用できる機能とコマンドを調べる (コマンドラインでできることは限られています)
				
					java -jar jpedal-trial.jar --help

JPedal - Java PDF Library - 2024.06

Features:
	PDF Viewer
	PDF Inspector
	Convert Pages to Images
	Extract Text
	Extract Embedded Images
	Extract Metadata
	Print PDF

Homepage: https://www.idrsolutions.com/jpedal
Javadoc: https://files.idrsolutions.com/maven/site/jpedal/apidocs/

Available Commands: 
	--view file.pdf [pageNumber]
	--convert inputDir outputDir [outputFormat] [scalingAsFloat] [pageRange]
	--help
	--print file.pdf printerName [pageNumber]
	--extractImages file.pdf outputDir outputFormat
	--extractClippedImages file.pdf outputDir outputFormat (outputHeight subDirectory)...
	--metadata file.pdf [typeOfData]...
	--inspect file.pdf
	--copyoutline oldfile.pdf newfile.pdf

				
			

PDFファイルの画像変換に関する詳しい情報はこちらもご覧下さい。

JPedalを使用したPDFから画像への変換は、多岐にわたるビジネスニーズに応えるための強力なツールです。無料オンラインコンバーターとJPedalの無料トライアルを利用したコマンドライン操作をお試しいただくことで、簡単かつ効率的にPDFを画像に変換できます。さらに、JPedalはPDFファイルの表示、印刷、テキスト抽出、画像抽出、メタデータの取得など多機能を備えています。是非、無料トライアルを試して、その実力を体感してください。JPedalは、開発者からビジネスユーザーまで、幅広いユーザーにとって最適なPDF処理ソリューションです。

JPedalは、Java開発者のための究極のPDFライブラリです。PDFファイルの表示、変換、印刷、解析がこれまで以上に簡単になります。完全なJava PDFビューアを提供するJPedalは、あなたのJavaアプリケーションにシームレスに統合できます。あなたのPCやサーバ上で動作するため、外部への通信がなく、顧客のファイルは常にレベルの高い安全性を提供します。さらに、JPedalはその驚異的なパフォーマンスと信頼性は、他の代替品を遥かに凌ぎ、3-4倍の高速性を誇ります。JPedalを選ぶことで、あなたのビジネスは次のレベルへと進化します。また、6週間1回のアップデートと無料サポートで常に最新の機能やセキュリティに対応します。

投稿 PDFを画像に変換−JPedalライブラリの実力株式会社インターワーク に最初に表示されました。

]]>
PDFの任意の場所に画像を挿入−自動化で実現する業務効率化 https://www.intwk.co.jp/2024/08/09/pdf%e3%81%ae%e4%bb%bb%e6%84%8f%e3%81%ae%e5%a0%b4%e6%89%80%e3%81%ab%e7%94%bb%e5%83%8f%e3%82%92%e6%8c%bf%e5%85%a5%e3%81%99%e3%82%8b/ Fri, 09 Aug 2024 01:00:58 +0000 https://www.intwk.co.jp/?p=12700 PDFの編集、特に画像の挿入は多くの企業にとって重要な作業です。本記事では、JPedalの最新機能を使用してPDFの任意の場所に画像を自動挿入する方法を紹介します。社内書類のPDFファイルには全て㊙マークを入れるなど、セキュリティ対策にも活用できます。また、校正中のドキュメントへのドラフトマーク追加や承認済み注文書への承認スタンプ挿入など、実用的な例をJavaのサンプルコードと共に解説。PDF編集の自動化による業務効率化とセキュリティ強化の実現方法をご覧ください。

投稿 PDFの任意の場所に画像を挿入−自動化で実現する業務効率化株式会社インターワーク に最初に表示されました。

]]>

この機能を利用すると、社内書類のPDFファイルには全て㊙マークを入れるなど、セキュリティ対策を強化できます。さらに、校正中のドキュメントに、ドラフトであるといったマークを全ページに挿入したり、注文書であれば、承認されたことを示す承認済みの画像を挿入することができます。このブログでは、これらの実用的な利用例として、校正中のドキュメントへのドラフトマーク挿入、取引先との注文書への承認マーク挿入などを、実際のプログラム例と合わせて解説しています。

校正中や作成中のPDFドキュメントにドラフトマークを挿入する

作成途中や校正中のドキュメントをPDFで配布する場合、配布しているドキュメントが「最終のものではない」ということをしっかりと伝えておかないと間違った情報が伝わってしまう可能性があります。そのような間違いを起こさないために、配布時にシステムでドラフトであると言った画像を差し込んで解決できます。

この例では、以下の画像のようにドキュメント左上にドラフトマークの画像を差し込んでいます。

校正中や作成中のPDFドキュメントにドラフトマークを挿入する クリックすると実際のPDFが表示されます
DRAFT-logo.png

用意するのは差し込む画像とPDFドキュメント(document.pdf)です。画像はPNGファイルで、背景は透過させています。xとyで画像の配置座標を指定します。

				
					final WritableAnnotation[] annotations = new WritableAnnotation[1];
final BufferedImage bi = JDeli.read(new File("Draft/DRAFT-logo.png"));
final int x = 15, y = 785;
annotations[0] = new ImageAnnotation(0, x, y, x + bi.getWidth() / 2.0f, y + bi.getHeight() / 2.0f, bi);
AnnotationWriter.writeAnnotations(new File("Draft/document.pdf"), new File("Draft/document-STAMPED.pdf"), annotations);

				
			
画像の左下隅は(x0, y0)、右上隅は(x1, y1)となり、画像はこれらの境界に収まるようにスケーリングされます。
 
元のファイル(document.pdf)から画像を配置した新規ファイル(document-STAMPED.pdf)に書き出されます。
 

プログラムで発注書のPDFに承認のマークを挿入する

発注書が承認されたかどうか、発注書のPDFに承認後、承認マークをプログラムで挿入することで、発注書が承認済みかどうかを確認できます。一般的には作成した発注書を印刷し、承認者への承認印を押し、再度スキャンしてPDF化、発注済みのPDFとして保管というデジタル処理とアナログ処理が混じって効率的に処理できません。

JPedalを利用することで、これらの処理をプログラムで実行しシステムでの業務フローを実現できます。

プログラムで発注書のPDFに承認のマークを挿入する クリックすると実際のPDFが表示されます
承認済マーク
Approved-logo.png

用意するのは差し込む画像とPDFドキュメント(document.pdf)です。画像はPNGファイルで、背景は透過させています。xとyで画像の配置座標を指定します。

				
					final WritableAnnotation[] annotations = new WritableAnnotation[1];
final BufferedImage bi = JDeli.read(new File("Draft/DRAFT-logo.png"));
final int x = 15, y = 785;
annotations[0] = new ImageAnnotation(0, x, y, x + bi.getWidth() / 2.0f, y + bi.getHeight() / 2.0f, bi);
AnnotationWriter.writeAnnotations(new File("Draft/document.pdf"), new File("Draft/document-STAMPED.pdf"), annotations);


				
			

こちらの例でも前述の例と同様、承認マークの画像を用意するだけです。配置が前述と違いますので、final int x = 15, y = 785 となります。

JPedalは様々なアノテーション(注釈)に対応します

さあ、いかがでしょうか?アイデア次第で、様々な業務フローシステムで利用できるかと思います。JPedalではこれらの画像の他にも円形、正方形、線、ポリゴン、テキスト、リンクなどがプログラムで実行でき、JPedalのGUIのビューアを使えば、加えてインク(手書き)、ポリライン(指定した点をつないで線を描く)、ハイライト、テキスト、フリーテキストなどのアノテーション(注釈)を追加できます。

■JPedalのJavaビューワ画面
JPedalのJavaビューワ画面

※注釈タブの上に表示されているのは、異なる注釈タイプを作成できる10個のボタンです。この下には、ファイルに存在する注釈を表示するリストがあります。

JPedalは製品と同じ機能を無料でトライアルできます。下記のリンクボタンからぜひトライアルをしてみてください。

JPedalは、Java開発者のための究極のPDFライブラリです。PDFファイルの表示、変換、印刷、解析がこれまで以上に簡単になります。完全なJava PDFビューアを提供するJPedalは、あなたのJavaアプリケーションにシームレスに統合できます。あなたのPCやサーバ上で動作するため、外部への通信がなく、顧客のファイルは常にレベルの高い安全性を提供します。さらに、JPedalはその驚異的なパフォーマンスと信頼性は、他の代替品を遥かに凌ぎ、3-4倍の高速性を誇ります。JPedalを選ぶことで、あなたのビジネスは次のレベルへと進化します。また、6週間1回のアップデートと無料サポートで常に最新の機能やセキュリティに対応します。

投稿 PDFの任意の場所に画像を挿入−自動化で実現する業務効率化株式会社インターワーク に最初に表示されました。

]]>
PDFファイルに画像はどのように格納されていますか? https://www.intwk.co.jp/2024/06/20/pdf%e3%81%ab%e7%94%bb%e5%83%8f%e3%81%af%e3%81%a9%e3%81%ae%e3%82%88%e3%81%86%e3%81%ab%e6%a0%bc%e7%b4%8d%e3%81%95%e3%82%8c%e3%81%a6%e3%81%84%e3%81%be%e3%81%99%e3%81%8b/ Thu, 20 Jun 2024 00:00:09 +0000 https://www.intwk.co.jp/?p=17586 マークは1999年からJavaとPDFに携わっており、NetBeansの大ファンです。カンファレンスでの講演が趣味です。今回は、PDFファイルに表示される画像はどのように格納されているのかを説明します。例えばMicrosoft WordでPNGやJPEGの画像を配置して、PDFファイルに書き出したときどのように画像ファイルは処理されているのでしょうか?

投稿 PDFファイルに画像はどのように格納されていますか?株式会社インターワーク に最初に表示されました。

]]>

著者 Mark Stephens (IDRsolutions)  翻訳/編集 インターワーク

私がPDFファイル形式を学んでいたとき、PDFでは画像が非常に複雑なトピックであることが分かりました。そこで今回は、PDFファイルにおける画像の扱いについて、わかりやすく解説していきたいと思います。改善するための提案や、疑問点があればお知らせください。

ラスター画像とベクター画像

画像にはラスター画像とベクター画像の2種類があります。ラスター画像はピクセルの集まりで、解像度に依存し、拡大するとピクセルが見えます。JPEG、PNG、BMPなどが一般的です。ベクター画像は線や形状を数式で表現し、解像度に依存せず、拡大しても画質が劣化しません。SVGやAIなどが一般的で、どのサイズにもスケーリング可能です。PDFファイルにはこの両方のタイプの画像を含むことができます。

PDFにおけるラスター画像の保存形式

PDFファイルは通常、画像を別のオブジェクト(XObject)として格納し、そのオブジェクトには画像の生のバイナリデータが含まれています。これらはすべて、ページまたはファイルのリソースオブジェクトにリストされ、それぞれに名前があります(Im1など)。PDFの中に埋め込まれた画像を、Tif、Gif、Bmp、Jpeg、Pngと考えるのは間違いです。そうではありません。

PDFに格納されている画像は通常、一般的な画像フォーマット(例えばTif、Jpg、Pngなど)として保存されるわけではなく、ピクセルのバイナリデータや色空間情報など、画像に関するさまざまな情報を含むオブジェクトとして保存されます。これにより、同じ画像が異なるPDF作成ツールによって異なる方法で保存されることがあります。

PDFオブジェクトビューアの例

以下は、AcrobatのPDFオブジェクトビューアに表示された例です。
 

※上記の画像は、表紙のメイン画像の部分、Adobe Acrobatのツールから、プリフライト→オプション→PDFの内部構造→Logical Structureで閲覧出来ます。

生の画像データがページに必要なサイズに調整されることもあれば、そうでないこともあります。その場合は、描画時に拡大または縮小されます。PDF作成ツールによって、PDFファイルの作成方法はまったく異なります。

圧縮とフォーマット

実際のピクセルデータは圧縮することができ、圧縮フォーマットの一つ(DCTDecode)はJPEGで使用されているものと同じです(JPXはJPEG2000と同じです)。このデータを保存した場合、JPEGファイルとして開くことができますが、色空間データを含むように変更する必要があるかもしれません。

画像の描画と操作

画像は、PDFコンテンツストリーム内でDOコマンドと画像名(Im1など)によって描画されます。この画像は複数回使用することができ、拡大縮小、回転、切り抜きなど、DOコマンド実行時に設定された値を取ることができます。目には画像に見えるものでも、複数の画像で構成されていたり、画像ですらなかったりすることがあります!

画像の抽出について

つまり、PDFからこれらのラスター画像を取り出したい場合、すべての生データから画像を組み立てる必要があるのです。また、画像の「生」(より高画質で、まったく同じサイズであることもあります)バージョンと、切り抜き/拡大縮小されたバージョンがあり、どちらも抽出することができます(さらに、クリップを生に拡大縮小して、より高画質な画像を作成することもできます - JPedalでは、これを利用してPDF切り抜き画像抽出を提供しています)。

PDFにおけるベクター画像の保存形式

PDFにおけるベクター画像は、数式や描画命令で形状を定義するパス、塗りつぶしやストロークのプロパティ、テキストオブジェクトなどとして保存されます。これにより、解像度に依存せず、どのサイズにもスケーリング可能な高品質なグラフィックが実現されます。

具体的には、以下のような方法で保存されます:

パス、塗りつぶしやストローク

パス(Path): 線や図形はパスとして保存され、描画命令で定義されます。例えば、moveto(開始点の設定)、lineto(直線の描画)、curveto(曲線の描画)などの命令が使用されます。これらの命令は、PostScript言語に基づいており、ベクター画像の基本要素です。

				
					/Path
100 100 moveto
200 200 lineto
150 250 curveto

				
			

塗りつぶしとストローク: パスの内部を塗りつぶすための色やパターン、境界線を描くためのストロークプロパティも保存されます。これには色の指定(RGBやCMYK)、グラデーション、パターンなどが含まれます。

				
					/ColorSpace /DeviceRGB
/Color [1.0 0.0 0.0] % 赤色
/Pattern /ShadingType2 % グラデーション

				
			

テキスト

テキストオブジェクト: テキストは別のオブジェクトとして保存され、フォント、サイズ、位置、スタイルなどの情報が含まれます。PDF内のテキストはベクター形式で描画されるため、拡大しても画質が劣化しません。

				
					BT % テキストオブジェクトの開始
/F1 12 Tf % フォントとサイズの設定
100 100 Td % 位置の設定
(Hello, World!) Tj % テキストの描画
ET % テキストオブジェクトの終了

				
			

これらの要素により、PDFは解像度に依存しない高品質なグラフィックを提供します。線や図とテキストは異なるオブジェクトとして保存され、PDFビューアやエディタではそれぞれを独立して操作できます。例えば、テキストを選択してコピーしたり、パスの色を変更したりすることが可能です。

画像の抽出について

PDFからベクター画像を抽出するには、描画命令や数式に基づいたデータを再構成する必要があります。ベクター画像は、パス、描画命令、塗りつぶしやストロークのプロパティ、テキストオブジェクトなどの形で保存されています。Adobe IllustratorPixelmator Proなどのツールを使用してPDFファイルを開き、抽出したい画像部分(図や表など)を視覚的に選択することで、高品質なベクター画像を抽出・編集・保存することが可能です。

より詳しく知りたい方は、ぜひ「PDFってこうなってる? 実践でPDFの内部構造を学ぼう」の記事をご覧下さい。特に、ベクター画像については「PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part 6:パスで図形を描こう」で解説しています。

JavaアプリでのPDFラスタライズが必要になったとき、JPedalの高機能なPDFビューアが効率のよい開発にきっとお役に立つことと思います。

JavaScript環境でのPDFラスタライズなら、PDF→HTML5/SVG変換でドキュメント表示するBuildVuをご検討ください。

JPedal、BuildVuともに無料で試用していただけます。ビューア機能や表示スピード、UIなどを、まずはご自身で実際にお試しのうえ、ぜひ導入をご検討ください。

投稿 PDFファイルに画像はどのように格納されていますか?株式会社インターワーク に最初に表示されました。

]]>
Javaのバージョンと機能 − Java 9から23まで https://www.intwk.co.jp/2024/06/06/java%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%a8%e6%a9%9f%e8%83%bd-java-9%e3%81%8b%e3%82%8923%e3%81%be%e3%81%a7/ Thu, 06 Jun 2024 08:05:51 +0000 https://www.intwk.co.jp/?p=17543 IDRSolutionsのプログラマーで、社内のJavaテストを担当しているKieran氏は余暇はガジェットとコードいじりを楽しんでいます。
今回、開発者向けブログ記事で、Javaのバージョンとその機能について詳しく解説しています。IDRSolutionsが現在サポートしているJava 8から、今後サポートを検討しているJava 9から23まで、各バージョンで追加された新機能を紹介します。

投稿 Javaのバージョンと機能 − Java 9から23まで株式会社インターワーク に最初に表示されました。

]]>

著者 Kieran France (IDRsolutions)  翻訳 インターワーク

私たちが使うのを楽しみにしているJavaの機能

古いバージョンのJavaをサポートすることのマイナス面の1つは、最新のJDKのリリース日から利用できないことです。バージョン別のさまざまなJava機能を覚えておくと、非常に便利です。サポートする最低バージョンが上がったら、ぜひ使ってみたいJavaの機能がたくさんあります。

最近私たちは、今後数年間にサポートすべきJavaの最小バージョンを決定するために、ユーザーと話し合ってきました。最小バージョンを検討する際には、各バージョンのサポート期間、あるバージョンをまだ使っている人の数、開発者がアクセスできる新機能を念頭に置きたいと考えました。

Javaの古いバージョンのサポートを維持するために時間を費やしていると、各バージョンで導入された機能を忘れてしまいがちです。私たちは現在Java 8をサポートしているので(この記事を書いている時点では)、Java 9 以降から Java 22 までの現時点でのすべてのバージョンを見直し、それぞれにどの新機能が追加されたかを書き留めておくことは有益だと考えました。この作業が完了したので、私たちが手にするのが楽しみな各バージョンの機能を共有したいと思います(プレビュー機能は無限の可能性があるため割愛します)。

Javaのバージョンとその機能

Java 9 の機能
  • [JEP-269] コレクション・ファクトリー・メソッド(例:List.of(a, b, c)
  • [JEP-266] ストリームAPIの改善
  • [JEP-251] マルチレゾリューション画像API
  • [JEP-213] インターフェイスのプライベートメソッド
  • [Multiple JEPs] Project Jigsaw: JavaモジュールとマルチリリースJarファイル

JDK 9は2017年9月21日にリリースされました

Java 10 の機能
  • [JEP-286] ローカル変数の型推論: var-keyword
  • [JEP-307] G1用パラレル・フルGC

JDK 10は2018年3月20日にリリースされました

Java 11 の機能
  • 文字列ユーティリティメソッド
    • Includes repeat(), isBlank(), strip(), lines()
  • ファイルユーティリティのメソッド
    • Includes Files.writeString and Files.readString(path);
  • [JEP-323] ラムダ・パラメータのローカル変数型推論 (var)
  • [JEP-321] 新しい HttpClient API

JDK 11は2018年9月25日にリリースされました

Java 12 の機能
  • 文字列ユーティリティメソッド
    • Includes indent(), transform()

JDK 12は2019年3月19日にリリースされました

Java 13 の機能
  • いくつかの機能がありますが、すべてJDKの内部またはプレビューのため、現時点では信頼できません。

JDK 13は2019年9月17日にリリースされました

Java 14 の機能

JDK 14は2020年3月17日にリリースされました

Java 15の機能
  • [JEP-378] テキストブロック / 複数行文字列

JDK 15は2020年9月15日にリリースされました

Java 16の機能
  • [JEP-394] instanceof のパターンマッチング
  • [JEP-395] レコード

JDK 16は2021年3月16日にリリースされました

Java 17の機能
  • [JEP-409] シールドクラス
  • [JEP-415] コンテキスト固有のデシリアライズ・フィルター

JDK 17は2021年9月14日にリリースされました

Java 18の機能
  • [JEP-400] UTF-8 がデフォルト
  • [JEP-408] シンプルWebサーバー
  • [JEP-413] JavaDocsのコードスニペット

JDK 18は2022年3月22日にリリースされました

Java 19の機能
  • いくつかの機能がありますが、すべてJDKの内部またはプレビューのため、現時点では信頼できません。

JDK 19は2022年9月20日にリリースされました

Java 20の機能
  • いくつかの機能がありますが、すべてJDKの内部またはプレビューのため、現時点では信頼できません。

JDK 20は2023年3月21日にリリースされました

Java 21の機能
  • [JEP-431] シーケンス・コレクション
  • [JEP-440] 記録パターン
  • [JEP-441] スイッチのパターン・マッチング
  • [JEP-444] 仮想スレッド
  • [JEP-452] キー・カプセル化メカニズムAPI

JDK 21は2023年9月19日にリリースされました

Java 22の機能
  • [JEP-456] 名前のない変数とパターン

JDK 22は2024年3月19日にリリースされました

PDFアプリ開発ツール(SDK)をお探しのみなさま、効率のよい開発作業のためにJPedal、BuildVu、JDeliがきっとお役に立つことと思います。
これら3製品は無料で試用していただけますので、まずはお試しのうえ、ぜひ導入をご検討ください。
JPedal、BuildVu、JDeliのシステム開発やプログラミング、無料トライアルの情報は下記の各製品のトライアルページをご覧ください。技術的なことから費用面まで、ご質問・ご相談も各製品ページの問合せボタンからお寄せください。

投稿 Javaのバージョンと機能 − Java 9から23まで株式会社インターワーク に最初に表示されました。

]]>
PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part5:Hello WorldのPDFを作ろう https://www.intwk.co.jp/2024/03/26/part5%ef%bc%9ahello-world%e3%81%aepdf%e3%82%92%e4%bd%9c%e3%82%8d%e3%81%86/ Tue, 26 Mar 2024 03:05:24 +0000 https://www.intwk.co.jp/?p=16867 「Part 1: PDFを理解するための第一歩」で、私はPDFファイルを構成するさまざまなオブジェクトについて説明しました。その中で言及したのがストリームオブジェクトです。ストリームオブジェクトは、PDFページの見た目を記述する命令を全て含んでいます。この記事の最後までに、私たちは「Hello World」のPDFを作成できるようになります。そのためには、PDFドキュメントにテキストを挿入するためのストリームオブジェクトを使う必要があります。

投稿 PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part5:Hello WorldのPDFを作ろう株式会社インターワーク に最初に表示されました。

]]>

どんな古いPDFでも、テキストエディタで開けば、表示されるテキストの大部分がストリームオブジェクト内に含まれていることがわかります。ストリームのフォーマットは他のオブジェクトとは少し異なり、ディクショナリーで始まります。このディクショナリーには、ストリームの長さをバイト数で示す/Lengthエントリが必要です。ストリームの長さとは、streamキーワードとendstreamキーワードの間(最後の改行文字を除く)の全てを指します。通常、PDFを開いた時点ではストリーム内のデータは圧縮されています。その圧縮形式は、ストリームの主ディクショナリー内の/Filterキーで確認できます。

例えば:

				
					10 0 obj<</Length 40 /Filter /FlateDecode>>
stream

…圧縮された内容…

endstream
endobj
				
			

この内容を解凍すると、一連の命令が現れます。これらの命令は、PDF内の全コンテンツを生成するためのコマンドなのです。以下は解凍後のストリームの内容です:

				
					vBT
/F1 24 Tf
175 720 Td
(Hello World!)Tj
ET
				
			

BTはテキストの開始を、ETはテキストの終了を意味します。その間の部分では、フォント、位置、表示するテキストを設定しています。命令はTf、Td、Tjです。これらの命令に必要な値は、命令の前に書かれます。例えば、最初の命令Tfにはフォントの参照(/F1、これについては後で説明します)とフォントサイズ24が必要です。Tdオペレータはテキストの位置を設定します。1番目のパラメータは左からの単位、2番目のパラメータは下からの単位を表します。これらの単位は面白いもので、プリンタやモニタなど実際のデバイスにレンダリングされる時だけ、現実世界の座標に変換される論理的な座標系に関連しています。これにより、異なる出力媒体でもテキストのサイズと位置を一定に保つことができるのです。最後にTj命令があり、カッコ内の文字列がPDFドキュメントに描画されます。

これをPDFドキュメントに追加する前に、/F1参照を解決しなければなりません。ストリーム内では、ストリーム外で使うようなオブジェクト参照(例: 10 0 R)は使えません。/F1をオブジェクトにマッピングし、それを/Resources辞書で利用可能にする必要があります。このリソース辞書は、ストリームオブジェクトを指す/Contentsエントリと関連付けられています:

				
					3 0 obj
<</Type /Page /Parent 2 0 R /Resources 4 0 R /MediaBox [0 0 500 800] /Contents 7 0 R>>
endobj
4 0 obj
<</Font 5 0 R>>
endobj
5 0 obj
<</F1 6 0 R>>
endobj
6 0 obj
<</Type /Font /Subtype /Type1 /BaseFont /Helvetica>>
endobj
7 0 obj
<</Length 40>>
stream
BT
/F1 24 Tf
…..
				
			

ここでは/Pageオブジェクトを使っています。ページの/Contentsエントリは、テキストを描画するストリームオブジェクトを指しています。ストリームは/F1オブジェクトが何を指しているのかを知る必要があります。/Resources辞書は4 0 Rにあり、/Fontエントリのみを含んでいます。これが/F1のマッピング先を指しています。5 0 objを見ると、/F1がHelveticaというデフォルトフォントの一つを表すオブジェクトにマッピングされていることがわかります。一見回りくどく感じるかもしれませんが、実はPDFビューアの速度向上に役立っています。フォントを読み込む代わりに参照を保持しておき、そのフォントが実際に使われない(そのページが表示されない)場合は読み込む必要がないのです。

これらを全て組み合わせることで、Hello_World.pdf ドキュメントを作成する方法が得られます。ここでは構造と内容がより分かりやすく記載しています。

				
					%PDF-2.0

% カタログオブジェクト
1 0 obj
<</Type /Catalog /Pages 2 0 R>>
endobj

% ページツリーオブジェクト
2 0 obj
<</Type /Pages /Kids [3 0 R] /Count 1>>
endobj

% ページオブジェクト
3 0 obj
<</Type /Page /Parent 2 0 R /Resources 4 0 R /MediaBox [0 0 500 800] /Contents 6 0 R>>
endobj

% リソースオブジェクト
4 0 obj
<</Font <</F1 5 0 R>>>>
endobj

% フォントオブジェクト
5 0 obj
<</Type /Font /Subtype /Type1 /BaseFont /Helvetica>>
endobj

% コンテンツストリームオブジェクト
6 0 obj
<</Length 44>>
stream
BT
/F1 24 Tf
175 720 Td
(Hello World!) Tj
ET
endstream
endobj

% クロスリファレンステーブル
xref
0 7
0000000000 65535 f 
0000000009 00000 n 
0000000056 00000 n 
0000000111 00000 n 
0000000212 00000 n 
0000000250 00000 n 
0000000317 00000 n 

% トレーラー
trailer
<</Size 7 /Root 1 0 R>>

% クロスリファレンステーブルの開始位置
startxref
406

%%EOF

				
			

PDFアプリ開発ツール(SDK)をお探しのみなさま、効率のよい開発作業のためにJPedal、BuildVu、JDeliがきっとお役に立つことと思います。
これら3製品は無料で試用していただけますので、まずはお試しのうえ、ぜひ導入をご検討ください。
JPedal、BuildVu、JDeliのシステム開発やプログラミング、無料トライアルの情報は下記の各製品のトライアルページをご覧ください。技術的なことから費用面まで、ご質問・ご相談も各製品ページの問合せボタンからお寄せください。

投稿 PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part5:Hello WorldのPDFを作ろう株式会社インターワーク に最初に表示されました。

]]>
PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part4:白紙のPDFページを自作する https://www.intwk.co.jp/2024/03/26/part4%ef%bc%9a%e7%99%bd%e7%b4%99%e3%81%aepdf%e3%83%9a%e3%83%bc%e3%82%b8%e3%82%92%e8%87%aa%e4%bd%9c%e3%81%99%e3%82%8b/ Tue, 26 Mar 2024 03:05:21 +0000 https://www.intwk.co.jp/?p=16826 準備はいいですか? もう間もなく、あなたは自分自身で制作した輝く真新しい完全な白紙のPDFドキュメントの所有者となることができます。その前に、Part 3ではPDFのボディ部分について詳しく説明します。これらの知識を使って、テキストエディタとバイナリエディタでシンプルな白紙のPDFを実際に作ってみましょう。完成したPDFファイルは、あなたにとって特別な一品になることでしょう。

投稿 PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part4:白紙のPDFページを自作する株式会社インターワーク に最初に表示されました。

]]>

以前にも触れましたが、ボディ部分にはPDFビューアーで目にする文書の内容を形作る全オブジェクトが含まれています。これらをPDFリーダーが正確に解釈できるよう、いくつかの重要なディクショナリーオブジェクトが必要不可欠です。

PDFファイルのボディセクションにあるオブジェクトは、すべて「カタログ」と呼ばれるディクショナリーオブジェクトを根本に持つ木構造で配置されています。これはトレーラーセクションのディクショナリーが指していたルートオブジェクトです。カタログディクショナリーには最低限、/Type /Catalog(これがカタログであることをPDFリーダーに伝えるため)と、ページツリーのルートを表す別のディクショナリーオブジェクトへの参照、つまり/Pages 2 0 Rが必要です。

				
					1 0 obj
<</Type /Catalog /Pages 2 0 R>>
endobj
				
			

ページツリーには2種類のノードがあり、どちらもディクショナリーオブジェクトです。カタログが知っている必要があるページツリーノードと、ドキュメント内の単一ページを表すページノードです。ページツリーノードは、ページノードへの参照と他のページツリーノードへの参照を含みます。ページツリーノードが章などの実際の論理構造を指すわけではなく、多くのページを持つ大きなドキュメントが迅速にアクセスできるように木構造のページをバランスよく配置するためのものです。

私たちのページツリーノード(2 0 obj)にはいくつかの要素を追加する必要があります。通常通り、それが何であるかを示すエントリー/Type /Pagesが必要です。そして、接続されているページツリーの他の部分への参照を含む配列/Kidsも必要です。今回は大胆にもドキュメントに1ページだけ含めます:
/Kids 3 0 R
このページノードが接続するすべてのページノードの数をカウントする必要があります。ルートにある100ページのドキュメントであればカウントは100ですが、同じドキュメント内で1ページだけを持つ別のページツリーノードの場合はカウントは1です。

ここでの目標は、ルートページツリーノードに以下の内容を持たせることです:

				
					2 0 obj
<</Type /Pages /Kids [3 0 R] /Count 1>>
endobj
				
			

このオブジェクトは3 0 objを参照しますが、これがページノードになります。これには/Type /Pageが必要で、その親ノードへの参照 /Parent 2 0 R が必要です。

ページとしてのオブジェクトには、ページについての多くの情報を記述するリソース要素が必要です。/Resourcesキーは、ページが使用するフォントや、グラフィック、シェーディング、面白い名前の要素を含むディクショナリーにマッピングされます。しかし、当面はこれらの面白い要素を避け、リソースを次のパートで詳しく扱うため、ここではそれを無視します。これを省略することで白紙のページが得られます。/Resources<<>>/Resources null と記述すれば、PDFリーダーには白紙のページとして認識されます。

ページオブジェクトがPDFビューアに受け入れられるために必要な最後の要素は、/MediaBoxエントリーです。MediaBoxは、ページの全体サイズを記述する配列を参照します。ですが、このMediaBox配列の内容を説明する前に、オブジェクト内で使用されるさまざまなデータ型について説明するのが良い時です。例えば、メディアボックスのエントリーは次のようになります:

				
					/MediaBox [0 0 500 800]
				
			

これは名前オブジェクト( /MediaBox )と配列オブジェクト [0 0 500 800]で、配列内のデータは長方形の二つの角の座標を表します(左下の角が0 0で、右上の角が500 800)。これら4つの数字は配列オブジェクト内で必要な「長方形」型のデータを表します。これらは、PDF内で特定の場所に物を配置するために非常に便利です。さて、ここが私たちのページオブジェクトです:

				
					3 0 obj
<</Type /Page /Parent 2 0 R /Resources<</MediaBox [0 0 500 800]>>
endobj
				
			

これで白紙ページが完成します。Part 3で作成したものから調整を加えると、以下のようになります:

				
					%PDF-2.0
1 0 obj
<</Type /Catalog /Pages 2 0 R>>
endobj
2 0 obj
<</Type /Pages /Kids [3 0 R] /Count 1>>
endobj
3 0 obj
<</Type /Page /Parent 2 0 R /MediaBox [0 0 500 800]>>
endobj
xref
0 4
0000000000 65535 fq
0000000010 00000 n
0000000060 00000 n
0000000115 00000 n
trailer
<</Size 4 /Root 1 0 R>>
startxref
180
%%EOF
				
			

PDFファイルの構造を調整する際、クロスリファレンス(xref)テーブルとトレーラーセクションの微調整が必要となります。具体的には、xrefセクション直後に表されるテーブルのエントリ数を4に更新し、トレーラーディクショナリーにはファイル内の新しいオブジェクトの正確な位置を指し示す新たな情報を加えます。

さらに、ファイル内のxrefテーブルへの参照となるstartxrefアドレスも、テーブルの新しい位置に合わせて調整することが求められます。これらの変更を行う際には、数字を正確に編集するためにバイナリエディタの使用が不可欠です。このプロセスを通じて、PDFファイルの構造が正しく更新され、内容の整合性が保たれるようにします。

具体的には、xrefという文字列が始まる直前の空白を含む全てのバイトが、startxrefに記載すべき正確な位置となります。この位置をバイト単位で正確に計算し、startxrefの値として指定することが重要です。これにより、PDFリーダーはクロスリファレンステーブルを正しく見つけることができ、ファイル内のオブジェクトへのアクセスが正確に行われます。

xrefの位置を特定する
図をクリックして拡大する

PDFアプリ開発ツール(SDK)をお探しのみなさま、効率のよい開発作業のためにJPedal、BuildVu、JDeliがきっとお役に立つことと思います。
これら3製品は無料で試用していただけますので、まずはお試しのうえ、ぜひ導入をご検討ください。
JPedal、BuildVu、JDeliのシステム開発やプログラミング、無料トライアルの情報は下記の各製品のトライアルページをご覧ください。技術的なことから費用面まで、ご質問・ご相談も各製品ページの問合せボタンからお寄せください。

投稿 PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part4:白紙のPDFページを自作する株式会社インターワーク に最初に表示されました。

]]>
PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part 6:パスで図形を描こう https://www.intwk.co.jp/2024/03/26/part-6%ef%bc%9a%e3%83%91%e3%82%b9%e3%81%a7%e5%9b%b3%e5%bd%a2%e3%82%92%e6%8f%8f%e3%81%93%e3%81%86/ Tue, 26 Mar 2024 03:05:05 +0000 https://www.intwk.co.jp/?p=16882 「Part 4: 白紙のPDFページを自作する」で示したように、PDFはストリームオブジェクト内にある一連のコマンドを使って描画されます。これらのコマンドを通じて、PDFビューアーはページ上に表示される全コンテンツを描画する方法を理解できます。この記事では、グラフィックコマンドを探究し、ページ上に数本の線を描画するPDFをテキストエディタで作成します。

投稿 PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part 6:パスで図形を描こう株式会社インターワーク に最初に表示されました。

]]>

コンテンツストリーム内では、PDFが理解できるさまざまなグラフィックオブジェクトの組み合わせを作成できます。この記事で取り上げるのはパスオブジェクトです。パスオブジェクトは基本的に点のリストです。各パスオブジェクトには始点があり、新しい点がリストに追加されます。パスの各セグメントは直線、曲線、または長方形である可能性があります。点の集合は一つのパスオブジェクトとして扱われます。なぜなら、適用するペインティング操作がパスの全セグメントに適用されるからです。

例えば:

				
					175 720 m 175 50 l h S
				
			

上記の行には3つのコマンドが含まれています。「m」は指定された座標でパスを開始することを意味します。「l」コマンドは、パスの前の点から座標175, 50への線分を描画します。「h」コマンドはパスを閉じます。パスを設定したら、何かしらのペインティングコマンドを与えてアクションを実行しなければなりません。「S」コマンドはパスに沿って線を描画します。

				
					175 720 m 175 700 l 300 800 400 720 v h S
				
			

これには「v」コマンドが追加されており、曲線を描画します。最初の2つの座標は制御点で、線の曲がり具合を設定し、次の2つの座標は線の終点です。

				
					175 720 m 175 700 l 300 800 400 600 v 100 650 50 75 re h S
				
			

「re」コマンドは、座標100, 650に幅50、高さ75の長方形を描画します。この長方形はパスに物理的に接続されていませんが、同じパスの一部として扱われ、最後に適用されるペインティング操作(S)は全体に適用されます。

以下が完成したコードです:

				
					%PDF-2.0

% カタログオブジェクト
1 0 obj
<</Type /Catalog /Pages 2 0 R>>
endobj

% ページツリーオブジェクト
2 0 obj
<</Type /Pages /Kids [3 0 R] /Count 1 /MediaBox [0 0 500 800]>>
endobj

% ページオブジェクト
3 0 obj
<</Type /Page /Parent 2 0 R /Contents 4 0 R>>
endobj

% コンテンツストリームオブジェクト
4 0 obj
<</Length 61>>
stream
175 720 m % 移動
175 500 l % 直線
300 800 400 600 v % 曲線
100 650 50 75 re % 四角形
h % 最後の点を最初の点に接続
S % ストローク
endstream
endobj

% クロスリファレンステーブル
xref
0 5
0000000000 65535 f
0000000010 00000 n
0000000059 00000 n
0000000140 00000 n
0000000202 00000 n

% トレーラー
trailer
<</Size 5 /Root 1 0 R>>

% クロスリファレンステーブルの開始位置
startxref
598

%%EOF
				
			

上記のコードを draw-line.pdf ファイルとして保存し、PDFビューアーで開くと、数本の線と一つの長方形が表示されるはずです。現時点では見た目は単調かもしれませんが、次の記事ではパスを塗りつぶすさまざまな方法について見ていきます。

PDFアプリ開発ツール(SDK)をお探しのみなさま、効率のよい開発作業のためにJPedal、BuildVu、JDeliがきっとお役に立つことと思います。
これら3製品は無料で試用していただけますので、まずはお試しのうえ、ぜひ導入をご検討ください。
JPedal、BuildVu、JDeliのシステム開発やプログラミング、無料トライアルの情報は下記の各製品のトライアルページをご覧ください。技術的なことから費用面まで、ご質問・ご相談も各製品ページの問合せボタンからお寄せください。

投稿 PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part 6:パスで図形を描こう株式会社インターワーク に最初に表示されました。

]]>