LuaLaTex, pdfpages, distingue entre com fonte e sem fonte?

LuaLaTex, pdfpages, distingue entre com fonte e sem fonte?

Eu uso apenas LuaLaTeX, então uma resposta específica do compilador está OK.

O pdfpagespacote me permite incluir uma ou mais páginas PDF em um documento TeX. Vamos nos concentrar na situação em que exatamente uma página PDF será incluída (por comando) e não há problema com a página incluída ser muito grande para as dimensões do documento. Mantenha simples.

A página PDF incluída deve ser uma imagem. Não foi necessariamente gerado pelo TeX.

Gostaria de distinguir uma página PDF que possui apenas conteúdo de imagem (ou seja, sem fontes), de uma página que não possui apenas conteúdo de imagem (pode ter algum texto, usando subconjuntos de fontes incorporados).

Se o PDF incluído for apenas imagem, OK. Mas se o PDF incluído tiver conteúdo de fonte incorporado de qualquer tipo, ele será rejeitado com uma mensagem de erro.

O pdfpagespacote em si não diz nada sobre isso. Baseia-se em graphicxque também não diz nada sobre isso.

Então, minha pergunta é: existe algum código LuaTeX simples que inspecione uma página PDF e distinga entre uma página que não possui fontes e uma página que possui?

Por que quero saber: Por motivos de licenciamento (além do escopo do Tex), posso incluir imagens de glifos de fontes, mas não vetores de glifos de fontes. Embora eu pessoalmente possa inspecionar as coisas, tenho outros usuários que podem não ser tão minuciosos e quero configurar um bloqueio.

A meu ver, há três respostas possíveis: (1) Pedido irrealista, então esqueça. (2) LuaTeX pode fazer isso, e a resposta é óbvia para os gurus de Lua, então aqui está a resposta. (3) LuaTeX pode fazer isso, mas é muito complicado.

Se (3) me avise; Não espero que outros façam o trabalho por mim.

Nota: Podemos desconsiderar a possibilidade de texto sem o subconjunto de fontes incorporado.

EDIT: Obrigado a DG e DC por sugerir o pdffontsprograma de linha de comando. Faz parte do Xpdf, que funciona tanto em Linux quanto em Windows. Já tenho nas duas plataformas, mas nunca tinha usado (nem sabia disso). É uma questão razoavelmente simples de incluir pdffontsno script BASH/Batch que já estou usando como parte de um fluxo de trabalho maior.

Embora pdffontsnão possa ser chamado de dentro do TeX sem adicioná-lo à lista de comandos de escape de shell aprovados, isso não é necessário para o meu propósito. Em vez de chamar programas TeX, tenho um script que chama vários programas e termina chamando lualatex nos resultados pré-processados.

Então, considero que isso está respondido.

MAIS INFORMAÇÕES: Eis por que perguntei. Como sabemos, o LaTeX não pode incluir uma imagem tiff. Mas, em alguns casos, o usuário final exige tiff, em vez de jpeg. Por exemplo:Adicionar imagem tif ao LaTeX

Um PDF não armazena diretamente o “formato de imagem”. Ou seja, não há tiff ou jpeg dentro do PDF. Em vez disso existe um XObject do tipo Imagem, com método de compressão. Portanto, o que é realmente necessário é um fluxo descompactado ou decodificação Flate, em vez de compactação JPEG; e a imagem pode precisar ser CMYK, o que exclui png. Finalmente, o PDF pode precisar ser PDF/X-1a, para impressão comercial.

É possível fazer isso usando ImageMagick e LuaLaTeX juntos. Primeiro, o ImageMagick é usado para converter uma imagem RGB em uma imagem tiff CMYK, de acordo com um perfil de cores (que pode ter um limite de tinta). Em seguida, o perfil é removido e o ImageMagick converte o tiff em PDF. Então, esse PDF é incluído em uma classe de documento adequada, usando pdfpages. Eu tenho a classe adequada (customizada) e o PDF de saída atende PDF/X-1a:2001, conforme verificado pelo Adobe Acrobat Pro.

Por que não simplesmente usar jpeg? Isso realmente funciona, com menos esforço. Mas, como eu disse, alguns usuários finais insistem na decodificação Flate em vez de JPEG, por seus próprios motivos.

Agora, por que perguntei sobre fontes: se o usuário tentar incluir um PDF com fontes, em vez de apenas uma imagem, não haverá objeção do TeX e o PDF terá uma boa aparência. MAS ele falhará no teste PDF/X-1a, mesmo que afirme ser PDF/X-1a. Não existe software livre (que eu saiba) que possa revelar o problema.

Eu tenho tudo isso funcionando. Parece bom. Mas eu queria adicionar um teste automatizado para que outros usuários (que muitas vezes não leem as instruções) sejam informados se o PDF incluído estiver incorreto.

Responder1

Uma solução sem ferramentas de linha de comando usando a biblioteca 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}

informação relacionada