¿Cómo adjuntar Y OCULTAR un archivo en un PDF usando Latex?

¿Cómo adjuntar Y OCULTAR un archivo en un PDF usando Latex?

Incrustar un archivo es bastante fácil usando LaTeX (ver, por ejemplo:Insertar enlace a un archivo incrustado).

Ocultar un archivo incrustado también es posible y bastante fácil de hacer fuera de LaTeX (consulte, por ejemplo:https://blog.didierstevens.com/2009/07/01/embedding-and-hiding-files-in-pdf-documents/)

Pero estoy casi seguro de que es posible hacer lo mismo (es decir, incrustar un archivo Y ocultarlo de la lista de archivos adjuntos) usando solo Latex...

Motivación: para poder incluir el código fuente de tex como un archivo adjunto que esocultode la lista de archivos adjuntos.

¿Algún hombre con barba gris sabe la respuesta a esta pregunta?

Respuesta1

El archivo incrustado "oculto" en la publicación del blog no es un archivo incrustado en el sentido del estándar PDF, por lo que la pregunta es qué es lo que realmente desea:

Si solo desea incluir el contenido del archivo en el PDF generado, puede agregar una secuencia de PDF: si escribe \immediate\pdfobj file{some-filename.tex}, el archivo some-filename.texse copia en el PDF como una secuencia. Si desea ver esto sin escribir un analizador de PDF, puede usar

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

Si abre el archivo PDF resultante en un editor, en algún lugar encontrará algo como: (El primer número puede variar)

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

Este objeto no será visible en ningún visor de PDF.

Por supuesto, esto no está realmente integrado. Un segundo intento: incrustar el archivo, pero no incluirlo en /EmbeddedFiles. Puedes usar

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

Volví a desactivar parcialmente la compresión para que puedas encontrar el archivo en el PDF resultante. Esto \global\let\EmFi@list\emptyhace que el embedfilepaquete se olvide de todos los archivos hasta este punto, por lo que nunca se escribirán en la lista de archivos incrustados, pero el /EmbeddedFileobjeto PDF con el contenido del archivo y algunos metadatos aún se escribirán. No puede hacer esto visible fácilmente porque faltan las entradas del catálogo.

Si intenta reproducir la publicación del blog a la que hizo referencia y cambia el caso de /EmbeddedFiles, debe reemplazar la rutina de salida de 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}

Respuesta2

Si desea hacer esto de forma indirecta: utilice el programa de gráficos GIMP e ImageMagick. También necesitarás poder extraer imágenes de un PDF: en Linux, prueba la herramienta de línea de comandos pdfimages. O pruebe la herramienta de línea de comandos pdfimages.exe, de Xpdf.

  1. En GIMP, cree una nueva imagen de tamaño 100x100 píxeles. Este tendrá más bytes que el texto plano de tu CV. Si no, utilice una imagen más grande.

  2. Rellena la imagen con blanco. Exportarlo como *.bmp (mapa de bits de Windows) incluso si no está en Windows. No utilice ninguna codificación y no guarde información de color ni nada más.

  3. Abra el texto sin formato de su CV. Coloque algunos espacios antes de que comience y después de que termine. Copia todo al portapapeles.

  4. Abra la imagen *.bmp en un editor hexadecimal. Después del prólogo, verá numerosos bytes FF, es decir, blanco. En algún lugar allí, sobrescribe un montón de FF con el texto pegado. Ahorrar.

  5. Debería poder abrir el *,bmp editado en GIMP, donde el texto aparecerá como líneas oscuras de aspecto aleatorio. Exportarlo como PNG, usando compresión 0 y sin guardar ninguna información (sin Exif, etc.).

  6. Usando ImageMagick: mogrify -strip thatimage.png En Windows: magick mogrify -strip thatimage.png

  7. Usando el includegraphicscomando (paquete graphicx), coloque la imagen *.png en un lugar discreto en el archivo CV TeX. Puedes reducirlo para que sea aún más pequeño. También puede usar el textpospaquete para colocar un rectángulo blanco (imagen) encima de su imagen *.png, de modo que no se muestre nada impreso. O, si el CV contiene su foto o un logotipo corporativo, puede colocar la foto o el logotipo encima del *.png.

  8. Si no coloca una imagen encima de otra, entonces es posible que el PDF coincida con PDF/X o PDF/A. En lo que respecta al PDF, el png editado es solo una imagen. No sabe nada del texto que hay dentro. Si coloca una imagen encima de otra, (normalmente) no cumplirá con PDF/X o PDF/A, a menos que esté utilizando una versión reciente de esos estándares.

  9. La imagen *.png se almacena utilizando métodos PDF, no "como png". Más tarde, puede extraerlo usando la línea de comando de pdfpages (Linux), pero asegúrese de especificar la salida en formato png, no en el formato ppm predeterminado.

  10. En GIMP, abra el png extraído y conviértalo a bmp, asegurándose nuevamente de que no se escriba ninguna codificación ni datos perdidos.

  11. Abra el bmp extraído en un editor hexadecimal y he aquí: su texto está ahí, acechando entre los bytes FF.

El nombre general para ocultar información en una imagen es "esteganografía". Puedes leer sobre esto en línea. Este no es un buen ejemplo, ya que los datos originales pueden ser vistos por cualquiera que sepa lo que hiciste, sin necesidad de descifrarlos.

Acabo de probar mi propio consejo y funciona. Sin embargo, si deseas probarlo, debes elegir cuidadosamente qué opciones usas (y no usas) en cada paso, o el texto de la imagen quedará confuso.

información relacionada