
Внедрение файла с помощью 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.
В GIMP создайте новое изображение размером 100x100 пикселей. Оно будет иметь больше байт, чем простой текст вашего резюме. Если нет, используйте изображение большего размера.
Заполните изображение белым цветом. Экспортируйте его как *.bmp (битовое изображение Windows), даже если у вас не Windows. Не используйте никакую кодировку и не сохраняйте цветовую информацию или что-либо еще.
Откройте простой текст вашего резюме. Поставьте несколько пробелов перед началом и после конца. Скопируйте все в буфер обмена.
Откройте изображение *.bmp в шестнадцатеричном редакторе. После его пролога вы увидите многочисленные байты FF, означающие белый цвет. Где-то там перезапишите кучу FF вашим вставленным текстом. Сохраните.
Вы должны иметь возможность открыть отредактированный *,bmp в GIMP, где текст будет выглядеть как случайные темные линии. Экспортируйте его как PNG, используя нулевое сжатие и без сохранения какой-либо информации (без Exif и т. д.).
Использование ImageMagick: mogrify -strip thatimage.png В Windows: magick mogrify -strip thatimage.png
Используя
includegraphics
команду (packagegraphicx
), поместите изображение *.png в незаметное место в файле CV TeX. Вы можете уменьшить его, чтобы сделать еще меньше. Вы также можете использовать пакет,textpos
чтобы поместить пустой белый прямоугольник (изображение) поверх вашего изображения *.png, чтобы ничего не было видно при печати. Или, если CV содержит вашу фотографию или корпоративный логотип, вы можете поместить фотографию или логотип поверх *.png.Если вы не размещаете одно изображение поверх другого, то PDF может соответствовать PDF/X или PDF/A. Что касается PDF, отредактированный png — это просто изображение. Он не знает о тексте внутри. Если вы размещаете одно изображение поверх другого, то оно (обычно) не будет соответствовать PDF/X или PDF/A, если только вы не используете последнюю версию этих стандартов.
Изображение *.png сохраняется с использованием методов PDF, а не "как png". Позже вы можете извлечь его с помощью командной строки pdfpages (Linux), но обязательно укажите вывод в формате png, а не в формате ppm по умолчанию.
В GIMP откройте извлеченный png-файл и преобразуйте его в bmp, еще раз убедившись, что не записаны никакие кодировки или посторонние данные.
Откройте извлеченный bmp в шестнадцатеричном редакторе и узрите: ваш текст там, скрывается среди байтов FF.
Общее название сокрытия информации на изображении — «стеганография». Вы можете прочитать об этом в Интернете. Это не очень хороший пример, поскольку исходные данные может увидеть любой, кто знает, что вы сделали, без необходимости расшифровки.
Я только что проверил свой собственный совет, и он работает. Однако, если вы хотите попробовать его, вы должны тщательно выбирать, какие опции вы используете (и не используете) на каждом шаге, иначе текст изображения будет искажен.