Como anexar E OCULTAR um arquivo em um PDF usando Latex?

Como anexar E OCULTAR um arquivo em um PDF usando Latex?

Incorporar um arquivo é bastante fácil usando LaTeX (veja, por exemplo:Incorporar link em um arquivo incorporado).

Ocultar um arquivo incorporado também é possível e bastante fácil de fazer fora do LaTeX (veja, por exemplo:https://blog.didierstevens.com/2009/07/01/embedding-and-hiding-files-in-pdf-documents/)

Mas tenho quase certeza de que é possível fazer o mesmo (ou seja, incorporar um arquivo E ocultá-lo da lista de anexos) usando apenas Latex...

Motivação: para poder incluir o código fonte do tex como um anexo que éescondidoda lista de anexos.

Algum barbudo grisalho por aí sabe a resposta para essa pergunta?

Responder1

O arquivo incorporado "oculto" na postagem do blog não é um arquivo incorporado no sentido do padrão PDF, então a questão é o que você realmente deseja:

Se quiser incluir apenas o conteúdo do arquivo no PDF gerado, você pode adicionar um fluxo de PDF: Se você escrever \immediate\pdfobj file{some-filename.tex}, o arquivo some-filename.texserá copiado para o PDF como um fluxo. Se quiser ver isso sem escrever um analisador de PDF, você pode 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}

Se você abrir o arquivo PDF resultante em um editor, em algum lugar você encontrará algo como: (O primeiro número pode variar)

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

Este objeto não estará visível em nenhum visualizador de PDF.

Claro, isso não está realmente incorporado. Uma segunda tentativa: incorpore o arquivo, mas não o liste no formato /EmbeddedFiles. Você pode 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}

Desativei parcialmente a compactação novamente para que você possa encontrar o arquivo no PDF resultante. Isso \global\let\EmFi@list\emptyfaz com que o embedfilepacote esqueça todos os arquivos até este ponto, então eles nunca serão gravados na lista de arquivos incorporados, mas o /EmbeddedFileobjeto PDF com o conteúdo do arquivo e alguns metadados ainda serão gravados. Você não pode tornar isso visível facilmente, porque faltam as entradas do catálogo.

Se você tentar reproduzir a postagem do blog referenciada e alterar o caso de /EmbeddedFiles, será necessário substituir a rotina de saída do 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}

Responder2

Se você deseja fazer isso de maneira indireta: Use o programa gráfico GIMP e o ImageMagick. Você também precisará extrair imagens de um PDF: No Linux, experimente a ferramenta de linha de comando pdfimages. Ou experimente a ferramenta de linha de comando pdfimages.exe, do Xpdf.

  1. No GIMP, crie uma nova imagem de tamanho 100x100 pixels. Isso terá mais bytes do que o texto simples do seu currículo. Caso contrário, use uma imagem maior.

  2. Preencha a imagem com branco. Exporte-o como *.bmp (bitmap do Windows), mesmo se você não estiver no Windows. Não use nenhuma codificação e não salve informações de cores ou qualquer outra coisa.

  3. Abra o texto simples do seu currículo. Coloque alguns espaços antes de começar e depois de terminar. Copie tudo para a área de transferência.

  4. Abra a imagem *.bmp em um editor hexadecimal. Após o prólogo, você verá vários bytes FF, significando branco. Em algum lugar ali, substitua um monte de FF com o texto colado. Salvar.

  5. Você deverá conseguir abrir o *,bmp editado no GIMP, onde o texto aparecerá como linhas escuras de aparência aleatória. Exporte-o como PNG, usando compactação 0 e sem salvar nenhuma informação (sem Exif, etc.).

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

  7. Usando o includegraphicscomando (package graphicx), coloque a imagem *.png em um local discreto no arquivo CV TeX. Você pode reduzi-lo para ficar ainda menor. Você também pode usar o textpospacote para posicionar um retângulo branco em branco (imagem) sobre sua imagem *.png, para que nada apareça na impressão. Ou, se o currículo contiver sua foto ou logotipo corporativo, você poderá colocar a foto ou logotipo acima do arquivo *.png.

  8. Se você não estiver colocando uma imagem sobre a outra, é possível que o PDF encontre PDF/X ou PDF/A. No que diz respeito ao PDF, o png editado é apenas uma imagem. Ele não sabe sobre o texto dentro. Se você estiver colocando uma imagem sobre outra, ela (normalmente) não atenderá ao PDF/X ou PDF/A, a menos que você esteja usando uma versão recente desses padrões.

  9. A imagem *.png é armazenada usando métodos PDF, não "como png". Posteriormente, você pode extraí-lo usando a linha de comando pdfpages (Linux), mas certifique-se de especificar a saída como formato png, não o formato ppm padrão.

  10. No GIMP, abra o png extraído e converta para bmp, garantindo novamente que nenhuma codificação ou dados perdidos sejam gravados.

  11. Abra o bmp extraído em um editor hexadecimal e veja: seu texto está lá, escondido entre os bytes FF.

O nome geral para ocultar informações em uma imagem é “esteganografia”. Você pode ler sobre isso online. Este não é um bom exemplo, pois os dados originais podem ser vistos por qualquer pessoa que saiba o que você fez, sem a necessidade de descriptografia.

Acabei de testar meu próprio conselho e funciona. Porém, se quiser experimentar, você deve escolher cuidadosamente quais opções você usa (e não usa) em cada etapa, ou o texto da imagem ficará distorcido.

informação relacionada