Pdf info with Lua/Ctx API
Hello, is there a way how to get the following info from a PDF file via Lua/Ctx API?: - first: number of pages of the PDF, - next: for each page: get width, height and orientation (portrait/landscape) or rotation (+90,+ 180, +270 or so) of i-th page. Best regards, Lukas -- Ing. Lukáš Procházka | mailto:LPr@pontex.cz Pontex s. r. o. | mailto:pontex@pontex.cz | http://www.pontex.cz | IDDS:nrpt3sn Bezová 1658 147 14 Praha 4 Mob.: +420 702 033 396
On 8/14/2017 1:08 PM, Procházka Lukáš Ing. wrote:
Hello,
is there a way how to get the following info from a PDF file via Lua/Ctx API?:
- first: number of pages of the PDF,
- next: for each page: get width, height and orientation (portrait/landscape) or rotation (+90,+ 180, +270 or so) of i-th page.
this probably has come up several times now, anyway \getfiguredimensions[test.pdf] \dorecurse {\noffigurepages} { \getfiguredimensions[test.pdf][page=#1] \figurenaturalwidth ,\figurenaturalheight,\figureorientation,\figurerotation\par } in lua you can either use the img library (see luatex manual) or context helpers local data = figures.push("foo.pdf") figures.identify() figures.check() figures.pop() inspect(data) i'll add: function figures.getinfo(name,page) if type(name) == "string" then name = { name = name, page = page } end if name.name then local data = figures.push(name) figures.identify() figures.check() figures.pop() return data end end so that one can do local n = "ms.pdf" local d = figures.getinfo(n) if d then for i=1,d.used.pages do local p = figures.getinfo(n,i) if p then local u = p.used print(u.width,u.height,u.orientation) end end end etc etc -- ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Hello Hans,
that's exactly what I've been looking for!
(And yes, I've asked one or more times, with a solution that seemed to me a bit "forced" or "non-clear", so the latest solution looks perfectly!)
Best regards,
Lukas
On Mon, 14 Aug 2017 16:55:09 +0200, Hans Hagen
On 8/14/2017 1:08 PM, Procházka Lukáš Ing. wrote:
Hello,
is there a way how to get the following info from a PDF file via Lua/Ctx API?:
- first: number of pages of the PDF,
- next: for each page: get width, height and orientation (portrait/landscape) or rotation (+90,+ 180, +270 or so) of i-th page.
this probably has come up several times now, anyway
\getfiguredimensions[test.pdf] \dorecurse {\noffigurepages} { \getfiguredimensions[test.pdf][page=#1] \figurenaturalwidth ,\figurenaturalheight,\figureorientation,\figurerotation\par }
in lua you can either use the img library (see luatex manual) or context helpers
local data = figures.push("foo.pdf") figures.identify() figures.check() figures.pop() inspect(data)
i'll add:
function figures.getinfo(name,page) if type(name) == "string" then name = { name = name, page = page } end if name.name then local data = figures.push(name) figures.identify() figures.check() figures.pop() return data end end
so that one can do
local n = "ms.pdf" local d = figures.getinfo(n)
if d then for i=1,d.used.pages do local p = figures.getinfo(n,i) if p then local u = p.used print(u.width,u.height,u.orientation) end end end
etc etc
-- Ing. Lukáš Procházka | mailto:LPr@pontex.cz Pontex s. r. o. | mailto:pontex@pontex.cz | http://www.pontex.cz | IDDS:nrpt3sn Bezová 1658 147 14 Praha 4 Mob.: +420 702 033 396
Hello Hans,
thank you for implementation 'figures.getinfo()'; two points:
1. Code:
----
\startluacode
local n = "x:/Users/MMi/Akce/I-6_Krusovice.DSP-ZDS/Admin/Jednani/2017-07-07-SU-Rakovnik/ZJ.pdf"
local d = figures.getinfo(n)
...
----
prints (probably to-string converted) resulting table:
"
close source > level 3, order 8, name 'd://Lukas/ConTeXt/Styles/PxLetter.sty'
table={
["request"]={
["arguments"]=false,
["cache"]=false,
["color"]=false,
["controls"]=false,
["conversion"]=false,
["display"]=false,
["format"]=false,
["height"]=false,
["label"]=false,
["mask"]=false,
["name"]="x:/Users/MMi/Akce/I-6_Krusovice.DSP-ZDS/Admin/Jednani/2017-07-07-SU-Rakovnik/ZJ.pdf",
...
},
["status"]={
...
},
["used"]={
["colordepth"]=0,
["depth"]=0,
["format"]="pdf",
["fullname"]="x:/Users/MMi/Akce/I-6_Krusovice.DSP-ZDS/Admin/Jednani/2017-07-07-SU-Rakovnik/ZJ.pdf",
["height"]=55380991,
...
},
}
"
- Is it intend? Or residual debugging status?
2. Is there a Ctx built-in converter which would convert width and height (e.g. here: ["height"]=55380991) from "height units" to milimeters?
Best regards,
Lukas
On Mon, 14 Aug 2017 16:55:09 +0200, Hans Hagen
On 8/14/2017 1:08 PM, Procházka Lukáš Ing. wrote:
Hello,
is there a way how to get the following info from a PDF file via Lua/Ctx API?:
- first: number of pages of the PDF,
- next: for each page: get width, height and orientation (portrait/landscape) or rotation (+90,+ 180, +270 or so) of i-th page.
this probably has come up several times now, anyway
\getfiguredimensions[test.pdf] \dorecurse {\noffigurepages} { \getfiguredimensions[test.pdf][page=#1] \figurenaturalwidth ,\figurenaturalheight,\figureorientation,\figurerotation\par }
in lua you can either use the img library (see luatex manual) or context helpers
local data = figures.push("foo.pdf") figures.identify() figures.check() figures.pop() inspect(data)
i'll add:
function figures.getinfo(name,page) if type(name) == "string" then name = { name = name, page = page } end if name.name then local data = figures.push(name) figures.identify() figures.check() figures.pop() return data end end
so that one can do
local n = "ms.pdf" local d = figures.getinfo(n)
if d then for i=1,d.used.pages do local p = figures.getinfo(n,i) if p then local u = p.used print(u.width,u.height,u.orientation) end end end
etc etc
-- Ing. Lukáš Procházka | mailto:LPr@pontex.cz Pontex s. r. o. | mailto:pontex@pontex.cz | http://www.pontex.cz | IDDS:nrpt3sn Bezová 1658 147 14 Praha 4 Mob.: +420 702 033 396
Procházka Lukáš Ing. mailto:LPr@pontex.cz 16. August 2017 um 12:11 Hello Hans,
thank you for implementation 'figures.getinfo()'; two points:
1. Code:
---- \startluacode
local n = "x:/Users/MMi/Akce/I-6_Krusovice.DSP-ZDS/Admin/Jednani/2017-07-07-SU-Rakovnik/ZJ.pdf"
local d = figures.getinfo(n) ... ----
prints (probably to-string converted) resulting table:
" close source > level 3, order 8, name 'd://Lukas/ConTeXt/Styles/PxLetter.sty' table={ ["request"]={ ["arguments"]=false, ["cache"]=false, ["color"]=false, ["controls"]=false, ["conversion"]=false, ["display"]=false, ["format"]=false, ["height"]=false, ["label"]=false, ["mask"]=false,
["name"]="x:/Users/MMi/Akce/I-6_Krusovice.DSP-ZDS/Admin/Jednani/2017-07-07-SU-Rakovnik/ZJ.pdf",
... }, ["status"]={ ... }, ["used"]={ ["colordepth"]=0, ["depth"]=0, ["format"]="pdf",
["fullname"]="x:/Users/MMi/Akce/I-6_Krusovice.DSP-ZDS/Admin/Jednani/2017-07-07-SU-Rakovnik/ZJ.pdf",
["height"]=55380991, ... }, } "
- Is it intend? Or residual debugging status?
2. Is there a Ctx built-in converter which would convert width and height (e.g. here: ["height"]=55380991) from "height units" to milimeters? \starttext
\startluacode local length = "55380991" context(number.topoints(length)) context.par() context(number.todimen(length,"pt")) \stopluacode \stoptext Wolfgang
participants (3)
-
Hans Hagen
-
Procházka Lukáš Ing.
-
Wolfgang Schuster