Latex を使用して PDF にファイルを添付して非表示にする方法は?

Latex を使用して PDF にファイルを添付して非表示にする方法は?

LaTeX を使用すると、ファイルを埋め込むのは非常に簡単です (例:埋め込みファイルへのリンクを埋め込む)。

埋め込みファイルを非表示にすることも可能です。LaTeX の外部で実行するのは非常に簡単です (例:https://blog.didierstevens.com/2009/07/01/embedding-and-hiding-files-in-pdf-documents/

しかし、Latex だけを使用して同じこと (つまり、ファイルを埋め込み、添付ファイル リストから非表示にする) を実行できるとほぼ確信しています...

モチベーション: TEXソースコードを添付ファイルとして含めることができるように隠れた添付ファイルリストから。

この質問の答えを知っている人はいますか?

答え1

ブログ投稿内の「隠し」埋め込みファイルは、PDF 標準の意味での埋め込みファイルではないため、実際に何が必要なのかが問題になります。

生成されたPDFにファイルの内容のみを含めたい場合は、PDFストリームを追加できます。 と記述すると\immediate\pdfobj file{some-filename.tex}、ファイルはsome-filename.texストリームとしてPDFにコピーされます。PDFパーサーを記述せずにこれを確認したい場合は、次のように記述します。

\documentclass{article}
\pdfobjcompresslevel=0% Don't hide the objects
...
\begin{document}
...
% Disable compression for this one object
{\pdfcompresslevel=0\immediate\pdfobj file{some-filename.tex}}
...
\end{document}

結果の PDF ファイルをエディターで開くと、次のような内容が表示されます (最初の数字は異なる場合があります)。

11 0 obj
<Here comes the content of some-filename.tex>
endobj

このオブジェクトはどの PDF ビューアーでも表示されません。

もちろん、これは実際には埋め込まれていません。2番目の試み:ファイルを埋め込みますが、 にリストしません/EmbeddedFiles

\documentclass{article}
\usepackage{embedfile}
\pdfobjcompresslevel=0% Don't hide the objects
...
\begin{document}
...
{\pdfcompresslevel=0\embedfile{some-filename.tex}}
\makeatletter
\global\let\EmFi@list\empty
\makeatother
...
\end{document}

結果の PDF でファイルを見つけられるように、圧縮を部分的に無効にしました。これにより、\global\let\EmFi@list\emptyパッケージembedfileはこの時点までのすべてのファイルを忘れるため、埋め込みファイルのリストに書き込まれることはありませんが、/EmbeddedFileファイル コンテンツと一部のメタデータを含む PDF オブジェクトは引き続き書き込まれます。カタログ エントリが欠落しているため、これを簡単に表示することはできません。

参照したブログ投稿を再現して の大文字と小文字を変更する場合は/EmbeddedFiles、embedfile の出力ルーチンを置き換える必要があります。

\documentclass{article}
\usepackage{embedfile}
\pdfobjcompresslevel=0% Don't hide the objects, otherwise you can't see
                      % /Embeddedfiles, so you also can't change it back
\makeatletter
% The following is mostly copied from embedfile.sty, (C) by Heiko Oberdiek
% But all the errors are propably introduced by me
\def\embedfilefinish{%
  \ifEmFi@finished
    \EmFi@Error{%
      Too many invocations of \string\embedfilefinish
    }{%
      The list of embedded files is already written.%
    }%
  \else
    \ifx\EmFi@list\empty
    \else
      \global\EmFi@finishedtrue
      \begingroup
        \def\do##1##2{%
          (##1)##2%
        }%
        \immediate\pdfobj{%
          <<%
            /Names[\EmFi@list]%
          >>%
        }%
        \pdfnames{%
          % Changed name to make this invalid
          /Embeddedfiles \the\pdflastobj\space 0 R%
        }%
      \endgroup
    \fi
  \fi
}
\makeatother
\begin{document}
...
\embedfile{hidden.tex}
...
\end{document}

答え2

回りくどい方法で実行したい場合は、GIMP グラフィック プログラムと ImageMagick を使用します。また、PDF から画像を抽出できる必要があります。Linux では、pdfimages コマンドライン ツールを試してください。または、Xpdf の pdfimages.exe コマンドライン ツールを試してください。

  1. GIMP で、100 x 100 ピクセルのサイズの新しい画像を作成します。これにより、履歴書のプレーンテキストよりも多くのバイト数になります。そうでない場合は、より大きな画像を使用してください。

  2. 画像を白で塗りつぶします。Windows 以外の場合でも、*.bmp (Windows ビットマップ) としてエクスポートします。エンコードは使用せず、色情報やその他の情報は保存しないでください。

  3. 履歴書のプレーンテキストを開きます。 開始前と終了後にスペースを入れます。 すべてをクリップボードにコピーします。

  4. *.bmp 画像を 16 進エディタで開きます。プロローグの後に、白を意味する FF バイトが多数表示されます。そのどこかに、貼り付けたテキストで FF の束を上書きします。保存します。

  5. 編集した *.bmp を GIMP で開くと、テキストがランダムに見える暗い線として表示されます。圧縮率 0 で、情報を保存せずに (Exif などなしで) PNG としてエクスポートします。

  6. ImageMagick を使用する場合: mogrify -strip thatimage.png Windows の場合: magick mogrify -strip thatimage.png

  7. includegraphicsコマンド (パッケージ)を使用してgraphicx、*.png 画像を CV TeX ファイル内の目立たない場所に配置します。縮小してさらに小さくすることもできます。また、textposパッケージを使用して、*.png 画像の上に空白の白い四角形 (画像) を配置し、印刷時に何も表示されないようにすることもできます。または、CV に写真や会社のロゴが含まれている場合は、写真やロゴを *.png の上に配置できます。

  8. 画像を別の画像の上に配置しない場合は、PDF を PDF/X または PDF/A に準拠させることができます。PDF に関しては、編集された png は単なる画像です。内部のテキストについては認識しません。画像を別の画像の上に配置する場合、最新バージョンの標準を使用しない限り、(通常は) PDF/X または PDF/A に準拠しません。

  9. *.png 画像は、「png として」ではなく、PDF 方式を使用して保存されます。後で、pdfpages コマンドライン (Linux) を使用して抽出できますが、出力はデフォルトの ppm 形式ではなく、必ず png 形式として指定してください。

  10. GIMP で、抽出した png を開き、エンコードや余分なデータが書き込まれていないことを確認しながら bmp に変換します。

  11. 抽出した bmp を 16 進エディターで開くと、FF バイトの間にテキストが潜んでいることがわかります。

画像に情報を隠すことを一般的に「ステガノグラフィー」と呼びます。これについてはオンラインで読むことができます。これは良い例ではありません。なぜなら、あなたが何をしたかを知っている人なら誰でも、復号化することなく元のデータを見ることができるからです。

私は自分のアドバイスをテストしたところ、うまくいきました。ただし、試してみる場合は、各ステップで使用するオプション (および使用しないオプション) を慎重に選択する必要があります。そうしないと、画像のテキストが文字化けしてしまいます。

関連情報