Lualatex で外部 PDF ファイルのページ数を取得するにはどうすればいいですか?

Lualatex で外部 PDF ファイルのページ数を取得するにはどうすればいいですか?

このトピックに関して見つけられる答えをすべて試してみましたが、何もうまくいきません。

この MWE は正常に動作しますが、\pdfximagelualatex では動作しないため、pdflatex でのみ動作します。

\documentclass[12pt]{article}%
\usepackage{graphicx}
\begin{document}
\pdfximage{index.pdf}%
\the\pdflastximagepages
\end{document}

回答は外部PDFのページ数を取得する

動作しない場合は、上記のリンクからのコードを以下に示します。

\documentclass{article}

\newcommand*{\pdfnumberofpages}[1]{%
  \directlua{%
    local doc = epdf.open("\luatexluaescapestring{#1}")
    local pages
    if (doc) then
      pages = doc:getCatalog():getNumPages()
    else
      pages = 0
    end
    tex.write(pages)
  }%
}

\begin{document}
Number of pages: \pdfnumberofpages{index.pdf}
\end{document}

さて、lulatex foo.tex与える

(/usr/local/texlive/2019/texmf-dist/tex/latex/base/size10.clo)) (./foo.aux)
! Undefined control sequence.
\pdfnumberofpages ...open("\luatexluaescapestring
                                                  {#1}") local pages if (doc...

l.17 Number of pages: \pdfnumberofpages{test.pdf}

外部PDFファイルのPDFページ数を取得する正しい方法は何ですか?ルアラテックス?

Linux で TL 2019 を使用する。

答え1

pdftex プリミティブはなくなったわけではなく、名前が変更されただけです:\pdfximage\saveimageresource、 は\pdflastximagepagesです\lastsavedimageresourcepages。つまり:

\documentclass[12pt]{article}%
\usepackage{graphicx}
\begin{document}
\saveimageresource{index.pdf}%
\the\lastsavedimageresourcepages
\end{document}

luatex85または、パッケージをロードしてから pdftex プリミティブを使用して、ドキュメントが pdflatex と lualatex の両方でコンパイルされるようにすることもできます。

答え2

ライブラリepdf(poppler ベース) は、pdfeライブラリ (pplib ベース) に置き換えられました。 さらに、 を定義していないので\luatexluaescapestring、 を意味しているはずです\luaescapestring

\documentclass{article}

\newcommand*{\pdfnumberofpages}[1]{%
  \directlua{%
    local pages = 0
    local doc = pdfe.open("\luaescapestring{#1}")
    if doc then
      pages = pdfe.getnofpages(doc)
      pdfe.close(doc)
    end
    tex.write(pages)
  }%
}

\begin{document}
Number of pages: \pdfnumberofpages{index.pdf}
\end{document}

関連情報