ソースコードのダウンロード
「PDFDesigner」はJavaScriptのPDF編集クラスライブラリです。機能はこのサイトのWebアプリケーションと同じで「PDFの結合、分割、抽出、削除、回転、しおり、文書プロパティ、表示設定」となります。
PDFファイルを解析するクラスなどがありますので、これ以外にも機能を追加可能です。
ダウンロード
ダウンロードする前に必ず 「オープンソースのライセンス」 をお読みください。
種類 | ファイル名 | ファイルサイズ | バージョン |
---|---|---|---|
通常版 | pdf-designer.js | 196k | v1.00 |
圧縮版 | pdf-designer-min.js | 64k | v1.00 |
通常版はコメント付きのソースコードです。圧縮版は通常版と機能は全く同じですが変数名の短縮やコメント/スペースが削除されています。
開発時は「通常版」でリリース時は「圧縮版」のご利用をお薦めします。
付属ファイル
付属する「pdf-designer-inc-jp.js」及び「pdf-designer-inc-en.js」のファイルは開発時用のエラーメッセージを日本語と英語で定義しているだけです。リリース時にはそれらのファイルは読み込まなくて良いです。その代わりに「try .. finally」または「try .. catch」で処理を包み込んでください。
使い方
pdf-designer.jsの使い方は 「pdf-designer.jsの使い方」 をご覧ください。
対応しているファイル
対応しているPDFファイルは「Microsoft Office、OpenOffice、Chrome」などで作成されたファイルです。形式で言いますとPDF1.4形式(ISO 19005-1など)に準拠しているファイルです。「PDFの純正ツール」で作成したPDF1.5形式以降のファイルは基本的に対応していません。但し、PDF1.5形式以降のファイルでも内部的にPDF1.4形式ならば読み込めます。
...
約13年前のコードでしたので各種変換のロジック(spaghetti)などは当時のままで移植しております。また、Javascriptでのはじめてのライブラリとなる為、Javascriptのルールに従ってない場合があるかも知れません。
ブラウザとの相性
Chrome > IE11 > FireFox
2016年1月現在のFireFoxはCPUの最適化がされていない為、少し遅いです。また、上記以外のブラウザは確認していません。
変換速度
実は私が2003年に作成したWindowsアプリケーションより高速なんです。
これはブラウザの「JavaScriptエンジンが良い」のとDelphi5(1999年製)でコンパイルしたEXEファイルが「最近のCPUに最適化されていない」からだと思います。
クラス名
クラス名の先頭には「T」が付いています。これはDelphiのルールです。
未移植
Delphiから移植できていないクラスは「TPDFFontDecoder」「TPDFStreamDecoder」「TPDFTextDecoder」です。順にフォント、ストリーム、テキスト関連で合計100kぐらいのコード量があったと思います。
これらはZlibのFlateDecodeが必要ですので未実装です。
既知の脆弱性?
当時はfor構文よりwhile構文のほうが高速でしたのでwhileで無限ループを多用しています。ですので「あまりにも規格外」のPDFファイルを読み込むと永久ループになる可能性があります。
但し、最近のブラウザは永久ループになった時点で自動的に停止してくれます。
Stream関連
Streamは移植時間を減らす為になるべくDelphiのTStreamクラスに合わせていますが、完全コピーではないので「ヤヤコシク」なっています。
各種変換クラス
各種変換クラスは3つのグループに分かれています。Aグループは「TPDFCombine、TPDFKnife、TPDFDeletePage」、Bグループは「TPDFRotatePage」、Cグループは「TPDFInfoMaker、TPDFOutLineMaker」となります。
なんらかの意図があったはずですが、今となっては覚えていません。
try .. finally,try .. catch
例外処理の部分は不明な所がありますが、今の私にもわかりませんのでそのまま移植しています。適宜、変更して下さいね。
最後に
基本的に無保証・無サポートです。バージョンアップは恐らくしないと思います。
最新のPDFに対応するにはAcrobatの購入が必要で、そこから英語の仕様書(1300ページ)を日本語に翻訳+バイナリエディタで様々なPDFを解析しないと出来ないです。また、PDF1.5形式以降はZlibのFlateDecodeが必要になります。
スポンサーリンク