Как прикрепить и СКРЫТЬ файл в PDF с помощью Latex?

Как прикрепить и СКРЫТЬ файл в PDF с помощью Latex?

Внедрение файла с помощью LaTeX выполняется довольно просто (см., например:Вставить ссылку на встроенный файл).

Скрытие встроенного файла также возможно и довольно легко осуществляется вне LaTeX (см., например:https://blog.didierstevens.com/2009/07/01/встраивание-и-сокрытие-файлов-в-pdf-документы/)

Но я почти уверен, что то же самое (т. е. встроить файл И скрыть его из списка вложений) можно сделать, используя только 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-файлов.

Конечно, это не совсем встроено. Вторая попытка: внедрить файл, но не указывать его в /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. Или попробуйте командную строку pdfimages.exe из Xpdf.

  1. В GIMP создайте новое изображение размером 100x100 пикселей. Оно будет иметь больше байт, чем простой текст вашего резюме. Если нет, используйте изображение большего размера.

  2. Заполните изображение белым цветом. Экспортируйте его как *.bmp (битовое изображение Windows), даже если у вас не Windows. Не используйте никакую кодировку и не сохраняйте цветовую информацию или что-либо еще.

  3. Откройте простой текст вашего резюме. Поставьте несколько пробелов перед началом и после конца. Скопируйте все в буфер обмена.

  4. Откройте изображение *.bmp в шестнадцатеричном редакторе. После его пролога вы увидите многочисленные байты FF, означающие белый цвет. Где-то там перезапишите кучу FF вашим вставленным текстом. Сохраните.

  5. Вы должны иметь возможность открыть отредактированный *,bmp в GIMP, где текст будет выглядеть как случайные темные линии. Экспортируйте его как PNG, используя нулевое сжатие и без сохранения какой-либо информации (без Exif и т. д.).

  6. Использование ImageMagick: mogrify -strip thatimage.png В Windows: magick mogrify -strip thatimage.png

  7. Используя includegraphicsкоманду (package graphicx), поместите изображение *.png в незаметное место в файле CV TeX. Вы можете уменьшить его, чтобы сделать еще меньше. Вы также можете использовать пакет, textposчтобы поместить пустой белый прямоугольник (изображение) поверх вашего изображения *.png, чтобы ничего не было видно при печати. ​​Или, если CV содержит вашу фотографию или корпоративный логотип, вы можете поместить фотографию или логотип поверх *.png.

  8. Если вы не размещаете одно изображение поверх другого, то PDF может соответствовать PDF/X или PDF/A. Что касается PDF, отредактированный png — это просто изображение. Он не знает о тексте внутри. Если вы размещаете одно изображение поверх другого, то оно (обычно) не будет соответствовать PDF/X или PDF/A, если только вы не используете последнюю версию этих стандартов.

  9. Изображение *.png сохраняется с использованием методов PDF, а не "как png". Позже вы можете извлечь его с помощью командной строки pdfpages (Linux), но обязательно укажите вывод в формате png, а не в формате ppm по умолчанию.

  10. В GIMP откройте извлеченный png-файл и преобразуйте его в bmp, еще раз убедившись, что не записаны никакие кодировки или посторонние данные.

  11. Откройте извлеченный bmp в шестнадцатеричном редакторе и узрите: ваш текст там, скрывается среди байтов FF.

Общее название сокрытия информации на изображении — «стеганография». Вы можете прочитать об этом в Интернете. Это не очень хороший пример, поскольку исходные данные может увидеть любой, кто знает, что вы сделали, без необходимости расшифровки.

Я только что проверил свой собственный совет, и он работает. Однако, если вы хотите попробовать его, вы должны тщательно выбирать, какие опции вы используете (и не используете) на каждом шаге, иначе текст изображения будет искажен.

Связанный контент