如何在 Lualatex 中获取外部 pdf 文件的页数?

如何在 Lualatex 中获取外部 pdf 文件的页数?

我尝试了关于该主题的所有我能找到的答案,但还是没有任何效果。

这个 MWE 可以正常工作,但仅限于 pdflatex,因为\pdfximage在 lualatex 中不起作用。

\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 原语并没有消失,它们只是被重命名了:\pdfximageis\saveimageresource\pdflastximagepagesis \lastsavedimageresourcepages。因此:

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

或者您可以加载luatex85包,然后使用 pdftex 原语,以便文档使用 pdflatex 和 lualatex 进行编译。

答案2

基于 poppler 的库epdf已被基于pdfepplib 的库取代。此外,您没有定义\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}

相关内容