pdf-designer.jsの使い方
[目次]
1. PDFを結合
2. PDFを分割
3. PDFを削除
4. PDFを回転
5. PDFにしおりを追加
6. PDFの文書情報と表示設定
7. 各クラスの概要
8. 各クラスの詳細
TPDFAnalyst
* TPDFParser
* TPDFCode
TPDFDocInfo
TPDFDocView
* TReadStream
* TMemoryStream
* TFileStream
TPDFCombine
TPDFKnife
TPDFDeletePage
TPDFRotatePage
TPDFInfoMaker
TPDFOutLineMaker
TPDFPageLayout
TPDFPageMode
TPDFOpenActionType
TPDFOpenAction
TPDFViewerPreferences
TPDFNode
TPDFNodeList
TPDFOutLineManager
TColor
TRect
9. 共通関数
10. コールバック関数
はじめに
pdf-designer.jsは ダウンロード してあなたの環境に設置して下さい。
1. PDFを結合
コードの行数が81行ありますが、重要なコードは22行目のTPDFAnalyst.LoadFromStream()と52行目のTPDFCombine.SaveToFile()のメソッドです。
TPDFAnalystはPDFを読み込み、TPDFCombineはPDFファイルを結合します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="pdf-designer.js" type="text/javascript"></script>
<script type="text/javascript">
var Analysts = new Array();
function onChangeFile(event,index) {
var reader = new FileReader();
var file = event.target.files;
document.getElementById("errmsg").innerHTML = '';
reader.onload = function (event) {
var Stream = new Uint8Array(reader.result);
Analysts[index] = new TPDFAnalyst();
try {
Analysts[index].LoadFromStream(Stream);
if (Analysts[index].Encrypt) {
document.getElementById("p"+(index+1)).innerHTML =
(index+1) + 'つ目のファイル - 未対応';
document.getElementById("errmsg").innerHTML =
'暗号化されているファイルには対応していません。';
} else {
document.getElementById("p"+(index+1)).innerHTML =
(index+1) + 'つ目のファイル - [' + Analysts[index].PageCount +
'ページ / PDF' + Analysts[index].Version + ']';
}
} catch (e) {
Analysts[index] = null;
document.getElementById("p"+(index+1)).innerHTML =
(index+1) + 'つ目のファイル - 未対応';
document.getElementById("errmsg").innerHTML =
(index+1) +'つ目のファイルは未対応です';
}
}
reader.readAsArrayBuffer(file[0]);
}
function run() {
var PDFCombine = new TPDFCombine();
if (Analysts[0] != null && Analysts[1] != null) {
try {
// PDF_GetDateTime_Now()の関数は現在日時を返します。
PDFCombine.SaveToFile(PDF_GetDateTime_Now() + '.pdf', Analysts);
} catch (e) {
Analysts[0] = null;
Analysts[1] = null;
document.getElementById("errmsg").innerHTML =
'PDFファイルの結合に失敗しました。 ';
}
} else {
document.getElementById("errmsg").innerHTML =
'ファイルは2つ指定して下さい。';
}
}
</script>
</head>
<body>
<h1>PDFファイルの結合</h1>
<hr>
<p>PDFファイルを2つ選択してください。</p>
<p id="errmsg" style="color:red;"></p>
<p id="p1">1つ目のファイル</p>
<input type="file" id="inputfile1" accept="application/pdf" onchange="onChangeFile(event,0)"><br>
<p id="p2">2つ目のファイル</p>
<input type="file" id="inputfile2" accept="application/pdf" onchange="onChangeFile(event,1)"><br>
<br>
<br>
<br>
<button id="run" style="width:200px;height:30px;" onclick="run();">結合の開始</button>
</body>
</html>
FileReader()は非同期でファイルを読み込ます。同期で読み込む場合はWorkerオブジェクトを使用してFileReaderSync()で読み込んでください。共にHTML5の機能です。
使用クラス: TPDFAnalyst TPDFCombine
2. PDFを分割(抽出)
次のコードはPDFファイルの1ページ目を抽出します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="pdf-designer.js" type="text/javascript"></script>
<script type="text/javascript">
var Analyst = null;
function onChangeFile(event) {
var reader = new FileReader();
var file = event.target.files;
document.getElementById("errmsg").innerHTML = '';
reader.onload = function (event) {
var Stream = new Uint8Array(reader.result);
Analyst = new TPDFAnalyst();
try {
Analyst.LoadFromStream(Stream);
if (Analyst.Encrypt) {
document.getElementById("p1").innerHTML = 'PDFファイル - 未対応';
document.getElementById("errmsg").innerHTML =
'暗号化されているファイルには対応していません。';
} else {
document.getElementById("p1").innerHTML =
'PDFファイル - [' + Analyst.PageCount +
'ページ / PDF' + Analyst.Version + ']';
}
} catch (e) {
Analyst = null;
document.getElementById("p1").innerHTML = 'PDFファイル - 未対応';
document.getElementById("errmsg").innerHTML = 'このファイルは未対応です。';
}
}
reader.readAsArrayBuffer(file[0]);
}
function run() {
var PDFKnife = new TPDFKnife();
if (Analyst != null) {
try {
PDFKnife.SaveToFile(PDF_GetDateTime_Now() + '.pdf', Analyst,1,1);
} catch (e) {
Analyst[0] = null;
Analyst[1] = null;
document.getElementById("errmsg").innerHTML =
'PDFファイルの抽出に失敗しました。 ';
}
} else {
document.getElementById("errmsg").innerHTML =
'ファイルを選択して下さい。';
}
}
</script>
</head>
<body>
<h1>PDFファイルの分割(抽出)</h1>
<hr>
<p>1ページ目を抽出します。</p>
<p id="errmsg" style="color:red;"></p>
<p id="p1"></p>
<input type="file" id="inputfile1" accept="application/pdf" onchange="onChangeFile(event)"><br>
<br>
<br>
<br>
<button id="run" style="width:200px;height:30px;" onclick="run();">開始</button>
</body>
</html>
使用クラス: TPDFAnalyst TPDFKnife
3. PDFを削除
1ページ目を削除します。2ページ以上あるPDFファイルを選択して下さい。
var PDFDeletePage = new TPDFDeletePage(); PDFDeletePage.SaveToFile(PDF_GetDateTime_Now() + '.pdf', Analyst,1,1);
使用クラス: TPDFAnalyst TPDFDeletePage
4. PDFを回転
全てのページを右90度回転します。
var PDFRotatePage = new TPDFRotatePage(); PDFRotatePage.SaveToFile(PDF_GetDateTime_Now() + '.pdf', Analyst,1,1,Analyst.PageCount);
使用クラス: TPDFAnalyst TPDFRotatePage
5. PDFにしおりを追加
全てのページにレベル1のしおりを追加します。
var PDFOutLineMaker = new TPDFOutLineMaker();
// 表示設定(しおり)
PDFOutLineMaker.View.PageMode = TPDFPageMode.pmUseOutlines;
// ルートノードの追加(親ノード)
for (var i = 0; i < Analyst.PageCount; i++) {
PDFOutLineMaker.OutLine.AddRoot((i+1) +' page', (1+i), 0, '', false, false, null);
}
PDFOutLineMaker.SaveToFile(PDF_GetDateTime_Now() + '.pdf', Analyst);
使用クラス: TPDFAnalyst TPDFOutLineMaker
6. PDFの文書情報と表示設定
全ての文書情報を変更して表示設定をサムネイルにします。
var PDFInfoMaker = new TPDFInfoMaker();
// 文書情報
PDFInfoMaker.Info.Title = 'タイトル';
PDFInfoMaker.Info.Subject = 'サブタイトル';
PDFInfoMaker.Info.Author = '作成者';
PDFInfoMaker.Info.Keywords = 'キーワード';
PDFInfoMaker.Info.Creator = 'アプリケーション';
PDFInfoMaker.Info.Producer = 'PDF変換';
PDFInfoMaker.Info.CreationDate = PDF_GetDateTime_Now();
PDFInfoMaker.Info.ModDate = PDF_GetDateTime_Now();
// 表示設定(サムネイル)
PDFInfoMaker.View.PageMode = TPDFPageMode.pmUseThumbs;
PDFInfoMaker.SaveToFile(PDF_GetDateTime_Now() + '.pdf', Analyst);
使用クラス: TPDFAnalyst TPDFInfoMaker
7. 各クラスの概要
主要なクラスは TPDFAnalyst と 各種変換のクラス となります。クラスは全部で22個、Enumは3個です。JavaScriptですのでC++などのクラス/Enumと異なります。
[基本]
| クラス | 用途 |
|---|---|
| TPDFAnalyst | PDFファイルを「解析」するクラス。PDFファイルは必ずこのクラスで読み込む必要があります。 |
| * TPDFParser | PDFファイルの各種変換処理をする為に「構文解析、書き込み」をするクラス |
| * TPDFCode | PDFファイルの「文字コード」を扱うクラス |
| TPDFDocInfo | PDFファイルの「文書プロパティ」を扱うクラス |
| TPDFDocView | PDFファイルの「表示設定」を扱うクラス |
[ストリーム]
| クラス | 用途 |
|---|---|
| * TReadStream | 読み込み専用のストリームクラス |
| * TMemoryStream | 読み書き可能なストリームクラス |
| * TFileStream | 書き込み専用のストリームクラス |
[各種変換]
| クラス | 用途 |
|---|---|
| TPDFCombine | PDFファイルを「結合」するクラス |
| TPDFKnife | PDFファイルのページを「分割(抽出)」するクラス |
| TPDFDeletePage | PDFファイルのページを「削除」するクラス |
| TPDFRotatePage | PDFファイルのページを「回転」するクラス |
| TPDFInfoMaker | PDFファイルの「文書プロパティ」と「表示設定」を編集するクラス |
| TPDFOutLineMaker | PDFファイルに「しおり」を追加するクラス |
[表示設定]
| クラス | 用途 |
|---|---|
| TPDFPageLayout | ページレイアウトに関するEnum型 |
| TPDFPageMode | ページモードに関するEnum型 |
| TPDFOpenActionType | 表示倍率に関するEnum型 |
| TPDFOpenAction | 表示倍率に関するクラス |
| TPDFViewerPreferences | ウインドウオプション、ユーザーインターフェイスオプションに関するクラス |
[しおり]
| クラス | 用途 |
|---|---|
| TPDFNode | しおり用の「ノード」のクラス |
| TPDFNodeList | しおり用の「ノードリスト」のクラス |
| TPDFOutLineManager | しおり用の「ノード」を元にしおりを書き込むクラス |
[その他]
| クラス | 用途 |
|---|---|
| TColor | RGB値を格納するクラス |
| TRect | ページサイズ(MediaBox)を格納するクラス |
8. 各クラスの詳細
各クラス、Enum型の詳細です。デフォルトは緑色にしています。
[TPDFAnalyst]
| プロパティ | 用途 |
|---|---|
| Version | PDFバージョン(String) |
| Stream | ストリーム(TReadStream) |
| ObjectCount | オブジェクト数(Int) |
| ObjectPosArray | オブジェクトの位置への配列(Array型) |
| DeleteObject | 削除済みオブジェクト(Array型) |
| XrefTableList | Xrefテーブルリスト(Array型) |
| Encrypt | 暗号化(true/false) |
| Optimize | Web用に最適化(true/false) |
| Tag | タグ付きPDF(true/false) |
| PageCount | ページ数(Int) |
| PageSize | ページサイズ(TRect) |
| RootID | Root ID(Int) |
| InfoID | Info ID(Int) |
| MetadataID | Metadata ID(Int) |
| FirstPageID | FirstPage ID(Int) |
| FirstPagesID | FirstPages ID(Int) |
| OutlinesID | Outlines ID(Int) |
| メソッド | LoadFromStream(Uint8Array) |
|---|---|
| 用途 | PDFファイルを読み込む |
| 引数 | Uint8Array: 8ビットの符号なし整数値の配列(JavaScriptのオブジェクトです。ファイルのバイナリ配列を渡します) |
| 戻り値 | なし |
[TPDFParser]
内部的に使用するだけです。
[TPDFCode]
内部的に使用するだけです。
[TPDFDocInfo]
| プロパティ | 用途 |
|---|---|
| Title | タイトル(String) |
| Subject | サブタイトル(String) |
| Author | 作成者(String) |
| Keywords | キーワード(String) |
| Creator | アプリケーション(String) |
| Producer | PDF変換(String) |
| CreationDate | 作成日(String) |
| ModDate | 更新日(String) |
| Trapped | トラップ(true/false) |
| メソッド | GetPDFDocInfo(TPDFAnalyst) |
|---|---|
| 用途 | PDFファイルから文書プロパティを取得してプロパティに設定する |
| 戻り値 | なし |
文書情報のみを変更する際はModDate(更新日)を更新してください。更新しないと「Acrobat Reader」では正常に表示されない場合があります。恐らくキャッシュを読み込んでるのだと思います。
[TPDFDocView]
| プロパティ | 用途 |
|---|---|
| PageMode | TPDFPageMode(Enum) |
| PageLayout | TPDFPageLayout(Enum) |
| OpenAction | TPDFOpenAction |
| ViewerPreferences | TPDFViewerPreferences |
| メソッド | GetPDFDocView(TPDFAnalyst) |
|---|---|
| 用途 | PDFファイルから表示設定を取得してプロパティに設定する |
| 戻り値 | なし |
[TReadStream]
内部的に使用するだけです。
[TFileStream]
内部的に使用するだけです。
[TMemoryStream]
内部的に使用するだけです。
[TPDFCombine]
| プロパティ | 用途 |
|---|---|
| Info | TPDFDocInfo |
| View | TPDFDocView |
| メソッド | SaveToFile(FileName,TPDFAnalyst of Array,CallBack) |
|---|---|
| 用途 | PDFファイルを結合する |
| 引数 | FileName: ダウンロードするファイル名 TPDFAnalyst of Array: TPDFAnalystの配列 CallBack: コールバック関数(省略可能) |
| 戻り値 | なし |
[TPDFKnife]
| プロパティ | 用途 |
|---|---|
| Info | TPDFDocInfo |
| View | TPDFDocView |
| メソッド | SaveToFile(FileName,TPDFAnalyst,begin,end) |
|---|---|
| 用途 | PDFファイルを分割(抽出)する |
| 引数 | begin,end: 抽出するページ番号を設定する(1,2,3...N) |
| 戻り値 | なし |
[TPDFDeletePage]
| プロパティ | 用途 |
|---|---|
| Info | TPDFDocInfo |
| View | TPDFDocView |
| メソッド | SaveToFile(FileName,TPDFAnalyst,begin,end) |
|---|---|
| 用途 | PDFファイルを削除する |
| 引数 | begin,end: 削除するページ番号を設定する(1,2,3...N) |
| 戻り値 | なし |
[TPDFRotatePage]
| メソッド | SaveToFile(FileName,TPDFAnalyst,Rotate,begin,end) |
|---|---|
| 用途 | PDFファイルを回転する |
| 引数 | Rotate: 1-3を指定(1: 右90度 2: 左90度 3: 180度) begin,end: 回転するページ番号を設定する(1,2,3...N) |
| 戻り値 | なし |
[TPDFInfoMaker]
| プロパティ | 用途 |
|---|---|
| Info | TPDFDocInfo |
| View | TPDFDocView |
| メソッド | SaveToFile(FileName,TPDFAnalyst) |
|---|---|
| 用途 | PDFファイルの文書プロパティ、表示設定をする |
| 戻り値 | なし |
[TPDFOutLineMaker]
| プロパティ | 用途 |
|---|---|
| Info | TPDFDocInfo |
| View | TPDFDocView |
| OutLine | TPDFOutLineManager |
| メソッド | SaveToFile(FileName,TPDFAnalyst) |
|---|---|
| 用途 | OutLineプロパティを元にPDFファイルに「しおり」を追加する |
| 戻り値 | なし |
[TPDFPageLayout]
| Enum | 用途 |
|---|---|
| plDefault | デフォルト |
| plSinglePage | 単一のページ |
| plOneColumn | 連続 |
| plTwoColumnLeft | 見開き(左) |
| plTwoColumnRight | 見開き(右) |
[TPDFPageMode]
| Enum | 用途 |
|---|---|
| pmDefault | デフォルト |
| pmUseNone | なし |
| pmUseOutlines | しおりとページ |
| pmUseThumbs | サムネイルとページ |
| pmFullScreen | フルスクリーン |
[TPDFOpenActionType]
| Enum | 用途 |
|---|---|
| oaDefault | デフォルト |
| oaXYZ | 表示倍率。 この項目を選択する場合はTPDFOpenAction.Zoomの値を設定する必要がある |
| oaFit | 全体表示 |
| oaFitH | 幅に合わせる |
| oaFitV | (未使用) |
| oaFitR | (未使用) |
| oaFitB | (未使用) |
| oaFitBH | 描画領域の幅に合わせる |
| oaFitBV | (未使用) |
[TPDFOpenAction]
| プロパティ | 用途 |
|---|---|
| Left | (未使用) |
| Top | (未使用) |
| Right | (未使用) |
| Bottom | (未使用) |
| Zoom | 表示倍率の指定。0.25, 0.5, 0.75, 1, 1.25, 1.5, 2, 4, 8, 16のいずれかを指定する。指定しない場合はデフォルトの-1 |
| ObjectID | 最初に表示するページのオブジェクト番号(指定しない場合はデフォルトの-1で1ページ目が表示される) |
| GenerationID | 最初に表示するページの世代番号。ObjectIDプロパティと共に指定します。(指定しない場合はデフォルトの-1で1ページ目が表示される) ページのオブジェクト番号、世代番号の意味がわからない場合は常に-1のままにして下さい。Hint? |
| SubType | TPDFOpenActionType(Enum) |
[TPDFViewerPreferences]
| プロパティ | 用途 |
|---|---|
| HideToolbar | ツールバーを非表示(true/false) |
| HideMenubar | メニューバーを非表示(true/false) |
| HideWindowUI | ウインドウコントロールを非表示(true/false) |
| FitWindow | 幅に合わせる(true/false) |
| CenterWindow | ウインドウをセンタリングする(true/false) |
| Direction | 綴じ方(右)(true/false) |
| DisplayDocTitle | 文書のタイトルを表示する(true/false) |
| NonFullScreenPageMode | TPDFDocView.PageModeがpmFullScreen(フルスクリーン)の時でPDFのフルスクリーンが解除された後のTPDFPageModeを指定します。指定しない場合はデフォルトのpmDefault |
[TPDFNode]
| プロパティ | 用途 |
|---|---|
| Page | 表示するページ番号(1,2,3 ... N) (Int) |
| ShowPos | 表示するページの座標位置(基本は0を推奨) (Int) |
| Caption | しおりのタイトル(String) |
| URL | URL(Pageプロパティが -1 の時に有効でしおりをクリックするとURLへ飛びます) (String) |
| Level | 階層レベル。親ノードはレベル0で子・孫ノードは最大レベル4まで可能 (Int) |
| Italic | 斜体(true/false) |
| Bold | 太字(true/false) |
| Color | タイトルの色(TColor) 必要ない場合はnullを指定 |
| Parent | 親ノード(TPDFNode) |
| ChildNodes | 子ノード(TPDFNodeList) |
| メソッド | Get(Index) |
|---|---|
| 用途 | 子ノードを取得する |
| 戻り値 | TPDFNode |
| メソッド | AddChild(Caption, Page, ShowPos, URL, Bold, Italic, Color) |
|---|---|
| 用途 | 子ノードを追加する |
| 引数 | TPDFNodeのプロパティを参照 |
| 戻り値 | TPDFNode |
| メソッド | GetCount() |
|---|---|
| 用途 | 子ノードの数を取得する |
| 戻り値 | 子ノードの数 |
| メソッド | GetChildCount() |
|---|---|
| 用途 | 子ノードと孫ノードの合計数を取得する |
| 戻り値 | 子ノードと孫ノードの合計数 |
[TPDFNodeList]
| メソッド | Get(Index) |
|---|---|
| 用途 | ノードを取得する |
| 戻り値 | TPDFNode |
| メソッド | Add(Parent, Level, Caption, Page, ShowPos, URL, Bold, Italic, Color) |
|---|---|
| 用途 | ノードを追加する |
| 引数 | TPDFNodeのプロパティを参照 |
| 戻り値 | TPDFNode |
| メソッド | GetCount() |
|---|---|
| 用途 | ノードの数を取得する |
| 戻り値 | ノードの数 |
[TPDFOutLineManager]
| プロパティ | 用途 |
|---|---|
| Node | 親ノードのリスト(TPDFNodeList) |
| メソッド | Get(Index) |
|---|---|
| 用途 | 親ノードを取得する |
| 戻り値 | TPDFNode |
| メソッド | AddRoot(Caption, Page, ShowPos, URL, Bold, Italic, Color) |
|---|---|
| 用途 | 親ノードを追加する |
| 引数 | TPDFNodeのプロパティを参照 |
| 戻り値 | TPDFNode |
| メソッド | GetCount() |
|---|---|
| 用途 | 親ノードの数を取得する |
| 戻り値 | 親ノードの数 |
| メソッド | GetNodeCount() |
|---|---|
| 用途 | 全て(親・子・孫含む)のノードの合計数を取得する |
| 戻り値 | 全て(親・子・孫含む)の合計数 |
[TColor]
| プロパティ | 用途 |
|---|---|
| Red | Red。0-255の数値 |
| Green | Green。0-255の数値 |
| Blue | Blue。0-255の数値 |
このクラスを生成するには共通関数の PDF_RGB() を使用します。
[TRect]
| プロパティ | 用途 |
|---|---|
| Left | Left |
| Top | Top |
| Right | Right |
| Bottom | Bottom |
9. 共通関数
| 関数 | PDF_GetDateTime_Now() |
|---|---|
| 用途 | 現在時刻を取得する(yyyymmddhhmmss形式) |
| 戻り値 | 現在時刻 |
| 関数 | PDF_RGB(Red, Green, Blue) |
|---|---|
| 用途 | RGB値からTColorを返す |
| 引数 | Red, Green, Blueの値は0-255の数値 |
| 戻り値 | TColor |
10. コールバック関数
| 関数 | function PDFCallBack(value, filepos, files){} |
|---|---|
| 用途 | PDFファイルの結合時のコールバック関数。コールバック関数とは変換処理中にこの関数が実行されますのでプログレスバーなどを制御する場合に使用します。 |
| 引数 | value: 現在の進行状況(最大100) filepos: 現在のファイル番号(1,2,3...N) files: 全ファイル数 |
| 戻り値 | なし |
隠し機能
ここで紹介していない関数やクラスの隠しメソッドがあるかも知れません :-)
スポンサーリンク




