summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/lpdf-pde.lua
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2019-12-24 21:10:09 +0100
committerContext Git Mirror Bot <phg@phi-gamma.net>2019-12-24 21:10:09 +0100
commitd40e81dea53da7bbc91df306814003f7720a167f (patch)
tree8aed8a716370cac0d04145a72405c1beed11b94d /tex/context/base/mkiv/lpdf-pde.lua
parentd1f4da02201fd33c139ee1756296e8df53580ff7 (diff)
downloadcontext-d40e81dea53da7bbc91df306814003f7720a167f.tar.gz
2019-12-24 19:54:00
Diffstat (limited to 'tex/context/base/mkiv/lpdf-pde.lua')
-rw-r--r--tex/context/base/mkiv/lpdf-pde.lua43
1 files changed, 27 insertions, 16 deletions
diff --git a/tex/context/base/mkiv/lpdf-pde.lua b/tex/context/base/mkiv/lpdf-pde.lua
index eaeea5df3..ec1064a0d 100644
--- a/tex/context/base/mkiv/lpdf-pde.lua
+++ b/tex/context/base/mkiv/lpdf-pde.lua
@@ -41,7 +41,7 @@ if not modules then modules = { } end modules ['lpdf-epd'] = {
-- PPCRYPT_PASS -1 encryption present, need non-empty password
-- PPCRYPT_FAIL -2 invalid or unsupported encryption (eg. undocumented in pdf spec)
-local setmetatable, rawset, rawget, type, next = setmetatable, rawset, rawget, type, next
+local setmetatable, type, next = setmetatable, type, next
local tostring, tonumber, unpack = tostring, tonumber, unpack
local char, byte, find = string.char, string.byte, string.find
local abs = math.abs
@@ -405,21 +405,25 @@ function resolvers.pages(document)
--
for pagenumber=1,nofpages do
local rawpagedata = rawpages[pagenumber]
- local pagereference = rawpagedata[3]
- local pageobject = rawpagedata[1]
- local pagedata = some_dictionary(pageobject,document)
- if pagedata and pageobject then
- pagedata.number = pagenumber
- pagedata.MediaBox = getbox(pageobject,"MediaBox")
- pagedata.CropBox = getbox(pageobject,"CropBox")
- pagedata.BleedBox = getbox(pageobject,"BleedBox")
- pagedata.ArtBox = getbox(pageobject,"ArtBox")
- pagedata.TrimBox = getbox(pageobject,"TrimBox")
- pages[pagenumber] = pagedata
- __xrefs__[pagedata] = pagereference
- __cache__[pagereference] = pagedata
+ if rawpagedata then
+ local pagereference = rawpagedata[3]
+ local pageobject = rawpagedata[1]
+ local pagedata = some_dictionary(pageobject,document)
+ if pagedata and pageobject then
+ pagedata.number = pagenumber
+ pagedata.MediaBox = getbox(pageobject,"MediaBox")
+ pagedata.CropBox = getbox(pageobject,"CropBox")
+ pagedata.BleedBox = getbox(pageobject,"BleedBox")
+ pagedata.ArtBox = getbox(pageobject,"ArtBox")
+ pagedata.TrimBox = getbox(pageobject,"TrimBox")
+ pages[pagenumber] = pagedata
+ __xrefs__[pagedata] = pagereference
+ __cache__[pagereference] = pagedata
+ else
+ report_epdf("missing pagedata for page %i, case %i",pagenumber,1)
+ end
else
- report_epdf("missing pagedata for page %i",i)
+ report_epdf("missing pagedata for page %i, case %i",pagenumber,2)
end
end
--
@@ -455,6 +459,8 @@ function lpdf_epdf.load(filename,userpassword,ownerpassword,fromstring)
if __data__ then
document = {
filename = filename,
+ nofcopied = 0,
+ copied = { },
__cache__ = { },
__xrefs__ = { },
__fonts__ = { },
@@ -481,6 +487,9 @@ function lpdf_epdf.load(filename,userpassword,ownerpassword,fromstring)
statistics.stoptiming(lpdf_epdf)
-- print(statistics.elapsedtime(lpdf_epdf))
end
+ if document then
+ nofloaded = nofloaded + 1
+ end
return document or nil
end
@@ -491,9 +500,9 @@ function lpdf_epdf.unload(filename)
if type(filename) == "string" then
local document = loaded[filename]
if document then
- -- pdfclose(document)
loaded[document] = nil
loaded[filename] = nil
+ pdfclose(document.__data__)
end
end
end
@@ -1017,6 +1026,8 @@ if images then do
local openpdf = lpdf_epdf.load
local closepdf = lpdf_epdf.unload
+ -- todo: keep track of already open files
+
local function newpdf(str,userpassword,ownerpassword)
return openpdf(str,userpassword,ownerpassword,true)
end