PDFTKのGUIフロントエンドを探したのですが、好みのものが見つからなかったので作ってみました。

GUI for PDFTK 0.9.0.0 ダウンロード

(同梱のヘルプは古いかもしれません。)

 

スクリーンショット

WS000042

 

インターフェイスが日本語なだけで、pdftk.exeを日本語対応にしたわけではありません。

よって保存ファイルのパス名に日本語が含まれていると失敗します。(入力ファイルとしては可能)

おおざっぱに言うと、デスクトップなどには保存できないということです。

 

インストール

インストーラを実行してください。

.NET Framework 3.5 以上が必要です。(2.0でも動くかも)

 

アンインストール

コントロールパネルの「プログラムの追加と削除」からアンインストールしてください。

レジストリは使用していません。

 

これはなに?

pdftkをマウス操作で実行するためのフロントエンドです。

pdftkはPDFファイルの結合や分割を行う素晴らしいソフトですが、コマンドラインから使用するため、不慣れな人には敷居の高いものとなっています。

GUI for PDFTK を使うことで、ドラッグ&ドロップによる入力ファイルの指定、名前を付けて保存ダイアログボックスの使用などが可能になり、一般的なWindows アプリケーションであるかのようにpdftkが使えるようになります。

 

できること

GUI for PDFTK にできることは、すなわちpdftkにできることにほかなりません。

しかしながら作者の力量不足により、本来pdftkにできることができなかったりするかもしれません。

特に、結合などの操作と暗号化の併用は未実装の部分が残っています。

暗号化を要する場合は、暗号化のみ行うようにしてください。

(「分割しながら暗号化」だけは(後が面倒すぎるので、取りあえず)実装済みです。)

 

できないこと

pdftkにできないことはGUI for PDFTK を使ってもできません。

たとえば、PDFを閲覧しながら不要なページを削除する、などは別のソフトをあたってください。

 

基本的な使い方

複数ファイルを結合して1つのPDFにする場合、

1.左パネルにPDFファイルをドロップします。

2.右上のボタンを押して、保存するPDFの名前を決めます。

3.右下の「保存」ボタンを押せばできあがり。

 merge_WS000042

 

ページの削除

a.pdfの13ページを取り除く場合、

a.pdfの1~12ページと、a.pdfの14~endページを結合します。

(ページ番号にendを指定すると最終ページを表します。)

 

1ページずつ別々のファイルに分ける

複数のページからなるa.pdfを1ページずつ別々のファイルに分割する場合、

左パネルにPDFファイルを1つ登録した状態で「分割」ボタンを押します。

出力ファイル名はpg_%04d.pdfなどと指定します。

この場合、pg_0001.pdf、pg_0002.pdf、...が作成されます。

printfのフォーマット指定子と同じ書式が使えます。

 

PDFにファイルを添付する/添付されたファイルを取り出す

e-メールにファイルを添付するように、PDFにもファイルを添付することができます。

左パネルの1番上が添付されるPDFファイル、2行目以下が添付するファイルです。

添付はドキュメント全体に対して行われますが、特定のページに対して添付することもできます。

その場合は1行目のPDFファイルのページ設定を、添付したいページにします。

開始ページと終了ページに同じ数を入力すると、そのページにファイルが添付されます。

添付されたファイルは「取出」ボタンで分離できます。

この場合、保存先として指定したパスのファイル名部分は無効になり、フォルダ以下に添付ファイルがばらまかれます。

 

ページの回転

特定のページだけを回転させたい場合は、ページの削除の時のように、行を分けて記述します。

たとえばa.pdfの3ページ目だけを90度回転させたい場合は、

a.pdfの1~2ページ、

a.pdfの3ページを90度回転、

a.pdfの4~endページ

の順に登録して結合します。

 

保存先

保存ファイル名を指定しないとoutput.pdfが指定されたものとして動作します。

入力ファイル名と同じ名前で保存することはできません(入力ファイルの上書き不可)。

 

暗号化/復号化

パスワードには権限パスワードとユーザーパスワードがあります。

ユーザーパスワードは、ファイルを開くときに入力するパスワードです。

ユーザーパスワードを知らないと、ファイルを開くことができません。

 

PDFファイルにパーミッションが設定されている場合、PDFを開いたユーザーは、許可された操作しか行うことができません。

たとえば、低解像度の印刷は許可されているが、高解像度の印刷はできない、などです。

 

権限パスワードは、これらのパーミッションを変更するときに使うパスワードです。

よって権限パスワードとユーザーパスワードが同一だと、ユーザーパスワードは意味を為さなくなります。

(ファイルを開くときにパスワードを求められるものの、そのパスワードで権限も取得できてしまうので)

 

権限パスワードがなく、ユーザーパスワードだけが設定されていた場合の動作は、PDFビューアーによって異なるようです。

Adobe Reader 9 では権限パスワードがない=すべての権限にアクセスできる、となり、パーミッションの設定は無効になります。

他のPDFビューアーの中には、権限パスワードがない=有効なパーミッションがない=すべて許可しない、となるものがあります。

PDFの仕様としてどちらが正しいのかは知りませんが、Adobe Reader 9 で無効になることを考えると、(パーミッションの設定が必要なら)権限パスワードも設定したほうが良いようです。

 

背景/スタンプ

1つのPDFに、他のPDFを背景として埋め込むことができます。

背景として使われるのは1ページ目だけで、2ページ目以降は無視されます。

1行目に背景を埋め込むPDF、2行目に背景となるPDFを登録します。

1行目のPDFのすべてのページに、2行目のPDFの1ページ目が背景として重なります。

スタンプは、背景と似ていますが、前面に重ねられる点が異なります。

 

ページの順番を逆にする

逆順にするにはend-1とページ指定します。

同様に3-1とすれば、3,2,1ページの順に出力します。

 

 

注意点

登録されたファイルが正しくPDFであるかのチェックは行いません。

そのため、操作を実行した段階でエラーが出力されることがあります。

これはpdftkの出すエラーなので、PDFファイルの指定が間違っていないか確認してください。

 

よくある間違い

3つのページを含むPDFファイルに対して、「1~4ページ」のような有り得ない数を指定した。

左パネルの1行目はPDFでなければならないが、PDFではないファイルが登録されていた。

 

Vistaの注意点

GUI for PDFTK は、出力ファイル名が指定されなかった場合、GUI fot PDFTK がインストールされたフォルダにoutput.pdfという名前で出力します。

しかし Windows Vista では デフォルトのインストール先(C:\Program Files以下)にユーザーが直接ファイルを書き込むことはできず、C:\Users\(ユーザー名)\AppData\Local\VirtualStore\Program Files以下に保存されます。

作成したはずのファイルが見当たらない場合は、C:\Users\(ユーザー名)\AppData\Local\VirtualStore以下を探してみてください。

詳しくは「Virtual Store」で調べてみてください。

 

要望など

致命的なバグを見つけた、あの画面構成はおかしい、こんな機能が欲しい、などの要望は

http://more-pc.net/

までお願いします。

 

配布条件など

一切自由です。好きに使ってください。

落ち着いたらソースも公開したいと思っています。

ただしpdftkについては向こうの配布条件に従ってください。

http://www.pdfhacks.com/pdftk/

説明するより例をたくさん出したほうが分かりやすいと思うので、manのサンプルを意訳してみます。

 

複数のPDFを結合して新しいドキュメントを作る

1.pdf、2.pdf、3.pdfの順に結合してnew.pdfを作る例
    pdftk 1.pdf 2.pdf 3.pdf cat output new.pdf


ハンドルを使って1.pdfと2.pdfを結合し、new.pdfを作る例
    pdftk A=1.pdf B=2.pdf cat A B output new.pdf


ワイルドカードを使ってカレントディレクトリのすべてのPDFをnew.pdfに結合する例
    pdftk *.pdf cat output new.pdf

 

ドキュメントから特定のページだけ削除する/抽出する

in1.pdfから13ページ目を削除してout1.pdfとして保存する例
    pdftk in.pdf cat 1-12 14-end output out1.pdf


ハンドルを使った例
    pdftk A=in1.pdf cat A1-12 A14-end output out1.pdf

 

複数のPDFからページを抽出して新しいドキュメントを作る
one.pdfの1~7ページ、two.pdfの1~5ページ、one.pdfの8ページ、の順に結合してcombined.pdfに保存する例(ハンドルを使用)
    pdftk A=one.pdf B=two.pdf cat A1-7 B1-5 A8 output combined.pdf

 

ページを回転させる

in.pdfの1ページ目だけを時計回りに90度回転させる
    pdftk in.pdf cat 1E 2-end output out.pdf

 

in.pdfのすべてのページを180度回転させてout.pdfに保存する
    pdftk in.pdf cat 1-endS output out.pdf

 

ページと回転の指定

1-6even 1から6までの偶数。つまり2,4,6ページ。
6-1even 6から1までの偶数。つまり6,4,2ページ。
奇数はevenのかわりにodd。

回転は文字で指定。

N:0 E:90 S:180 W:270 L:-90 R:+90 D:+180

B1-end は B を指定したのと同じこと。

 

128ビットの暗号化を施す

権限はすべて許可(デフォルト)。mydoc.pdfを暗号化してmydoc.128.pdfにする例。パスワードはfoo。
    pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo

上と同じで、ドキュメントを開くときにパスワードを求めるようにする例
    pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo user_pw baz

上と同じで、ドキュメントを印刷するとき(当然開いたあとなわけだが)にパスワードを求める例
    pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo user_pw baz allow printing


復号化
    pdftk secured.pdf input_pw foopass output unsecured.pdf

 

暗号化されたPDFが混ざっているときの結合方法(結合後のドキュメントは暗号化されていません)
    pdftk A=secured.pdf mydoc.pdf input_pw A=foopass cat output combined.pdf

 

その他

テキストエディタでPDFコードを編集するためにPDFページストリームを解凍する

mydoc.pdfを解凍してmydoc.clear.pdfに保存する例
    pdftk mydoc.pdf output mydoc.clear.pdf uncompress

 

XREFテーブルとストリーム長が壊れたPDFを(可能なら)修復する
    pdftk broken.pdf output fixed.pdf

 

1ページずつばらす。
    pdftk mydoc.pdf burst

 

PDFのメタデータ、ブックマーク、しおりを出力する。
    pdftk mydoc.pdf dump_data output report.txt

「常にオフライン」のチェックを外したフォルダが、同期センターに表示されたままになるのを解消する方法を探し当てたのでメモ。

 

すべてのオフライン ファイルのキャッシュが消えるので、同期を済ませてから行います。

 

コントロールパネル – オフライン ファイル を開いたら、オフライン ファイルを無効にします。

Vistaを再起動したら、管理者権限でコマンド プロンプトを開いて、以下を実行。

 

takeown /r /f C:\Windows\CSC

rd /s C:\Windows\CSC

 

※C:\Windows\CSCはオフライン ファイルのキャッシュが保存されているフォルダです。

実行しますか?と聞かれたらYを押して続行します。

 

消えるのはキャッシュだけなので、必要なら再度オフライン ファイルの設定を行えばOK。

例)雑記カテゴリのみ非表示にする


例)雑記カテゴリのみ表示にする

例)雑記とリンクカテゴリを非表示にする


例はいずれも、条件にマッチしたエントリから最新の5件を表示する。

参考:公式リファレンス
http://www.movabletype.jp/documentation/appendices/tags/entries.html

php.iniにDSNを定義する

pdo.dsn.sqlserver=”mssql:host=localhost; dbname=db”
pdo.dsn.sybase=”sybase:host=localhost; dbname-db”
pdo.dsn.firebird=”firebird:User=foo;Password=baa;Database=DB.GDE;DataSource=localhost;Port=3050”
pdo.dsn.mysql=”mysql:host=localhost;dbname=db;charset=utf8”
pdo.dsn.oracle=”oci:db”
pdo.dsn.oracle=”oci:dbname=//localhost:1521/db”
pdo.dsn.odbc=”odbc:DSN=DB;UID=foo;PWD=baa”
pdo.dsn.postgresql=”pgsql:host=localhost port=5432 dbname=db user=foo password=baa”
pdo.dsn.sqlite3xonfile=”sqlite:/var/www/html/hoge/db.sqlite”
pdo.dsn.sqlite3xonemory=”sqlite::memory::”
pdo.dsn.sqlite2xonfile=”sqlite2:/var/www/html/hoge/db.sqlite”
pdo.dsn.sqlite2xonmemory=”sqlite2::memory::”

 

データベースに接続する

try {
$db = new PDO(‘sqlserver’,username,password);
//$db = new PDO(‘odbc’); //DSNにユーザー・パスワードを登録しているので不要
//$db = new PDO(‘sqlite’);  //SQLiteはユーザー・パスワードの概念がないので不要
} catch (PDOException $e) {
die (‘データベースに接続できませんでした:’.$e->getMessage());
}

 

SQLを発行する

exec()メソッド、またはquery()メソッドによる。

exec()メソッドは操作したレコード数を返す。

query()メソッドは結果セットを返す。

 

INSERT、UPDATE、DELETE、CREATE TABLE等はexec()メソッドを使う
try {
$db = new PDO(‘sqlite’);
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //データベース操作のエラーをPDOException例外とする
$db->exec(‘CREATE TABLE master(id INTEGER AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),email VARCHAR(100))’);
} catch (PDOExeption $e) {
die(‘テーブルを作成できませんでした:’.e->getMessage());
}

 

SELECT文はレコードセットを返してくるのでquery()メソッドを使う

PDO::query(string sql_statement)

 

ユーザー入力から動的にSQLクエリを生成する

quote()メソッドでエスケープする

string PDO::quote(string hoge [,int parameter_type])

 

プレイスホルダで置き換える

例1)

$db  = new PDO(‘sqlite’);
$object = $db->prepare(‘INSERT INTO master(name,email) VALUES(?,?)’);
$object->execute(array($_POST[‘name’],$_POST[‘email’]));

?の部分にパラメータが埋め込まれる。

 

例2)

?の代わりに:<name>形式で明示的に指定。

ついでにbindParamでパラメータと値を事前に対応付けてから実行。

$db  = new PDO(‘sqlite’);
$object = $db->prepare(‘INSERT INTO master(name,email) VALUES(:name,:email)’);
$object->bindParam(‘:name’,$_POST[‘name’],PDO::PARAM_STR,50);
$object->bindParam(‘:email’,$_POST[‘email’],PDO::PARAM_STR,100);
$object->execute();

 

SELECTした結果を順に処理する

$db = new PDO(‘sqlite’);
$rset = $db->query(‘SELECT * FROM master’);
while ( $row=$rset->fetch(PDO::FETCH_ASSOC)) {
print ($row[‘name’]);
print ($row[‘email’]);
}

※実際にはHTMLに組み込むと思うので<table>やら<td>やらで適当に括って使う。

 

トランザクション

トランザクションの開始

exec(‘BEGIN’)

コミット

exec(‘COMMIT’)

ロールバック

exec(‘ROLLBACK’)

書籍感想

ほしのあきサイバークローン

無料サンプル、ブログライター、ブログで口コミプロモーションならレビューブログ

フルみっく
伝染歌プレーヤー

急上昇キーワード

ゲーマータグ

Powered by Movable Type 4.25