Wie kann ich mit Latex eine Datei in einer PDF-Datei anhängen und verbergen?

Wie kann ich mit Latex eine Datei in einer PDF-Datei anhängen und verbergen?

Das Einbetten einer Datei ist mit LaTeX relativ einfach (siehe zum Beispiel:Link zu einer eingebetteten Datei einbetten).

Das Ausblenden einer eingebetteten Datei ist auch außerhalb von LaTeX möglich und relativ einfach (siehe zum Beispiel:https://blog.didierstevens.com/2009/07/01/embedding-and-hiding-files-in-pdf-documents/)

Aber ich bin fast sicher, dass dasselbe (also das Einbetten einer Datei UND das Ausblenden dieser Datei aus der Anhangsliste) nur mit Latex möglich ist ...

Motivation: um den Tex-Quellcode als Anhang einbinden zu können, derverstecktaus der Anhangsliste.

Weiß irgendein Graubart da draußen die Antwort darauf?

Antwort1

Bei der „versteckten“ eingebetteten Datei im Blogbeitrag handelt es sich nicht um eine eingebettete Datei im Sinne des PDF-Standards, daher stellt sich die Frage, was Sie wirklich wollen:

Wenn Sie nur den Inhalt der Datei in das generierte PDF aufnehmen möchten, können Sie einen PDF-Stream hinzufügen: Wenn Sie schreiben \immediate\pdfobj file{some-filename.tex}, wird die Datei some-filename.texals Stream in das PDF kopiert. Wenn Sie dies sehen möchten, ohne einen PDF-Parser zu schreiben, können Sie verwenden

\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}

Wenn Sie die resultierende PDF-Datei in einem Editor öffnen, wird irgendwo etwas wie Folgendes angezeigt: (Die erste Zahl kann variieren)

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

Dieses Objekt ist in keinem PDF-Viewer sichtbar.

Natürlich ist dies nicht wirklich eingebettet. Ein zweiter Versuch: Betten Sie die Datei ein, aber listen Sie sie nicht in auf /EmbeddedFiles. Sie können verwenden

\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}

Damit man die Datei auch im resultierenden PDF finden kann, habe ich die Komprimierung teilweise wieder deaktiviert. Das \global\let\EmFi@list\emptybewirkt, dass das embedfilePaket alle Dateien bis zu diesem Punkt vergisst, sodass sie nie in die Liste der eingebetteten Dateien geschrieben werden, aber die/EmbeddedFile PDF-Objekt mit dem Dateiinhalt und einigen Metadaten wird aber trotzdem geschrieben. Das kann man nicht so einfach sichtbar machen, da die Katalogeinträge fehlen.

Wenn Sie versuchen, den Blog-Beitrag, auf den Sie verwiesen haben, zu reproduzieren und die Groß-/Kleinschreibung von ändern /EmbeddedFiles, müssen Sie die Ausgaberoutine von embedfile ersetzen:

\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}

Antwort2

Wenn Sie dies auf Umwegen tun möchten: Verwenden Sie das Grafikprogramm GIMP und ImageMagick. Sie müssen auch in der Lage sein, Bilder aus einer PDF-Datei zu extrahieren: Versuchen Sie es unter Linux mit dem Befehlszeilentool pdfimages. Oder versuchen Sie es mit dem Befehlszeilentool pdfimages.exe von Xpdf.

  1. Erstellen Sie in GIMP ein neues Bild mit der Größe 100 x 100 Pixel. Dieses hat mehr Bytes als der reine Text Ihres Lebenslaufs. Wenn nicht, verwenden Sie ein größeres Bild.

  2. Füllen Sie das Bild mit Weiß. Exportieren Sie es als *.bmp (Windows-Bitmap), auch wenn Sie nicht unter Windows arbeiten. Verwenden Sie keine Kodierung und speichern Sie keine Farbinformationen oder sonstiges.

  3. Öffnen Sie den Klartext Ihres Lebenslaufs. Setzen Sie vor dem Anfang und nach dem Ende Leerzeichen. Kopieren Sie alles in die Zwischenablage.

  4. Öffnen Sie das *.bmp-Bild in einem Hex-Editor. Nach dem Prolog sehen Sie zahlreiche FF-Bytes, also Weiß. Überschreiben Sie irgendwo dort eine Menge FF mit Ihrem eingefügten Text. Speichern.

  5. Sie sollten das bearbeitete *,bmp in GIMP öffnen können, wo der Text als zufällig aussehende dunkle Linien erscheint. Exportieren Sie es als PNG, mit 0 Komprimierung und ohne irgendwelche Informationen zu speichern (kein Exif usw.).

  6. Verwenden von ImageMagick: mogrify -strip thatimage.png Unter Windows: magick mogrify -strip thatimage.png

  7. Platzieren Sie das *.png-Bild mit dem includegraphicsBefehl (Paket graphicx) an einer unauffälligen Stelle in der TeX-Datei des Lebenslaufs. Sie können es verkleinern, sodass es noch kleiner wird. Sie können das textposPaket auch verwenden, um ein leeres weißes Rechteck (Bild) über Ihrem *.png-Bild zu platzieren, damit im Druck nichts zu sehen ist. Oder wenn der Lebenslauf Ihr Foto oder ein Firmenlogo enthält, können Sie das Foto oder Logo über dem *.png platzieren.

  8. Wenn Sie kein Bild über ein anderes legen, ist es möglich, dass das PDF PDF/X oder PDF/A erfüllt. Für PDF ist das bearbeitete PNG nur ein Bild. Es kennt den darin enthaltenen Text nicht. Wenn Sie ein Bild über ein anderes legen, erfüllt es (normalerweise) nicht PDF/X oder PDF/A, es sei denn, Sie verwenden eine aktuelle Version dieser Standards.

  9. Das *.png-Bild wird mit PDF-Methoden gespeichert, nicht „als PNG“. Später können Sie es mit der Befehlszeile von pdfpages (Linux) extrahieren, achten Sie jedoch darauf, die Ausgabe im PNG-Format und nicht im Standard-PPM-Format anzugeben.

  10. Öffnen Sie in GIMP das extrahierte PNG und konvertieren Sie es in BMP. Stellen Sie dabei erneut sicher, dass keine Kodierungen oder Streudaten geschrieben werden.

  11. Öffnen Sie die extrahierte BMP-Datei in einem Hex-Editor und siehe da: Ihr Text ist da, versteckt zwischen den FF-Bytes.

Der allgemeine Name für das Verbergen von Informationen in einem Bild ist „Steganografie“. Sie können online darüber lesen. Dies ist kein gutes Beispiel, da die Originaldaten von jedem gesehen werden können, der weiß, was Sie getan haben, ohne dass eine Entschlüsselung erforderlich ist.

Ich habe meinen eigenen Ratschlag gerade getestet und er funktioniert. Wenn Sie ihn jedoch ausprobieren möchten, müssen Sie bei jedem Schritt sorgfältig auswählen, welche Optionen Sie verwenden (und welche nicht), da sonst der Text des Bildes verstümmelt wird.

verwandte Informationen