[Dev-luatex] pdfe error / question

Marcel Krüger tex at 2krueger.de
Fri Mar 22 19:48:46 CET 2019


 ---- On Fri, 22 Mar 2019 18:39:17 +0100 Ulrike Fischer <news3 at nililand.de> wrote ----
 > According to the documentation pdfe.status can be use to check if a
 > pdf has been opened. But when I try 
 > 
 > \directlua{
 >  dict=pdfe.open("testinput.pdf")
 >  pdfe.status(dict)}
 > \bye
 > 
 > I get an error 
 > (./test-utf8.tex[\directlua]:1: attempt to call a nil value (field
 > 'status')
 > 

The function actually exists but it is called `getstatus` instead of `status`.

 > 
 > And how I'm supposed to extract an object reference from a
 > dictionary? There are commands getinteger, getstring but nothing
 > that looks like a "getreference".
 > 

Normally you do need to do this, just use `getdictionary` etc. and references get resolved automatically.
If you really need the reference, use getfromdictionary. In contrast to the documentation, this function also
accepts a key instead of an index. (If called with a key, the key is not returned.)
If the key points to a reference, the function returns the type 10, the reference object and the reference number
(This is also different than the documentation, which suggests that it only returns the number.)
Also getfromreference does not only return the referenced object, but also it's type.

So you get

local file = pdfe.open'main.pdf'
print('Status: ' .. pdfe.getstatus(file))
local catalog = pdfe.getcatalog(file)
local t, ref, refnum = pdfe.getfromdictionary(catalog, 'Names')
if t ~= 10 then
  error[[No reference found]]
end
print(refnum, pdfe.getfromreference(ref))
-- An easier way to get the same dictionary:
print(catalog.Names)
pdfe.close(file)

Resulting in the output (for some example main.pdf file):

Status: 0
94    8    <pdfe.dictionary 0x2d86f11>    1
<pdfe.dictionary 0x2d86f11>

meaning the file is not encrypted(0), the reference it to object number 94 which is a dictionary(8) containing 1 entry.

Do not try to print the reference object, the tostring helper is broken so it leads to a fatal Lua error. (It uses `%i`, but it would have to use `%d` to work.)


Best regards
Marcel Krüger

 > 
 > -- 
 > Ulrike Fischer 
 > http://www.troubleshooting-tex.de/
 > 
 > _______________________________________________
 > dev-luatex mailing list
 > dev-luatex at ntg.nl
 > https://mailman.ntg.nl/mailman/listinfo/dev-luatex
 >




More information about the dev-luatex mailing list