LuaLaTex, pdfpages, zwischen mit Schriftart und ohne Schriftart unterscheiden?

LuaLaTex, pdfpages, zwischen mit Schriftart und ohne Schriftart unterscheiden?

Ich verwende nur LuaLaTeX, daher ist eine compilerspezifische Antwort in Ordnung.

Das pdfpagesPaket erlaubt es mir, eine oder mehrere PDF-Seiten in ein TeX-Dokument einzubinden. Konzentrieren wir uns auf die Situation, in der genau eine PDF-Seite (pro Befehl) eingebunden wird und es kein Problem damit gibt, dass die eingebundene Seite zu groß für die Dokumentabmessungen ist. Machen wir es einfach.

Bei der eingebundenen PDF-Seite handelt es sich vermutlich um ein Bild. Sie wurde nicht zwangsläufig von TeX generiert.

Ich möchte eine PDF-Seite, die nur Bildinhalte hat (also keine Schriftarten), von einer Seite unterscheiden, die nicht nur Bildinhalte hat (ggf. Text, mithilfe eingebetteter Schriftarten-Teilmengen).

Wenn das eingebundene PDF nur aus Bildern besteht, ist das in Ordnung. Wenn das eingebundene PDF jedoch eingebettete Schriftinhalte jeglicher Art enthält, wird es mit einer Fehlermeldung abgelehnt.

Auf der pdfpagesVerpackung selbst steht nichts darüber. graphicxAuch wenn es sich auf stützt, steht hierüber nichts.

Meine Frage lautet also: Gibt es einen einfachen LuaTeX-Code, der eine PDF-Seite überprüft und zwischen einer Seite ohne Schriftarten und einer Seite mit Schriftarten unterscheidet?

Warum ich das wissen möchte: Aus Lizenzgründen (die über den Umfang von Tex hinausgehen) kann ich Schriftglyphenbilder einbinden, aber keine Schriftglyphenvektoren. Obwohl ich die Dinge persönlich selbst überprüfen kann, habe ich andere Benutzer, die möglicherweise nicht so gründlich sind, und ich möchte eine Sperre einrichten.

Aus meiner Sicht gibt es drei mögliche Antworten: (1) Unrealistische Anforderung, also vergessen Sie es. (2) LuaTeX kann es, und für Lua-Gurus ist die Antwort offensichtlich, also hier die Antwort. (3) LuaTeX kann es, aber es ist sehr kompliziert.

Wenn (3), sagen Sie mir einfach Bescheid. Ich erwarte nicht, dass andere die Arbeit für mich erledigen.

Hinweis: Die Möglichkeit von Text ohne eingebettete Schriftart-Teilmenge können wir außer Acht lassen.

EDIT: Danke an DG und DC für den Vorschlag des pdffontsBefehlszeilenprogramms. Es ist Teil von Xpdf, das sowohl unter Linux als auch unter Windows funktioniert. Ich habe es bereits auf beiden Plattformen, habe es aber nie verwendet (oder wusste nicht einmal davon). Es ist relativ einfach, es pdffontsin das BASH/Batch-Skript einzubinden, das ich bereits als Teil eines größeren Workflows verwende.

Obwohl pdffontses nicht aus TeX heraus aufgerufen werden konnte, ohne es zur Liste der zugelassenen Shell-Escape-Befehle hinzuzufügen, ist das für meinen Zweck nicht notwendig. Anstatt dass TeX Programme aufruft, habe ich ein Skript, das verschiedene Programme aufruft und dann zum Abschluss lualatex für die vorverarbeiteten Ergebnisse aufruft.

Damit betrachte ich diese Frage als beantwortet.

WEITERE INFORMATIONEN: Aus diesem Grund habe ich gefragt. Wie wir wissen, kann LaTeX kein TIFF-Bild einbinden. In manchen Fällen benötigt der Endbenutzer jedoch TIFF statt JPEG. Beispiel:TIF-Bild zu LaTeX hinzufügen

Ein PDF speichert das „Bildformat“ nicht direkt. Das heißt, es gibt kein TIFF oder JPEG im PDF. Stattdessen gibt es ein XObject vom Typ „Bild“ mit einer Komprimierungsmethode. Was also tatsächlich erforderlich ist, ist entweder ein unkomprimierter Stream oder eine Flate-Dekodierung anstelle einer JPEG-Komprimierung. Außerdem muss das Bild möglicherweise CMYK sein, was PNG ausschließt. Schließlich muss das PDF für den kommerziellen Druck möglicherweise PDF/X-1a sein.

Dies ist möglich, indem ImageMagick und LuaLaTeX zusammen verwendet werden. Zuerst wird ImageMagick verwendet, um ein RGB-Bild gemäß einem Farbprofil (das möglicherweise eine Tintenbegrenzung hat) in ein CMYK-TIFF-Bild umzuwandeln. Dann wird das Profil entfernt und ImageMagick wandelt das TIFF in PDF um. Anschließend wird dieses PDF mithilfe in eine geeignete Dokumentklasse eingefügt pdfpages. Ich habe die geeignete Klasse (benutzerdefiniert) und das Ausgabe-PDF entspricht PDF/X-1a:2001, wie von Adobe Acrobat Pro überprüft.

Warum nicht einfach JPEG verwenden? Das funktioniert tatsächlich und erfordert weniger Aufwand. Aber wie gesagt, manche Endbenutzer bestehen aus ihren eigenen Gründen auf Flate-Dekodierung statt JPEG.

Warum ich nach Schriftarten gefragt habe: Wenn der Benutzer versucht, eine PDF-Datei mit Schriftarten und nicht nur mit einem Bild einzubinden, gibt es von TeX keine Einwände und die PDF-Datei sieht gut aus. ABER sie wird den PDF/X-1a-Test nicht bestehen, obwohl sie behauptet, PDF/X-1a zu sein. Es gibt (soweit ich weiß) keine kostenlose Software, die das Problem aufdecken kann.

Bei mir funktioniert das alles. Sieht gut aus. Aber ich wollte einen automatisierten Test hinzufügen, damit andere Benutzer (die die Anweisungen oft nicht lesen) informiert werden, wenn das enthaltene PDF falsch ist.

Antwort1

Eine Lösung ohne Kommandozeilentools unter Verwendung der LuaTeX-epdf-Bibliothek:

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

verwandte Informationen