mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
55 lines
1.3 KiB
Lua
55 lines
1.3 KiB
Lua
require "unireader"
|
|
require "inputbox"
|
|
|
|
PDFReader = UniReader:new{}
|
|
|
|
-- open a PDF file and its settings store
|
|
function PDFReader:open(filename)
|
|
-- muPDF manages its own cache, set second parameter
|
|
-- to the maximum size you want it to grow
|
|
local ok
|
|
ok, self.doc = pcall(pdf.openDocument, filename, self.cache_document_size)
|
|
if not ok then
|
|
return false, self.doc -- will contain error message
|
|
end
|
|
if self.doc:needsPassword() then
|
|
local password = InputBox:input(G_height-100, 100, "Pass:")
|
|
if not password or not self.doc:authenticatePassword(password) then
|
|
self.doc:close()
|
|
self.doc = nil
|
|
return false, "wrong or missing password"
|
|
end
|
|
-- password wrong or not entered
|
|
end
|
|
local ok, err = pcall(self.doc.getPages, self.doc)
|
|
if not ok then
|
|
-- for PDFs, they might trigger errors later when accessing page tree
|
|
self.doc:close()
|
|
self.doc = nil
|
|
return false, "damaged page tree"
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------[ highlight support ]----------
|
|
|
|
function PDFReader:rectCoordTransform(x0, y0, x1, y1)
|
|
return
|
|
x0 * self.globalzoom,
|
|
y1 * self.globalzoom - self.offset_y,
|
|
x1 - x0,
|
|
y1 - y0
|
|
end
|
|
|
|
function PDFReader:getText(pageno)
|
|
local ok, page = pcall(self.doc.openPage, self.doc, pageno)
|
|
if not ok then
|
|
-- TODO: error handling
|
|
return nil
|
|
end
|
|
local text = page:getPageText()
|
|
print(dump(text))
|
|
page:close()
|
|
return text
|
|
end
|