fbpx

PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part 6:パスで図形を描こう

「Part 4: 白紙の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のシステム開発やプログラミング、無料トライアルの情報は下記の各製品のトライアルページをご覧ください。技術的なことから費用面まで、ご質問・ご相談も各製品ページの問合せボタンからお寄せください。

    Facebook
    Twitter
    Email
    公式ブログロゴ

    製品に関する記事や開発者のブログ

    PDF用語集

    この記事ではPDF関連の一般的な用語を網羅し、それぞれの定義を解説します。

    PDFメタデータとは?開発者が知っておくべき基礎知識

    PDFファイルを扱う際、「メタデータ」という言葉を耳にすることが多いでしょう。メタデータとは、ドキュメントに関する情報を指し、ファイルの作成者や作成日、使用されたソフトウェアなど、ドキュメントを説明する情報が含まれています。この記事では、開発者向けにPDFメタデータの基本からその利用方法までをわかりやすく解説します。

    PDFを最適化して軽量化!使われないオブジェクト削除で得られる驚きの効果

    Javaでシステム開発を行う中で、PDFファイルのサイズが予想以上に大きくなり困った経験はありませんか?その原因の一つに「使われないオブジェクト」の存在があります。今回は、Javaの開発者でJPedalのプロダクトマネージャーのJacob氏の記事を元に、使われないオブジェクトとは何か、その削除方法、削除によるファイルサイズの削減効果、そしてその他のメリットについて解説します。

    PDFファイルを扱うシステム開発・ウェブ開発に役立つ

    開発者向けPDF入門ガイド

    開発者向けPDF入門ガイド

    PDFの基礎から応用まで開発者のための入門ガイド2024年版

    PDF の仕様や活用方法など、開発者に必要な情報がコンパクトにまとめました。初めてPDFを扱う開発者にも分かりやすく、基礎から応用までカバーしているため、PDF のポテンシャルを最大限に引き出し、アプリケーション開発やドキュメント管理の効率化を図るための手引きとなるでしょう。技術的な側面に興味がある開発者だけでなく、ビジネスでPDFを有効活用したい方にもおすすめの一冊です。

    MENU
    PAGE TOP