*PDF [#kf03468a]

PDF (Portable Document Format) は [[アドビ (Adobe):https://www.adobe.com/]] により,[[PostScript]] をベースに開発された電子文書フォーマットです.
現在は,国際規格 [[ISO 32000-2:2020:https://www.iso.org/standard/75839.html]] として ISO により公開されています.
PDF の基本は,紙に書かれた文書を電子文書として表現することですが,単なるページ記述言語の枠を超え,HTML のようなハイパーリンクによる文書内外のデータの相互リンク,JavaScript などによるインタラクティブなコンテンツや動画の再生機能なども備えています.

その用途は 1993 年の登場から広がりを見せ,現在では様々なニーズにあわせ,それに特化した派生規格も存在します.
PDF から派生した規格として,主に以下のものがあります:

-PDF/X -- 印刷用途に特化した規格。より安全な印刷データの受け渡しのため,PDF に様々な制約を設けています.(参考:[[DF/X-4 の意味・解説|DTP・印刷用語集:https://www.ddc.co.jp/words/archives/20120807134750.html]])
-PDF/A -- 文書保管目的に特化した規格。文書の長期保存という観点から PDF を利用しようというものです.文書のメタデータの埋め込みが要求されたり,規格によっては,文書の論理構造を示すタグ (マークアップ) が必須となります.
-PDF/UA -- アクセシビリティ.よりアクセシブルな PDF を目指して策定された規格です.スクリーンリーダーによる読み上げなどが問題なくできるように配慮されています.

他にも E やら VT やら様々な ISO 規格があります.

Adobe より,元となる PDF の仕様書が公開されています (ISO の規格書は有償です):

-[[Adobe Open Source | Advancing technology through open initiatives#PDF Reference:https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/#pdf-reference]]
--[[PDF Reference 1.7.pdf:https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/PDF32000_2008.pdf]] (PDF32000_2008.pdf)

Windows と macOS では標準で PDF 出力が可能です.
Microsoft Edge やプレビューなど,PDF 閲覧環境も整っています.

----
#contents
----


**PDF の作り方 [#w4991875]

TeX Wiki 内のページ "[[PDFの作り方]]" を参照してください.


**PDF を扱うソフトウェア [#o7e2223a]

Windows と macOS では,プリント機能を持ったどんなアプリケーションからも,
PDF を出力できます.
また,PostScript や PDF などを扱う,Ghostscript というソフトウェアを用いた,PDF へ出力するための仮想プリンタが多数あります:

PDF を出力するソフトウェアを広告なしのフリーウェア(無料)として提供しているものが多数あります.

-[[PDF24 Creator:https://www.pdf24.org/en/]] 100% Free | 100% Free of spyware
-[[CutePDF Writer:https://www.acrosoftware.com/Products/CutePDF/writer.asp]] FREE software for commercial and non-commercial use!  No Adware, No Malware!  


広告付きのフリーウェア([[アドウェア>Wikipedia.ja:アドウェア]])として評価されたり議論されたりしているものも多数あります.

-[[CubePDF:https://www.cube-soft.jp/cubepdf/]]
--[[ビューワーのCubepdfを窓の杜からインストールしたら&br;買い物ポケット、ESTARTなるGMOのアプリが勝手にインストールされた&br;&br;改めて最初から確認したけど、同意するチェックが無かったぞ&br;&br;これマルウェアで犯罪じゃなかったっけ?&br;防ぎようがないorz:https://x.com/otaka_ss_mold/status/1778288399293767873]]
--[[CubePDF、買い物ポケットとかいうマルウェアまがいの拡張機能を強制インストールするので絶対に導入してはいけません。&br;&br;アンインストールしても永遠に残り続け、ブラウザを立ち上げると強制的に余計な広告が表示されます:https://x.com/cordimana97/status/1812310063845163407]]
--[[「CubePDF」の提供を続けたくて。倒産寸前のフリーソフト会社を、開発者自ら再建させるまで【フォーカス】:https://levtech.jp/media/article/focus/detail_680/]]
-[[PDFCreator:https://www.pdfforge.org/]]([[Wikipedia.en:PDFCreator#Adware_toolbar_controversy]] を参照)
-[[BullZip PDF Printer Community Edition:https://www.bullzip.com/products/pdf/download.php#CommunityEdition]]([[Wikipedia.en:Bullzip_PDF_Printer]] を参照)
-[[pdf995:https://www.pdf995.com/]]([[ソフト関連覚え書き「pdf995」:https://susshiblog.blog.ss-blog.jp/2005-07-29]] を参照)

有償のソフトウェアも様々な価格帯で多数あります.

-[[Amazon.co.jp PDFソフトの売れ筋ランキング:https://www.amazon.co.jp/gp/bestsellers/software/11047021/ref=pd_zg_hrsr_software]]
-[[Adobe Acrobat:https://www.adobe.com/jp/acrobat.html]]
([[Adobe:https://www.adobe.com/jp/]])
-[[いきなりPDF:https://www.sourcenext.com/product/pdf/]]
([[ソースネクスト:https://www.sourcenext.com/]])
-[[SkyPDF:https://www.skycom.jp/product/skypdf/]]
([[スカイコム:https://www.skycom.jp/]])
-[[瞬簡PDF:https://www.antenna.co.jp/pds/]]
([[アンテナハウス:https://www.antenna.co.jp/]])
-[[JUST PDF:https://www.justsystems.com/jp/products/justpdf/]]
([[ジャストシステム:https://www.justsystems.com/jp/]])
-[[PDF-XChangeシリーズ:https://www.pdf-xchange.jp/]]
([[ジャングル:https://www.junglejapan.com/]])
-[[UPDF:https://updf.com/jp/]]
([[Superace Software Technologies:https://superace.com/]])

以下のサイトに詳しい説明があります。

-[[おすすめのPDF編集ソフト3選。価格、特徴、スペックを徹底比較|デジ箱:https://www.digi-bako.net/]]
--[[【有料版】主なPDFソフト一覧:https://www.digi-bako.net/pdf-paid/]]

既存の PDF に対して,様々な操作や加工を行うソフトウェアが存在します.上述の Adobe Acrobat では多様なことができます.使い方については,
[[Adobe Acrobat ユーザーガイド:https://helpx.adobe.com/jp/acrobat/user-guide.html]] を参照して下さい.

以下では,主にオープンソースのソフトウェアについて紹介していきます.

***PDF を操作する様々なプログラム [#i31c5aaa]

[[Poppler]] は PDF 描画ライブラリですが,PDF を操作する様々なユーティリティ・プログラムが付属しています.

-pdfdetach -- 添付ファイルの一覧出力または抽出
-pdffonts -- 文書で使用されるフォントの分析
-pdfimages -- 文書中の画像を抽出
-pdfinfo -- 文書情報を表示
-pdfseparate -- ページを抽出する
-pdftocairo -- PDF から PNG/JPEG/PDF/PS/EPS/SVG への Cairo を使った変換を行う
-pdftohtml -- HTML への変換を行う
-pdftoppm -- PPM/PNG/JPEG 画像への変換を行う
-pdftops -- PostScript  への変換を行う
-pdftotext -- テキストを抽出する
-pdfunite -- 文書の結合を行う

また,[[Apache PDFBox:https://pdfbox.apache.org/]] , [[QPDF]] や [[pdftk-java]] などにも様々な処理を行うプログラムが含まれます.

***ファイルの結合やページの抽出 [#a6819b00]

[[QPDF]] や [[pdftk-java]] で,ファイルの結合やページの抽出など,様々な操作が行えます。
複数の PDF ファイルをまとめてひとつにしたり,特定のページのみ別のファイルに抽出したりする場合に,これらのプログラムが使えます。どちらもコマンドライン・プログラムです。

***テキスト抽出 [#p1620d11]

[[Poppler]] に含まれる pdftotext や [[Apache PDFBox:https://pdfbox.apache.org/]] を使うと,PDF 文書からテキストのみ抽出できます。

***パスワード保護 [#r212a8b0]

[[QPDF]] や [[pdftk-java]] で,暗号化による PDF の保護ができます.

***Web 用に最適化 [#j2a7fa8f]

[[QPDF]] は Web 用に最適化するための機能を備えています.

Web 用に最適化を行うと,Web サーバーからページ単位で PDF をダウンロードできるようになります.巨大な文書では,これを有効にすると特に効果的です。


***その他 [#l381390e]

-[[pdfsizeopt:https://github.com/pts/pdfsizeopt]] PDF file size optimizer
-[[DiffPDF:http://www.qtrac.eu/diffpdf.html]] DiffPDF is used to compare two PDF files—textually or visually.

**PDF ビューア [#zd559492]

Microsoft Edge が標準で PDF の描画をサポートしていたり,[[Google Chrome]] で使用されている PDF レンダリングエンジンの [[PDFium:https://pdfium.googlesource.com/pdfium/]] がオープンソース化されたり,ブラウザで PDF を描画させる [[PDF.js:https://github.com/mozilla/pdf.js]] という JavaScript ライブラリが存在するなど,今では PDF を表示する環境は様々です.Windows, macOS, Linux などのデスクトップ環境から Android 端末や iOS 端末などのモバイル環境まで,様々な環境で PDF を標準で,あるいは簡単に表示できます.

[[Adobe Acrobat Reader]] が有名ですが,ほかにも様々あります:

-[[Poppler]] 系:Poppler を利用したものが多数あります.
--[[TeXstudio]] (Qt) PDF ビューアとしても使える LaTeX の統合環境
--[[TeXworks]] (Qt) PDF ビューアとしても使える LaTeX の統合環境
--[[Okular]] (Qt) SyncTeX に対応した KDE Plasma 標準の PDF ビューア
--[[Papers]] (GTK) GNOME 標準の PDF ビューア
--[[Evince]] (GTK) SyncTeX に対応した PDF ビューア
--[[zathura]] (GTK) SyncTeX に対応した軽量な PDF ビューア
--[[qpdfview]] (Qt) SyncTeX に対応したタブ切り替え型の PDF ビューア
--[[pdfpc:https://pdfpc.github.io/]] (GTK) presentation viewer
--[[Dual-Screen PDF Viewer [dspdfviewer]:http://dspdfviewer.danny-edel.de/]] (Qt) Dual-Screen PDF Viewer for LaTeX-beamer
-[[MuPDF]] 系:MuPDF を利用したものが多数あります.
--[[SumatraPDF]] SyncTeX に対応したタブ切り替え型の PDF ビューア
--[[zathura]] (GTK) SyncTeX に対応した軽量な PDF ビューア
--[[qpdfview]] (Qt) SyncTeX に対応したタブ切り替え型の PDF ビューア
--[[Sioyek]] (Qt) SyncTeX に対応した教科書や論文を読むことに特化した PDF ビューア
--[[llpp]] SyncTeX に対応した軽量な PDF ビューア
-PDF.js 系:PDF.js を利用したものが多数あります.
--[[Visual Studio Code]] で [[LaTeX Workshop>Visual Studio Code/LaTeX]] を使う
-PDFium 系:PDFium を利用したものが多数あります.
--[[Texmaker]] (Qt) LaTeX の統合環境
-[[TeXShop]] PDF ビューアとしても使える LaTeX の統合環境
-[[Skim]] SyncTeX に対応した PDF ビューア.macOS 専用です.
-[[PDF-XChange Editor:https://www.pdf-xchange.com/product/pdf-xchange-editor]] タブ切り替え型で軽快に動作するフリーの PDF ビューア
-[[Foxit PDF Reader:https://www.foxit.com/pdf-reader/]] フリーの PDF Reader
-[[UPDF:https://updf.com/jp/]] Windows/macOS/iOS/Android で動作するAI搭載のPDFエディター
-[[Slim PDF Reader:https://www.investintech.com/resources/freetools/slimpdfreader/]] 軽量な PDF ビューア

Poppler を利用したものは多く,どれを使えばよいのかわかり辛いですが,使っているデスクトップ環境や好みの UI で選びましょう.

**PDF ライブラリ [#r450d9ad]

PDF 関連のソフトウェアを作成するためのライブラリも様々あります.
入門として,以下のサイトを参照すると良いでしょう:

-[[Open Source PDF Libraries and Tools:https://pdf-house.blogspot.com/]]
-[[PDF開発の基礎:https://www.slideshare.net/slideshow/pdf-29001511/29001511]]
-[[手書きPDF入門:https://kobu.com/docs/pdf/pdfxhand.htm]]
-[[詳細PDF入門 ー 実装して学ぼう!PDFファイルの構造とその書き方読み方:https://itchyny.hatenablog.com/entry/2015/09/16/100000]]

PDF ライブラリにはその用途に応じて,大別して3種類あります.描画(レンダリング)ライブラリ,生成ライブラリ,そして加工やデータ抽出などに使える操作ライブラリです.これら複数の用途に使えるライブラリも存在します.[[PDFlib:https://www.pdflib.com/]] ([[日本語サイト:https://www.pdflib.jp/]]) が有名ですが,無償で公開されている [[PDFlib Lite:https://github.com/Distrotech/PDFlib-Lite]] は,機能がかなり限定的です.

***C と C++ [#hc56261e]

[[Poppler]] は PDF の描画・操作ライブラリで,様々なビューアに利用されています.多くの言語に対するバインディングが存在し,[[Ruby]] などの各種言語で利用可能です.Xpdf-3.0 をベースに開発がスタートし,多くの改善がなされるとともに,Windows など様々なプラットフォームで利用可能となっています.

[[Haru free PDF library:http://libharu.org/]] は C や C++ などをサポートする生成ライブラリです。様々な高水準グラフィックス・テキスト描画関数を備えており,PostScript Type1 や TrueType フォントなどの埋め込みが可能です.暗号化による PDF の保護にも対応しています.既存の PDF の読み込みには対応していません.

[[QPDF]] は,Jay Berkenbilt により保守・開発されている C++ の PDF 操作ライブラリです.既存の PDF の読み込みが行え,データの抽出や加工などに便利です.また,暗号化やリニアライゼーションをよくサポートしている点が魅力です.グラフィックス描画関数などは全くないため,PDF 生成を行うには,相当の PDF による図形やテキストの描画の知識が必要です.テキストやフォント関連のサポートなどもないため,自身で実装する必要があります.

[[Hummus PDF Writer:http://pdfhummus.com/]] は C++ や JavaScript (Node.js) で利用可能な生成ライブラリです.テキストやグラフィックスの描画だけでなく,既存の PDF の取り込みと加工が可能です.OpenType など様々なフォント形式をサポートします.
詳しくは,開発元の [[Features:https://github.com/galkahana/PDF-Writer/wiki/Features]] の項を参照してください.

[[PoDoFo:http://podofo.sourceforge.net/]] は PDF ファイルを扱うための C++ ライブラリです.PDF を読み込み,加工することができます.

また,2D グラフィックス・ライブラリの [[Cairo:https://www.cairographics.org/]] も PDF 出力をサポートしており,手軽に PDF 生成が可能です.しおりやハイパーリンクなどの機能が不要であれば Cairo を使うのが簡単で良いでしょう.Cairo には Ruby など様々な言語でのバインディングがあります.

***Java [#da4d96c8]

Java ではいくつかの活発なプロジェクトがあります.

-[[今どきのJavaのPDFライブラリ まとめ (2017年版):https://weblabo.oscasierra.net/java-pdf-lib-2017/]]

などを参照すると良いでしょう.

[[iText:http://itextpdf.com/]] は Java で書かれた PDF 生成・操作ライブラリです.
比較的長い歴史があり,インターネットで検索すると,様々な記事が見つかります.
AGPL と商用ライセンスの2ライセンス形態で利用可能です.

[[Apache PDFBox:https://pdfbox.apache.org]] は,オープンソースの,Java による PDF 生成・操作ライブラリとツール群です.

***Ruby と Python [#u080d4b3]

[[Prawn:https://github.com/prawnpdf/prawn]] は Ruby 製の PDF 生成ライブラリです.Ruby のみで書かれています.

その他,Ruby では,[[Poppler バインディング:https://rubygems.org/gems/poppler/]] や,PDF 生成の選択肢として [[rcairo:https://github.com/rcairo/rcairo]] による Cairo での出力などが挙げられます. 

[[Python]] では,PDF 生成ライブラリとして, [[ReportLab:http://www.reportlab.com/opensource/]] などがよく知られています.

***その他 [#t2dca5c2]

-[[PDFKit:http://pdfkit.org/]]: JavaScript
-[[TCPDF:http://www.tcpdf.org/]]: PHP
-[[pypdf:https://github.com/py-pdf/pypdf]]: Python
-[[PDFMiner:http://www.unixuser.org/~euske/python/pdfminer/]]: Python
-[[ThinReports Generator:http://www.thinreports.org/features/generator/]]: Ruby
-[[Origami:https://rubygems.org/gems/origami]]: Ruby

**関連リンク [#j6d79d4c]

-[[PDF 2.0 でドキュメントを次世代のステージへ:https://blog.adobe.com/jp/publish/2017/08/30/taking-documents-to-the-next-level-with-pdf-2-0]]
-[[PDF 2.0って何? いままでのPDFとはどこが違うの? PDF 2.0対応で注意すべきことがありますか?? - アンテナハウス PDF資料室:https://www.antenna.co.jp/pdf/reference/What-is-pdf20.html]]
-[[PDF フォーマット:https://azelpg.gitlab.io/azsky2/note/prog/pdf/index.html]]