LuaLaTex, páginas pdf, ¿distingue entre con fuente y sin fuente?

LuaLaTex, páginas pdf, ¿distingue entre con fuente y sin fuente?

Solo uso LuaLaTeX, por lo que una respuesta específica del compilador está bien.

El pdfpagespaquete me permite incluir una o más páginas PDF en un documento TeX. Centrémonos en la situación en la que se incluirá exactamente una página PDF (por comando) y no hay problema con que la página incluida sea demasiado grande para las dimensiones del documento. Mantenlo simple.

Se supone que la página PDF incluida es una imagen. No fue necesariamente generado por TeX.

Me gustaría distinguir una página PDF que solo tiene contenido de imagen (es decir, sin fuentes), de una página que no tiene solo contenido de imagen (puede tener algo de texto, usando subconjuntos de fuentes incrustados).

Si el PDF incluido es solo una imagen, está bien. Pero si el PDF incluido tiene contenido de fuente incrustado de cualquier tipo, debe rechazarse con un mensaje de error.

El pdfpagespaquete en sí no dice nada al respecto. Se basa en graphicxque tampoco dice nada al respecto.

Entonces mi pregunta es: ¿Existe algún código LuaTeX simple que pueda inspeccionar una página PDF y distinguir entre una página que no tiene fuentes y una página que sí las tiene?

Por qué quiero saberlo: por motivos de licencia (más allá del alcance de Tex), puedo incluir imágenes de glifos de fuentes, pero no vectores de glifos de fuentes. Aunque personalmente puedo inspeccionar las cosas por mí mismo, tengo otros usuarios que tal vez no sean tan minuciosos y quiero configurar un bloqueo.

A mi modo de ver, hay tres posibles respuestas: (1) Solicitud poco realista, así que olvídalo. (2) LuaTeX puede hacerlo, y la respuesta es obvia para los gurús de Lua, así que aquí está la respuesta. (3) LuaTeX puede hacerlo, pero es muy complicado.

Si (3) házmelo saber; No espero que otros hagan el trabajo por mí.

Nota: Podemos descartar la posibilidad de texto sin el subconjunto de fuentes incrustado.

EDITAR: Gracias a DG y DC por sugerir el pdffontsprograma de línea de comandos. Es parte de Xpdf, que funciona tanto en Linux como en Windows. Ya lo tengo en ambas plataformas, pero nunca lo había usado (ni siquiera conocía su existencia). Es una cuestión razonablemente sencilla de incluir pdffontsen el script BASH/Batch que ya estoy usando como parte de un flujo de trabajo más amplio.

Aunque pdffontsno se puede llamar desde TeX sin agregarlo a la lista de comandos de escape de shell aprobados, eso no es necesario para mi propósito. En lugar de que TeX llame a programas, tengo un script que llama a varios programas y luego termina llamando a lualatex en los resultados preprocesados.

Entonces, considero que esto está respondido.

MÁS INFORMACIÓN: He aquí por qué pregunté. Como sabemos, LaTeX no puede incluir una imagen tiff. Pero en algunos casos, el usuario final requiere tiff, en lugar de jpeg. Por ejemplo:Agregar imagen tif a LaTeX

Un PDF no almacena directamente el "formato de imagen". Es decir, no hay tiff ni jpeg dentro del PDF. En su lugar existe un XObject de tipo Imagen, con un método de compresión. Entonces, lo que realmente se requiere es una transmisión sin comprimir o una decodificación Flate, en lugar de compresión JPEG; y es posible que la imagen deba ser CMYK, lo que excluye png. Finalmente, es posible que el PDF deba ser PDF/X-1a, para impresión comercial.

Es posible hacer esto usando ImageMagick y LuaLaTeX juntos. En primer lugar, ImageMagick se utiliza para convertir una imagen RGB en una imagen tiff CMYK, según un perfil de color (que puede tener un límite de tinta). Luego, se elimina el perfil e ImageMagick convierte el tiff a PDF. Luego, ese PDF se incluye en una clase de documento adecuada, utilizando pdfpages. Tengo la clase adecuada (personalizada) y el PDF de salida cumple con PDF/X-1a:2001, según lo verificado por Adobe Acrobat Pro.

¿Por qué no utilizar simplemente jpeg? De hecho, eso funciona, con menos esfuerzo. Pero como dije, algunos usuarios finales insisten en decodificar Flate en lugar de jpeg, por sus propios motivos.

Ahora bien, ¿por qué pregunté acerca de las fuentes? Si el usuario intenta incluir un PDF con fuentes, en lugar de solo una imagen, TeX no se opone y el PDF se ve bien. PERO no pasará la prueba PDF/X-1a, aunque dice ser PDF/X-1a. No existe ningún software gratuito (que yo sepa) que pueda revelar el problema.

Tengo todo esto funcionando. Se ve bien. Pero quería agregar una prueba automatizada para que otros usuarios (que a menudo no leen las instrucciones) sean informados si el PDF incluido es incorrecto.

Respuesta1

Una solución sin herramientas de línea de comandos que utiliza la biblioteca epdf LuaTeX:

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

información relacionada