mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
synchronize hightlights in non-/reflowing modes
and there is no need to OCR word if we can extract text from original page in reflowing mode thanks to the rect maps between normal page and reflowed page.
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
require "cache"
|
||||
require "ui/geometry"
|
||||
require "ui/screen"
|
||||
require "ui/reader/readerconfig"
|
||||
require "ui/data/koptoptions"
|
||||
require "document/koptinterface"
|
||||
@@ -10,8 +9,6 @@ PdfDocument = Document:new{
|
||||
-- muPDF manages its own additional cache
|
||||
mupdf_cache_size = 5 * 1024 * 1024,
|
||||
dc_null = DrawContext.new(),
|
||||
screen_size = Screen:getSize(),
|
||||
screen_dpi = Screen:getDPI(),
|
||||
options = KoptOptions,
|
||||
configurable = Configurable,
|
||||
koptinterface = KoptInterface,
|
||||
@@ -44,27 +41,27 @@ function PdfDocument:unlock(password)
|
||||
return self:_readMetadata()
|
||||
end
|
||||
|
||||
function PdfDocument:getTextBoxes(pageno)
|
||||
if self.configurable.text_wrap == 1 then
|
||||
return self.koptinterface:getReflewTextBoxes(self, pageno)
|
||||
else
|
||||
local page = self._document:openPage(pageno)
|
||||
local text = page:getPageText()
|
||||
page:close()
|
||||
if not text or #text == 0 then
|
||||
return self.koptinterface:getTextBoxes(self, pageno)
|
||||
else
|
||||
return text
|
||||
end
|
||||
end
|
||||
function PdfDocument:getPageTextBoxes(pageno)
|
||||
local page = self._document:openPage(pageno)
|
||||
local text = page:getPageText()
|
||||
page:close()
|
||||
return text
|
||||
end
|
||||
|
||||
function PdfDocument:getWordFromPosition(spos)
|
||||
return self.koptinterface:getWordFromPosition(self, spos)
|
||||
end
|
||||
|
||||
function PdfDocument:getTextFromPositions(spos0, spos1)
|
||||
return self.koptinterface:getTextFromPositions(self, spos0, spos1)
|
||||
end
|
||||
|
||||
function PdfDocument:getPageBoxesFromPositions(pageno, ppos0, ppos1)
|
||||
return self.koptinterface:getPageBoxesFromPositions(self, pageno, ppos0, ppos1)
|
||||
end
|
||||
|
||||
function PdfDocument:getOCRWord(pageno, rect)
|
||||
if self.configurable.text_wrap == 1 then
|
||||
return self.koptinterface:getReflewOCRWord(self, pageno, rect)
|
||||
else
|
||||
return self.koptinterface:getOCRWord(self, pageno, rect)
|
||||
end
|
||||
return self.koptinterface:getOCRWord(self, pageno, rect)
|
||||
end
|
||||
|
||||
function PdfDocument:getUsedBBox(pageno)
|
||||
@@ -91,48 +88,23 @@ function PdfDocument:getUsedBBox(pageno)
|
||||
end
|
||||
|
||||
function PdfDocument:getPageBBox(pageno)
|
||||
if self.configurable.text_wrap ~= 1 and self.configurable.trim_page == 1 then
|
||||
-- auto bbox finding
|
||||
return self.koptinterface:getAutoBBox(self, pageno)
|
||||
elseif self.configurable.text_wrap ~= 1 and self.configurable.trim_page == 2 then
|
||||
-- semi-auto bbox finding
|
||||
return self.koptinterface:getSemiAutoBBox(self, pageno)
|
||||
else
|
||||
-- get saved manual bbox
|
||||
return Document.getPageBBox(self, pageno)
|
||||
end
|
||||
return self.koptinterface:getPageBBox(self, pageno)
|
||||
end
|
||||
|
||||
function PdfDocument:getPageDimensions(pageno, zoom, rotation)
|
||||
if self.configurable.text_wrap == 1 then
|
||||
return self.koptinterface:getPageDimensions(self, pageno, zoom, rotation)
|
||||
else
|
||||
return Document.getPageDimensions(self, pageno, zoom, rotation)
|
||||
end
|
||||
return self.koptinterface:getPageDimensions(self, pageno, zoom, rotation)
|
||||
end
|
||||
|
||||
function PdfDocument:renderPage(pageno, rect, zoom, rotation, gamma, render_mode)
|
||||
if self.configurable.text_wrap == 1 then
|
||||
return self.koptinterface:renderPage(self, pageno, rect, zoom, rotation, render_mode)
|
||||
else
|
||||
return Document.renderPage(self, pageno, rect, zoom, rotation, gamma, render_mode)
|
||||
end
|
||||
return self.koptinterface:renderPage(self, pageno, rect, zoom, rotation, gamma, render_mode)
|
||||
end
|
||||
|
||||
function PdfDocument:hintPage(pageno, zoom, rotation, gamma, render_mode)
|
||||
if self.configurable.text_wrap == 1 then
|
||||
self.koptinterface:hintPage(self, pageno, zoom, rotation, gamma, render_mode)
|
||||
else
|
||||
Document.hintPage(self, pageno, zoom, rotation, gamma, render_mode)
|
||||
end
|
||||
return self.koptinterface:hintPage(self, pageno, zoom, rotation, gamma, render_mode)
|
||||
end
|
||||
|
||||
function PdfDocument:drawPage(target, x, y, rect, pageno, zoom, rotation, gamma, render_mode)
|
||||
if self.configurable.text_wrap == 1 then
|
||||
self.koptinterface:drawPage(self, target, x, y, rect, pageno, zoom, rotation, render_mode)
|
||||
else
|
||||
Document.drawPage(self, target, x, y, rect, pageno, zoom, rotation, gamma, render_mode)
|
||||
end
|
||||
return self.koptinterface:drawPage(self, target, x, y, rect, pageno, zoom, rotation, gamma, render_mode)
|
||||
end
|
||||
|
||||
DocumentRegistry:addProvider("pdf", "application/pdf", PdfDocument)
|
||||
|
||||
Reference in New Issue
Block a user