![如何在 Lualatex 中获取外部 pdf 文件的页数?](https://linux22.com/image/405284/%E5%A6%82%E4%BD%95%E5%9C%A8%20Lualatex%20%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%A4%96%E9%83%A8%20pdf%20%E6%96%87%E4%BB%B6%E7%9A%84%E9%A1%B5%E6%95%B0%EF%BC%9F.png)
我尝试了关于该主题的所有我能找到的答案,但还是没有任何效果。
这个 MWE 可以正常工作,但仅限于 pdflatex,因为\pdfximage
在 lualatex 中不起作用。
\documentclass[12pt]{article}%
\usepackage{graphicx}
\begin{document}
\pdfximage{index.pdf}%
\the\pdflastximagepages
\end{document}
不起作用,这是来自上述链接的代码:
\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
is\saveimageresource
和\pdflastximagepages
is \lastsavedimageresourcepages
。因此:
\documentclass[12pt]{article}%
\usepackage{graphicx}
\begin{document}
\saveimageresource{index.pdf}%
\the\lastsavedimageresourcepages
\end{document}
或者您可以加载luatex85
包,然后使用 pdftex 原语,以便文档使用 pdflatex 和 lualatex 进行编译。
答案2
基于 poppler 的库epdf
已被基于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}