LuaLaTex, pdfpages, различают со шрифтом и без шрифта?

LuaLaTex, pdfpages, различают со шрифтом и без шрифта?

Я использую только LuaLaTeX, поэтому ответ, специфичный для компилятора, допустим.

Пакет pdfpagesпозволяет мне включать одну или несколько страниц PDF в документ TeX. Давайте сосредоточимся на ситуации, когда будет включена ровно одна страница PDF (на команду), и нет никаких проблем с тем, что включенная страница слишком велика для размеров документа. Сохраняйте простоту.

Предполагается, что вложенная страница PDF является изображением. Она не обязательно была сгенерирована TeX.

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

Если включенный PDF-файл содержит только изображение, то все в порядке. Но если включенный PDF-файл содержит встроенный шрифт любого типа, он будет отклонен с сообщением об ошибке.

В самом пакете pdfpagesоб этом ничего не говорится. Он опирается на graphicxто, что также ничего не говорит об этом.

Итак, мой вопрос: существует ли какой-либо простой код LuaTeX, который мог бы проверять страницу PDF и отличать страницу, на которой нет шрифтов, от страницы, на которой они есть?

Почему я хочу знать: По причинам лицензирования (выходящим за рамки Tex) я могу включать font-glyph-images, но не font-glyph-vectors. Хотя я лично могу проверять вещи сам, у меня есть другие пользователи, которые могут быть не столь тщательны, и я хочу установить блок.

На мой взгляд, есть три возможных ответа: (1) Нереалистичный запрос, так что забудьте об этом. (2) LuaTeX может это сделать, и ответ очевиден для гуру Lua, поэтому вот ответ. (3) LuaTeX может это сделать, но это очень сложно.

Если (3), просто дайте мне знать; я не ожидаю, что другие сделают работу за меня.

Примечание: Мы можем проигнорировать возможность наличия текста без встроенного подмножества шрифтов.

EDIT: Спасибо DG и DC за предложение pdffontsпрограммы командной строки. Она является частью Xpdf, которая работает как на Linux, так и на Windows. У меня она уже есть на обеих платформах, но я никогда ею не пользовался (или даже не знал о ней). Это довольно просто включить pdffontsв скрипт BASH/Batch, который я уже использую как часть более крупного рабочего процесса.

Хотя pdffontsего нельзя вызвать из TeX без добавления в список одобренных команд shell-escape, для моих целей это не нужно. Вместо того, чтобы вызывать программы TeX, у меня есть скрипт, который вызывает различные программы, а затем завершается вызовом lualatex для предварительно обработанных результатов.

Итак, я считаю, что на этот вопрос дан ответ.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Вот почему я спросил. Как мы знаем, LaTeX не может включать изображение tiff. Но в некоторых случаях и конечному пользователю требуется tiff, а не jpeg. Например:Добавить изображение tif в LaTeX

PDF напрямую не хранит «формат изображения». То есть внутри PDF нет tiff или jpeg. Вместо этого есть XObject типа Image с методом сжатия. Так что на самом деле требуется либо несжатый поток, либо декодирование Flate, а не сжатие JPEG; и изображение может быть CMYK, что исключает png. Наконец, PDF может быть PDF/X-1a для коммерческой печати.

Это возможно сделать, используя ImageMagick и LuaLaTeX вместе. Сначала ImageMagick используется для преобразования изображения RGB в изображение tiff CMYK в соответствии с цветовым профилем (который может иметь ограничение по чернилам). Затем профиль удаляется, и ImageMagick преобразует tiff в PDF. Затем этот PDF включается в подходящий класс документа с помощью pdfpages. У меня есть подходящий класс (пользовательский), и выходной PDF соответствует PDF/X-1a:2001, что подтверждено Adobe Acrobat Pro.

Почему бы просто не использовать jpeg? Это действительно работает, с меньшими усилиями. Но, как я уже сказал, некоторые конечные пользователи настаивают на декодировании Flate вместо jpeg по своим собственным причинам.

Теперь, почему я спросил о шрифтах: если пользователь попытается включить PDF со шрифтами, а не просто изображение, то TeX не будет возражать, и PDF будет выглядеть хорошо. НО он не пройдет тест PDF/X-1a, хотя и заявляет, что это PDF/X-1a. Нет свободного программного обеспечения (насколько мне известно), которое может выявить проблему.

У меня все это работает. Выглядит хорошо. Но я хотел добавить автоматизированный тест, чтобы другие пользователи (которые часто не читают инструкции) были проинформированы, если включенный PDF-файл неверен.

решение1

Решение без инструментов командной строки с использованием библиотеки LuaTeX epdf:

\documentclass{scrartcl}
\usepackage{luacode,pdfpages}
\begin{luacode*}
function check_for_fonts(name)
  local doc = epdf.open(name);
  if doc == nil then
    tex.sprint(luatexbase.catcodetables['latex-package'],
        "\\errmessage{Could not open " .. name .. "}{}{}\\@gobbletwo")
    return;
  else
    for pageno=1,doc:getNumPages() do
      local fonts = doc:getCatalog():getPage(pageno):getResourceDict():lookup("Font");
      if not fonts:isNull() and fonts:dictGetLength() ~= 0 then
        tex.sprint(luatexbase.catcodetables['latex-package'], '\\@firstoftwo')
        return;
      end
    end
  end
  tex.sprint(luatexbase.catcodetables['latex-package'], '\\@secondoftwo')
  return;
end
\end{luacode*}
\newcommand\PDFHasFontTF[1]{\directlua{check_for_fonts("\luaescapestring{#1}")}}
\begin{document}
\PDFHasFontTF{some_file.pdf}{%
  \errmessage{some_file.pdf contains fonts!}%
}{%
  \includepdf[pages=-]{some_file.pdf}%
}
\end{document}

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