よくある質問

なぜPDFファイルを開いて編集できないのでしょうか?

人々は時々、テキストエディターでファイルを開いてPDFファイルを編集しようとします。これがうまくいくことは、3つの理由から、ほとんどありません。

第一に、PDFファイルは事実上PDFオブジェクトのダンプです。ファイルには、ファイルの先頭からの各オブジェクトの正確なバイトオフセット位置を示す参照テーブルと、参照テーブルが含まれています。文字を追加したり削除したり、あるいは行末をあるプラットフォーム・フォーマットから別のフォーマットに変換するエディターから再保存したりすると、これらの数値はすべて不正確になります。すべてを更新する必要がある。その証拠に、PDFを開いてスペースを入力し、保存してから開いてみてください。

第二に、PDFファイルを開くと、データの多くがバイナリ・ストリームの中に保存され、その中でデータは暗号化されたり圧縮されたりしています。PDFを表示すると、テキストも表示されますが、理解できない「ゴミ」がたくさん表示されます。これがバイナリデータです。編集することはできませんが、文字を追加するだけで簡単に壊すことができます。

PDFをテキストエディタで開く

Screenshot of a text editor showing the raw content of a PDF file (awjune2003.pdf). The content includes PDF objects, streams, and various binary-like characters.
%PDF-1.5
%,,e"
1 0 obj<</Type/Font/BaseFont/Helvetica/Subtype/Type1/Encoding/
WinAnsiEncoding>>
endobj
2 0 obj <</Filter/FlateDecode/Length 10>>stream
xú+Z0|
endstream
endobj
3 0 obj <</Filter/FlateDecode/Length 78>>stream
xúS%*%r
.2Pjft."àLCôê4.Cwò'ÇtôÇñ P$óKC$!ldÇU&Á-!z3-f
aê!H-E!Á\fl
endstream
endobj
4 0 obj<</Type/Page/TrimBox[0 -0.08 648 776.079956]/Contents 5 0 R/Parent
6 0 R/BleedBox[-6 -6.08 654 782.079956]/Resources 7 0 R/CropBox[0 0 648
776]/Rotate 0/MediaBox[0 0 648 776]>>
endobj
5 0 obj <</Filter/FlateDecode/Length 2689>>stream
Há<Wer,,6jWt-T*,tN2µµ)çLêJlyVÍ&Fpd/RBQêDl"cpX0°H;3U0°"]% -
E0"}j0G0wIqE6&1z:frñms?@+Q;VJw&i"é5U!>hgYb<xhç*_‘É72!Zj&ó°0°ùSL0$*Z3+
$EB#5 viOPéóñi0%ouftHC-B&ñ
  

最後に、PDFデータの多くは、ファイル内の他のデータと関連して見る必要があります。テキストはフォントオブジェクトのエンコーディングを見ることでしか意味をなさないし、画像はそのデータの一部がXObjectにあり、一部がColorSpaceオブジェクトにある、といった具合です。

HTML、JavaScriptやほとんどのソースコードのようないくつかのファイル形式は、テキストエディタで簡単に編集することができます。PDFファイル形式はそのようなものではありません。このような複雑さを解消してくれるライブラリを使ってアクセスするのがベストです。幸いなことに、最も一般的な言語すべてに対応するツールが、無料・商用ともにたくさんあります。