Qpdf : コマンドラインのPDFツール

TOP > Qpdf ツール


TT 2016 - Race Week - PokerStars Senior TT (15)

概要

Qpdf とは、PDF にパスワードと詳細レベルでのセキュリティの設定、PDF の分割やマージ、そしてPDF ファイルの内部構造の表示や点検操作ができるコマンドラインのソフトです。

開発者に対してはPDF内部の高度な技術情報を提供します。PDFのマニアックな情報を扱う為のソフトです。

またPDF文書を開く時に必要なユーザーパスワードが既に設定されていてもPDFを操作できる部分も有ります。使用には注意が必要です。

業務用向けソフトでは無いので次のような編集機能はほとんど無いです。しおりの処理、ヘッダー、フッダーの編集、文字列の検索、コンテンツ内容の変更、印刷、等。

 

注記:

未確認、未検証の情報となっている場合もあります。ご注意ください。

これ以降はWindows 版 Exe での使用を前提にした説明になります。また内容は付属英語PDFドキュメントの内容そのものの部分も有ります。

 

詳細

  1. フリー。 ライセンスはVersion 2.0 of the Artistic License
  2. 最適化(リニアライズ:Web用最適化)機能
  3. パスワードによる詳細レベルでのセキュリティ設定機能
  4. 分割、マージ機能
  5. 44頁のPDF+Html 解説書(英語)が同封
    詳しく&難しく書かれています。

 

ダウンロード

Qpdf 公式サイトが示す場所からダウンロードします。

Windows 版 7.0.0 をここ経由のココからダウンロードします。
qpdf-7.0.0-bin-msvc32.zip (2017/9/17時点)をクリックしてダウンロードします。

Qpdf Windows 版のダウンロード

MinGWでビルドした qpdf-7.0.0-bin-mingw32.zip も利用できます。共に64ビット版(~64.zip)も有ります。

 

インストール

qpdf-7.0.0-bin-msvc32.zip を解凍して適当なフォルダに入れるだけです。実行はWindows の環境変数のPathを設定して使うか、フルパスを指定してQpdf.exe を起動します。

なお、インストール先フォルダに半角の空白文字が入らないことをオススメします。コマンドラインでフルパスを指定する時に半角の空白が有ると動作に支障が出ます。

 

日本語の扱い

言語ファイル関連は存在しないので2バイト文字には未対応と思われます。ですが、これは問題無いでしょう。理由は2バイト文字対応を必要とする処理が見当たらないからです。

 

マニュアル

オンラインマニュアルが公開されています。

 

Version , Help の内容

 

呼び出し形式

基本的な呼び出す形式です。

qpdf [ options ] infilename [ outfilename ]
  

通常は1つの空白文字で区切りと見なされます。

  • qpdf : qpdf.exe の事です。Windowsの環境変数のPATHが通ってない場合はフルパス指定が必要になる場合があります。
      
  • options : オプションです。通常は各オプションの前にハイフンが2つ「--」付きます。2つのハイフンでオプションの始まりと判断してるみたいです。また、前後が空白のハイフンが2つ「 -- 」だけの場合はオプションの終了を意味します。
     
  • infilename : 入力ファイルです。
    代わりにパラメータ --empty を使用する事もできます。--empty はゼロ頁のダミー入力PDFファイルとして使用できます。
      
  • outfilename : 出力ファイルです。ほとんどのオプションは出力ファイルを必要とします。
    テストと検査には必要無いです。
     

 





Basic Options : 基本オプション

もっとも一般的に使用されるオプションです。

--help

引数などの解説したヘルプを画面に表示します。膨大な量です。

--version

著作権とバージョン情報を表示します。

--password=password

PDF文書を開く時に入力が必要になるユーザーパスワードが設定されたファイルにアクセスするためのパスワードを指定します。password 部分にパスワードの文字列を指定します。

--verbose

付加的な情報出力を(PDF)出力します。

※7.0.0 からの新機能で、使い方は不明です。

--linearize

Web用に最適化(リニアライズ)します。PDF全体を圧縮する最適化では無く、Web用に表示速度を上げる為だけの最適化で有ることに注意してください。通常はこのWeb用最適化のことを「リニアライズ」と言います。

例:ユーザーパスワードが「abc」のin-ps.pdf をWeb用に最適化します。出力はout-ps.pdf です。out-ps.pdf には同じユーザーパスワード設定がされます。

--copy-encryption=file

指定されたファイルから暗号化パラメータをコピーします。ここで言う「暗号化パラメータ」は文書プロパティのセキュリティに設定されている内容の事です。

例:in.pdf をWeb用最適化し、更に test-ps.pdf からセキュリティ設定だけをコピーして out.pdf に出力します。

 

--encryption-file-password=password

--copy-encryption=file file にユーザーパスワードが掛かっている時にその password をここで指定します。

例:in.pdf をWeb用最適化し、更に test-ps.pdf からセキュリティ設定をコピーして out.pdf に出力します。なお、test-ps.pdf には(文書を開く)ユーザーパスワードが設定されてるのでその値「abc」を「--encryption-file-password=abc」オプションで指定します。当然ですが出力した out.pdf にも同じユーザーパスワードの設定がコピーされます。

 

--encrypt options --

文書プロパティのセキュリティに関する設定を行います。
このオプションの詳細はこの後の「暗号化オプション」を参照してください。

--decrypt

オーナーパスワードによる保護(文書プロパティのセキュリティ設定)を解除します。入力ファイルに対しての直接のパスワード解除は出来ません。必ず出力ファイルを指定します。

例:in-ps.pdf のセキュリティ設定を解除して、out-nops.pdf に出力します。

--pages options --

PDFの分割、マージを指定するオプションです。
このオプションの詳細はこの後の「ページ選択オプション」を参照してください。

--rotate=[+|-]angle:page-range

指定したページを90、180、または270度に回転します。

--split-pages=[n]

n ページ単位で別々のPDFファイルに書き出します。n=1の時は1頁1PDF単位、n=2の時は2頁単位で1PDF出力します。

出力ファイル名の後にページ番号を付加されます。

 

 

 

Encryption Options:暗号化オプション

PDFファイルのセキュリティ関連を変更します。Qpdf ではこの事を「ファイルの暗号化パラメータの変更」と言っています。

「--encrypt」オプションの形式

qpdf --encrypt  user-password  owner-password  key-length  flags  --

infilename outfilename

  • --encrypt : --encrypt オプションの開始を意味します
  • user-password : ユーザーパスワードを指定します
    (文書を開くパスワード)PDFファイルを開く時に制限を掛けるパスワードです。
  • owner-password : オーナーパスワードを指定します
    (権限パスワード)PDFに印刷、更新、コピー等の許可を設定するパスワードです。
  • key-length : キーの長さで40, 128, 256 のいずれかを指定
  • flags : これは上記のkey-length の値によって変わります
  • -- : 最後のハイフン2つ「--」で --encrypt オプションの終了を意味します
     

ユーザーパスワードとオーナーパスワードのいずれかまたは両方が空の文字列であってもよいです。その時は「""」の様に指定します。

注意:ユーザーパスワードとオーナーパスワードの文字数について。
参照:PDFのパスワードは32文字まで

flags

key-length の値(40 , 128 , 256)で flags 部分の内容が変わります。

  • key-length= 40 の時
    • --print=[yn] : 印刷を許可
    • --modify=[yn] : 文書の変更を許可
    • --extract=[yn] : テキスト/グラフィックの抽出を許可
    • --annotate=[yn] : コメントとフォーム記入と署名を許可
       
  • key-length= 128 の時
    • --accessibility=[yn] : 視覚障害者へのアクセスを許可
    • --extract=[yn] : テキスト/グラフィックの抽出を許可
    • --print=print-opt : 印刷アクセスを制御 (下記参照)
    • --modify=modify-opt : 変更アクセスを制御 (下記参照)
    • --cleartext-metadata : メタデータの暗号化を防ぐ
    • --use-aes=[yn] : AES 暗号化を使用するかどうかを示す
    • --force-V4 : V=4暗号化ハンドラの使用を強いる
        
  • key-length= 256 の時
    • --accessibility=[yn] : 視覚障害者へのアクセスを許可
    • --extract=[yn] : テキスト/グラフィックの抽出を許可
    • --print=print-opt : 印刷アクセスを制御 (下記参照)
    • --modify=modify-opt : 変更アクセスを制御 (下記参照)
    • --cleartext-metadata : メタデータの暗号化を防ぐ
    • --use-aes=y : AES 暗号化の使用は256ビットキーでは常にオン
    • --force-V4 : 256ビットでは利用不可 
    • --force-R5 : 非推奨のR=5暗号化の使用を強いる
       

print-opt

--print=print-opt オプションで使えるprint-opt の値です。

  • full : 完全な印刷が可能
    高解像度の印刷を意味してると
  • low : 低解像度の印刷のみを許可
  • none : 印刷を許可しない
        

modify-opt

--modify=modify-opt オプションで使えるmodify-opt の値です。

  • all : 完全な文書の変更を許可
  • annotate : コメント作成およびフォームの操作を許可
  • form : フォームフィールドの入力と署名を許可
  • assembly : 文書のアセンブリのみを許可
  • none : 変更を許可しない
      

--cleartext-metadata オプションの補足

「--cleartext-metadata : メタデータの暗号化を防ぐ」オプションを指定するにはPDFバージョン=1.5 以上が必要です。デフォルトはオフです。

--use-aes=y オプションの補足

「--use-aes=y : AES 暗号化を使用」オプションを指定するにはPDFバージョン=1.6 以上が必要です。デフォルトはオフです。

--force-V4 オプションの補足

使用するしないに関わらず、PDFバージョン=1.5 以上が必要です。

 

暗号化オプションの使用例

ユーザパスワードは無しで「 "" 」、オーナーパスワードは「abc」、キーの長さ「40」、印刷不可「 --print=n 」、抽出もコピーも不可「 --extract=n 」にします。オプションは最後に「--」だけで閉じます。入力は in.pdf 、出力は out.pdf です。

Qpdf 暗号化オプションの使用例

間違ってオーナーパスワードを空白「""」にした時は、「--print=n : 印刷不可」、「抽出もコピー不可: --extract=n 」のオプションなどは指定しても無視されます。エラーにはなりません。(注意

 

Page Selection Options:ページ選択オプション

qpdf infilename --pages file [ --password=password ] [ page-range ] ... -- outfilename

ページの分割とマージの指定です。「--pages」で始まり、最後は「--」だけで終了する部分を指定します。infilename を指定するとそのPDFの文書プロパティやメタデータなどの非ページデータをoutfilename 作成時に使用します。使用したくない場合は infilename に--empty を指定します。

注記:infilename に入力PDFも--empty も指定しないと実行エラーになります。

 

ページの指定方法とその並び

  • 1,4,6 : 1頁と4頁と6頁の順
  • 5-10 : 5頁から10頁の並び
  • 9-2 : 9頁から2頁の逆順の並び
  • z-1 : 最後の頁から1頁の逆順の並び。「z」は最終ページの意味。
  • 省略 : 1-z の指定と同じ。全頁です。

 

マージ

マージのサンプルです。入力ファイルを色で分けています。

例:in-A.pdf の1頁から3頁の後に、in-B.pdf の2頁から3頁を結合して、out.pdf へ出力します。最初に --empty が指定されているので、文書のタイトルなどのメタデータやプロパティの非ページデータはout.pdf へ出力しません。

>qpdf --empty --pages in-A.pdf 1-3 in-B.pdf 2-3 -- out.pdf

例:同じファイルを複数回使えます。1頁から3頁、その後に10頁から逆に5頁までをマージしてout.pdf へ出力します。

>qpdf --empty --pages in-A.pdf 1-3 in-A.pdf 10-5 -- out.pdf

例:ユーザーパスワード付きのPDFの場合はファイルの後に「--password=password」オプションを追加します。

>qpdf --empty --pages in-A.pdf 1-3 in-C.pdf --password=abcdefg 10-5 -- out.pdf

例:同じ入力ファイルが複数有り、パスワード時の場合は最初のだけ「--password=password」オプションを追加します。なお出力ファイル out.pdf のタイトルなどのメタデータと文書のプロパティ等の非ページデータは in-A.pdf のがコピーされます。

>qpdf in-A.pdf --pages in-C.pdf --password=abcdefg 1-3 in-C.pdf  10-5 -- out.pdf

 

分割

実際は上記マージの変形です。入力PDFファイルを1つだけにします。

例:in.pdf の1頁から3頁を抽出して out.pdf へ出力します。この時に --empty が指定されてるので文書のプロパティやメタ情報の非ページデータはout.pdf には出力されません。

 

例:例:in-A.pdf の1頁から3頁を抽出して out.pdf へ出力します。この時にin-B.pdf  の文書のプロパティやメタ情報の非ページデータのみがout.pdf には出力されます。in-A.pdf の非ページデータはコピーされません。

 

注意事項

入力PDFのしおりと添付ファイルは out.pdf に出力されません。これはテスト結果から出した情報です。

 

Advanced Transformation Options:高度な変換オプション

ここからの変換オプションは Qpdf が出力ファイルを作成する方法についての細かい部分をコントロールします。主にPDFファイル形式に精通しているか、PDF関連の開発者である人々に有効な情報です。

--stream-data=option

ストリームデータの変換を制御します。以下はoption の値です。

  • compress : 可能な場合はストリームデータを再圧縮 (デフォルト)
  • preserve : すべてのストリームデータをそのままで残します
  • uncompress : 可能な場合はストリーム データを解凍します

--compress-streams=[yn]

出力時にストリームを圧縮するかどうかを制御します。

  • y:圧縮する。
  • n:何もしない。

※7.0.0 テストで圧縮効果は確認できない。

--decode-level=option

ストリームのフィルタリングする方法を制御します。Optionは

  • none : デコードしない。
  • generalized : LZW、Flate、およびASCIIエンコーディングフィルタを含む一般化されたフィルタで圧縮されたストリームをデコードします。
  • specialized : RunLengthを含む可逆特殊フィルターでストリームをデコードします。
  • all : DCT(JPEG)などの非可逆フィルタでストリームをデコードします。

--normalize-content=[yn]

コンテンツストリームの正規化を有効または無効にします。

--suppress-recovery

Qpdf が破損したファイルを回復しようとする試みを防ぎます。

--object-streams=mode

オブジェクトストリームの処理を制御します。以下はmode の値です。

  • preserve : 元のオブジェクト ストリーム (既定値) を維持
  • disable : 任意のオブジェクトストリームを書かない
  • generate : 可能な限りオブジェクトストリームを使用

--ignore-xref-streams

Qpdf が任意の相互参照(クロスリファレンス)ストリームを無視するように指示します。

--preserve-unreferenced

参照されていないオブジェクトを保存します。

--newline-before-endstream

終了ストリーム (endstream) の前に改行を入れます。

--qdf

QDFモードをオンにします。詳細は下記の「QDFモード」を参照してください。

--min-version=version

出力ファイルに最小のPDF バージョンを設定します。

PDFの出力ファイルに最小のPDFバージョンを設定すると、後でPDFバージョンを上げることができますが、それを下げることは(基本的に)ありません。

--force-version=version

出力ファイルのPDF バージョンを強制で設定します。

PDFの出力ファイルのPDFバージョンで強制設定の機能を利用すると、実際にファイルの内容から許可されているよりも低い値にPDFバージョンを設定することができます。ファイルは間違いなくPDFバージョンでサポートされていない機能が含まれていないことがわかっている場合のみ、またはファイルを開くのに他の可能な方法を持っていない場合にのみ、これを行ってください。

 

QDFモード

デフォルトでは、コンテンツ正規化がオンになり、ストリームデータを解凍するように設定されています。つまりPDFの中身をテキストエディタで開くことが出来るようになります(メモ帳は無理かも)。この時にオーナーパスワードで設定されたセキュリティ設定(印刷の許可、変更の許可等)は解除されます。

例:in.pdf を入力してテキストエディタで開くことが出来る qdf ファイルにout.qdf を出力します。

 

この後でPDF独自の内部の位置情報が壊れるはずなので、以下で修正します。なお、以下のfix-qdf ファイルはPeralがOSにインストールされてないと動作しません。

 

 

試験、検査、およびデバッグ・オプション

これ以降の操作ではPDF文書を開く時に必要なユーザーパスワードは不要です。ユーザーパスワードが設定されていても、意識しなくて処理が出来ます。Qpdf の大きな特徴の1つです。

--deterministic-id

deterministic(確定的) /IDを生成します。

--static-id

静的 /IDを生成します。テストだけのために!

--static-aes-iv

AES-CBCのための静的な初期化ベクトルを使用します。これはセキュリティで保護されていないオプションです!テスト専用!

--no-original-object-ids

「qdf モード」で元のオブジェクトID のコメントを非表示します。

--show-encryption

暗号化パラメーターをすばやく表示します。

--check-linearization

ファイルの整合性とリニアライズ(Web用最適化)の状態を確認します。

--show-linearization

リニアライズ(Web最適化)データのチェックと表示をします。

--show-xref

相互参照(クロスリファレンス)表の内容を表示します。

--show-object=obj[,gen]

指定されたオブジェクトの内容を表示します。

--raw-stream-data

オブジェクトのコンテンツの代わりに生ストリーム データを表示します。

--filtered-stream-data

オブジェクトコンテンツではなくフィルター選択されたストリームデータを表示します。

--show-npages

ファイル内のページ数を表示します。

--show-pages

各ページのオブジェクト/世代番号を表示します。

--with-images

各ページ上の画像のためのオブジェクトIDを表示します。

--check

ファイル構造 + 暗号化、リニアライズ(Web用最適化)をチェックします。

 

終了コード

ヘルプやマニュアルには記述は無いですが、ChangeLog に記載があるのでそれを紹介します。

  • 0 : 正常終了
  • 2 : エラー
  • 3 : 警告

 

Qpdf を使ったVBA関数

特定の処理をQpdf で行うVBA関数です。

  1. Qpdf  : PDFにセキュリティを設定するVBA関数
  2. Qpdf  : PDFのセキュリティ設定を取得するVBA関数
  3. Qpdf  : PDFのパスワードとセキュリティ設定を解除するVBA関数
  4. Qpdf  : PDFにパスワードとセキュリティ設定をコピーするVBA関数

 

Qpdf を起動するサンプル

上記以外の処理をQpdf でさせるサンプルです。オプション等の設定、エラーの判定は全て自分で行う必要が有ります。

実際にコマンドラインを実行するVBA関数「 RunCommandLineEX 」はコチラをご使用ください。
  

例:IN.pdf のリニアライズ(Web最適化)チェックを行います。

DownloadcLine-qpdfDemo.xls

 

備考

  • PDF全体を圧縮する最適化と、Web用の最適化は少し異なります。Web用の最適化はブラウザで最初のページの表示速度を上げるための最適化を意味します。圧縮ではありません。このWeb用の最適化を「リニアライズ」と通常は言います。
      
  • ユーザーパスワードとオーナーパスワードの違い。
    ユーザーパスワードとは、PDF文書を開く時に必要なパスワード。
    オーナーパスワードとは、PDF文書に印刷は不可、変更の不可、コピーの不可などのセキュリティを設定する時に必要なパスワードです。
     
  • --decrypt で文書プロパティのセキュリティ設定を解除して、別のPDFで出力できます。入力PDFファイルの解除は出来ません。
      
  • 当ページは随時で追加、修正等を行う予定です。

 

 

< TOPへ戻る >

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


出来るだけ早く返答する様には心がけています。
が、遅くなる時もありますのでご了承ください。


SAMURAI Plugin

コメントをする時は最低でも以下をお願いします。

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン