fbpx

PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part3:自作のPDFを作成する

前回はテキストエディタを使ってPDFファイルの構造を作る方法を学びました。今回はさらに一歩進んで、実際にPDFを作ってみましょう。ただし、最初に作るPDFには一つだけ問題があります。それは、実際には機能しないということです。でも心配しないでください。Acrobat PDFビューアが、問題の原因を特定するためのヒントとなるエラーメッセージを表示してくれます。このエラーメッセージを手がかりに、機能するPDFファイルを作るための基礎を学ぶことができるのです。用意するものはテキストエディタと、バイナリエディタ(16進数エディタ)だけ。私はHxDというバイナリエディタを使用しています。
Part3:自作のPDFを作成する

まず、mypdf.pdf という新しい空のファイルを作成します。ファイルが作成できたら、Adobe Acrobat Readerで開いて何と言われるか見てみます: 

「Adobe Acrobat Reader で「mypdf.pdf」を開けませんでした。ファイルの種類がサポートされていないか、またはファイルが破損している可能性があります。例えば、電子メールの添付文書として送信され、正しくデコードされなかったことなどが考えられます。」 

予想通りのメッセージですが、将来的にこのメッセージが機能しているはずのPDFから出た場合、そのPDFはいくらか問題があると確信できます。

次に、バージョン番号のみが必要なヘッダーパートを追加します:
%PDF-2.0
さらに、すべてのオブジェクトが格納されるボディセクションがあります。このセクションでは、ただ一つのオブジェクト、つまり何も入れない辞書オブジェクト(オブジェクト番号1)を持ちます。

				
					%PDF-2.0
1 0 obj<< >>
endobj
				
			

次に、クロスリファレンステーブルセクションが必要です。まずxrefキーワードが必要です。次にリストの最初のオブジェクト番号とファイル内のオブジェクトの総数を記入します。ここまでで2つのオブジェクト、ボディセクションにある1 0 objと、Part 2で説明した連結リストの先頭であるオブジェクト0があります。よって 0 2 という行になります。続くエントリにはオブジェクトに関する情報が含まれており、すべて同じ形式を取ります。

				
					xref
0 2
0000000000 65535 f
0000000010 00000 n
				
			

オブジェクト1のアドレスを10としています。各文字がバイトであるため、%PDF-2.0と改行文字を数えるのはかなり簡単ですが、確認したい場合はHxDでファイルを開き(幅を10に、数値システムを10進数に設定して簡単にします)、1 0 objの1をクリックして1 0 objの開始アドレスを取得できます。

最後に必要なのはトレーラーセクションです。startxrefと、ファイルのオブジェクト数とルートオブジェクトへの参照を含むトレーラーディクショナリが必要です。

				
					trailer<</Size 2 /Root 1 0 R>>
startxref
				
			

クロスリファレンステーブルのアドレス(xrefキーワードがバイトで始まる位置)が必要で、ここでは32です。ファイルを %%EOF で締めくくります。

				
					%PDF-2.0
1 0 obj << >>
endobj
xref
0 2
0000000000 65535 f
0000000010 00000 n
trailer <</Size 2/Root 1 0 R>>
startxref
33
%%EOF
				
			

このPDFをmypdf2.pdfとして保存します。Windows版のAcrobatでこれを開き、Ctrlキーを押しながらOKボタンを押すと別のエラーが表示されます。「dictオブジェクトを指定してください。」というメッセージが表示されるのは、値を何も入れていないためです。

Ctrlキーを押しながらOKボタンを押す。※Mac版では動作しません。

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

    Facebook
    Twitter
    Email
    公式ブログロゴ

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

    PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part 7:色を操るグラフィックスステート

    今回は、画面に色を付けてみましょう。その過程で、グラフィックスステート(グラフィックス状態)について説明します。PDFファイルには、グラフィックスステートというデータ構造が関連付けられています。このデータ構造には、グラフィックスの描画方法を記述する情報が格納されます。現在の色や使用可能な色などの値がグラフィックスステートに保存されます。また、現在のクリップ、変換行列、線に対して行える面白い操作、ユーザー空間(PDFの座標系)からデバイス空間(モニター)へのグラフィックスの描画方法を変更するその他の命令など、様々な要素が含まれます。

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

    「Part 4: 白紙のPDFページを自作する」で示したように、PDFはストリームオブジェクト内にある一連のコマンドを使って描画されます。これらのコマンドを通じて、PDFビューアーはページ上に表示される全コンテンツを描画する方法を理解できます。この記事では、グラフィックコマンドを探究し、ページ上に数本の線を描画するPDFをテキストエディタで作成します。

    PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part5:Hello WorldのPDFを作ろう

    「Part 1: PDFを理解するための第一歩」で、私はPDFファイルを構成するさまざまなオブジェクトについて説明しました。その中で言及したのがストリームオブジェクトです。ストリームオブジェクトは、PDFページの見た目を記述する命令を全て含んでいます。この記事の最後までに、私たちは「Hello World」のPDFを作成できるようになります。そのためには、PDFドキュメントにテキストを挿入するためのストリームオブジェクトを使う必要があります。

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

    開発者向けPDF入門ガイド

    開発者向けPDF入門ガイド

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

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

    MENU
    PAGE TOP
    ロボット
    PDFソフトウェアの開発に役立つ情報をメールでお届けします