Форматирование текста под разбитый экран Kindle

 
Libroom Forum IndexAmazon Kindle
AuthorMessage

6.6.2.
Новенький участник форума

Новенький участник форума



Joined: 03 Mar 2014
Posts: 8


Location: Ukraine

Posted: 03.03.2014 22:45    

После неудачной прогулки в метро, треть нижней части экрана моего Kindle 4 зависло (стеклобой, это ясно)...
Хочу читать книги на том экране, что осталось. Вот только проблема - при конвертировании книги из DOC в PDF конечный файл (который на компьютере отображается правильно) на книжке получает отступ сверху примерно на 8 строчек (при 20-м шрифте). Если в самом DOC не обрезаю нижние края, то конвертируется нормально - книга начинаеться с самого верхнего края Kindle 4. Облазил Calibre, настроить так и не получилось.
Суть в том, чтобы файл с форматом бумаги А5 был заполнен текстом на 1/3, грубо говоря. Может есть народные умельцы, кто сможет посоветовать что-то толковое...
Надеюсь на вас и вашу помощь, потому денег на покупку экрана или книги в ближайшее время не предвидится...
 
View user's profile ^

Aardvark
Член клуба The eBook

Член клуба The eBook



Joined: 12 Nov 2007
Posts: 2058


Location: Москва

Posted: 03.03.2014 23:30    

Зачем так извращаться, когда на авито за тыщу можно купить какой-никакой eink, с которым продержаться до поступления денег.
_________________
Onyx Boox Max Carta, Kobo Aura One
 
View user's profile ^

6.6.2.
Новенький участник форума

Новенький участник форума



Joined: 03 Mar 2014
Posts: 8


Location: Ukraine

Posted: 04.03.2014 10:43    

Понимаю что это "извращение", но все же хочется услышать хоть какие-нибудь советы...
 
View user's profile ^

kaznelson
Член клуба The eBook

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4642


Location: Москва

Posted: 04.03.2014 12:09    

6.6.2. wrote:
Суть в том, чтобы файл с форматом бумаги А5 был заполнен текстом на 1/3, грубо говоря. Может есть народные умельцы, кто сможет посоветовать что-то толковое...

Старая-недобрая фишка Kindle - центрирование PDF не по размеру страницы, а по содержимому (с отбрасыванием белых полей).
В Word'е можно зайти в меню "Границы и заливка", поставить сверху/снизу светло-серые линии для страницы (с нулевыми отступами), в "Разметке страницы" поставить нижнее поле 1-2-3 или сколько там у Вас разбито сантиметров - и уже в таком виде экспортировать в PDF прямо из Word'а (если он не ниже 2007; не забыть про чекбокс "Минимальный размер")...

В картинках :







Ну а актуальные конвертеры FB2 -> PDF давно умеют делать подпорки для Kindle...
_________________
Kobo Glo HD, Kobo Aura H2O, Kindle Paperwhite 2


Last edited by kaznelson on 04.03.2014 12:58; edited 2 times in total
 
View user's profile ^

6.6.2.
Новенький участник форума

Новенький участник форума



Joined: 03 Mar 2014
Posts: 8


Location: Ukraine

Posted: 04.03.2014 12:46    

Спасибо. Пробую и ковыряю...
 
View user's profile ^

НуПогоди
Член клуба The eBook

Член клуба The eBook



Joined: 11 Oct 2011
Posts: 388


Location: Jena

Posted: 04.03.2014 12:55    

Если киндл с джейлбрейком, то можно вместо хитроформатированных пдф в родной читалке попросту открыть исходный doc/fb2/epub в заботливо предустановленном КулРидере или Libreratore и подогнать поля страницы под размер целого экрана. Если размера доступных полей для этого не хватит, то в том же Librerator должна была оставаться функция пролистывания текста на N-пикселов (делалось, кажется, для картинок) -- можно использовать именно её, подменив в тексте Lua-скрипта дефолтное значение N на высоту небитого экрана (так как эта часть была написана на Lua, тo никакой компилляции и/или кросскомпилляции не понадобится)
ПС. В Libreratore же можно открыть и прочесть простой, без хитрого форматирования пдф -- пролистать его панорамным методом, однократно подогнав зум и шаг панорамирования под целый экран.
_________________
Rooted: Kindle 3.0.3, Tolino Shine 1.1.1, THL T7
 
View user's profile ^

6.6.2.
Новенький участник форума

Новенький участник форума



Joined: 03 Mar 2014
Posts: 8


Location: Ukraine

Posted: 04.03.2014 13:02    

НуПогоди wrote:
Если киндл с джейлбрейком, то можно вместо хитроформатированных пдф в родной читалке попросту открыть исходный doc/fb2/epub в заботливо предустановленном КулРидере или Libreratore и подогнать поля страницы под размер целого экрана.

Не знал что там есть данная функция, не взламывал поскольку, и так вполне комфортно было читать. Ушел взламывать, поскольку это, как видимо, наиболее простой способ...
P.S. Навскидку попробую связку Jailbreak, Mobileread Kindlet Kit + Cool Reader 3.
 
View user's profile ^

Pooh_
Заслуженный участник форума

Заслуженный участник форума



Joined: 03 Apr 2012
Posts: 285



Posted: 04.03.2014 13:19    

kaznelson wrote:
В Word'е можно зайти в меню "Границы и заливка", поставить сверху/снизу светло-серые линии для страницы (с нулевыми отступами), в "Разметке страницы" поставить нижнее поле 1-2-3 или сколько там у Вас разбито сантиметров - и уже в таком виде экспортировать в PDF прямо из Word'а (если он не ниже 2007; не забыть про чекбокс "Минимальный размер")...

Не совсем понял, зачем серые линии и "Границы и заливка".. Кажется, проще пойти в "Параметры страницы" и установить там поля сверху, снизу и т.д. по своему вкусу. Потом напечатать через PDF-принтер или сохранить в PDF, если Ворд 2007 и позже.
_________________
Onyx i62M Albatros HD, Onyx T76ML Cleopatra
 
View user's profile ^

kaznelson
Член клуба The eBook

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4642


Location: Москва

Posted: 04.03.2014 13:26    

Pooh_ wrote:
Не совсем понял, зачем серые линии и "Границы и заливка"..

Применительно к обсуждаемому разбитому экрану - перечитайте ещё раз... внимательно:

kaznelson wrote:
Старая-недобрая фишка Kindle - центрирование PDF не по размеру страницы, а по содержимому (с отбрасыванием белых полей).

_________________
Kobo Glo HD, Kobo Aura H2O, Kindle Paperwhite 2
 
View user's profile ^

Pooh_
Заслуженный участник форума

Заслуженный участник форума



Joined: 03 Apr 2012
Posts: 285



Posted: 04.03.2014 13:30    

kaznelson wrote:
Старая-недобрая фишка Kindle - центрирование PDF не по размеру страницы, а по содержимому (с отбрасыванием белых полей).

А, прошу прощения. Не знал про это и не обратил внимания.
_________________
Onyx i62M Albatros HD, Onyx T76ML Cleopatra
 
View user's profile ^

6.6.2.
Новенький участник форума

Новенький участник форума



Joined: 03 Mar 2014
Posts: 8


Location: Ukraine

Posted: 04.03.2014 14:05    

Поставил кулридер, почти все классно но максимально поле снизу достигает 30, можно ли где-то в настройках программы (через ПК), установить значение большее???
 
View user's profile ^

kaznelson
Член клуба The eBook

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4642


Location: Москва

Posted: 04.03.2014 14:18    

6.6.2. wrote:
Поставил кулридер, почти все классно но максимально поле снизу достигает 30, можно ли где-то в настройках программы (через ПК), установить значение большее???

Нет. Максимум жёстко забит в коде программы, так что надо обращаться к авторам в подфорум "Программы" - быть может кто из них согласится подправить...
_________________
Kobo Glo HD, Kobo Aura H2O, Kindle Paperwhite 2
 
View user's profile ^

6.6.2.
Новенький участник форума

Новенький участник форума



Joined: 03 Mar 2014
Posts: 8


Location: Ukraine

Posted: 04.03.2014 14:32    

kaznelson wrote:
Нет. Максимум жёстко забит в коде программы, так что надо обращаться к авторам в подфорум "Программы" - быть может кто из них согласится подправить...

Спасибо за ответ буду копаться дальше...
 
View user's profile ^

НуПогоди
Член клуба The eBook

Член клуба The eBook



Joined: 11 Oct 2011
Posts: 388


Location: Jena

Posted: 04.03.2014 14:39    

Ограничения на макс. размер полей есть в тексте движка crengine -- .\crengine\crengine\src\lvdocview.cpp
Code:
static int def_margin[] = {8, 0, 1, 2, 3, 4, 5, 8, 10, 12, 14, 15, 16, 20, 25, 30, 40, 50, 60, 80, 100, 130, 150, 200, 300};

но большинство адаптеров ограничивает этот выбор, исходя из собственных предпочтений (скажем, теми же 30ю пикселами). Можно попробовать подкорректировать текст cr3.ini вручную
Code:
...
crengine.page.margin.bottom=200
crengine.page.margin.left=8
crengine.page.margin.right=8
crengine.page.margin.top=8

но гарантии, что это сработает, я дать не могу.

Если не хотите ждать и надеяться на доброго дядю, берите Librerator и правьте текстовый скрипт Lua, в котором указывается значение для высоты скролла текста при листании -- по дефолту оно G_height, т.е. полная высота страницы (в вертикальной ориентации на К4 -- 800 пикселов) Главное достоинство метода -- не нужно никаких доп.программ, компилляторов, QT-библиотек и тд Берете текстовый редактор, открываете в нем crereader.lua, находите в нем место листания, правите и потом пользуетесь.
Нужна будет помощь, подскажу -- ибо не думаю, что код Libreratora сильно отличается от своего прародителя, kindlepdfviewer, a с последним я знаком и неплохо
_________________
Rooted: Kindle 3.0.3, Tolino Shine 1.1.1, THL T7
 
View user's profile ^

6.6.2.
Новенький участник форума

Новенький участник форума



Joined: 03 Mar 2014
Posts: 8


Location: Ukraine

Posted: 04.03.2014 14:53    

НуПогоди
Думаю тоже не проблeмa, еще один вопрос в догонку, если ставить Librerator, Кул Ридер я ж думаю удалять не надо - просто будет 2 читаки?

Posted after 1 minute 47 seconds:

НуПогоди wrote:
Можно попробовать подкорректировать текст cr3.ini вручную

Корректировал, после загрузки значения автоматически меняються и возвращается максимально 30....
 
View user's profile ^

НуПогоди
Член клуба The eBook

Член клуба The eBook



Joined: 11 Oct 2011
Posts: 388


Location: Jena

Posted: 04.03.2014 16:03    

6.6.2. wrote:
...если ставить Librerator, Кул Ридер я ж думаю удалять не надо - просто будет 2 читаки?

Да, будет две независимых программы. Друг другу они мешать не должны. Дальнейшие действия я описывал: скопировать crereader.lua нa комп, найти в его тексте место листания, исправить G_height на высоту целого участка -- вероятно, что-то вроде
Code:
function CREReader:nextView()
   self.show_overlap = -self.pan_overlap_vertical
   return self.pos + G_height - self.pan_overlap_vertical
end

сохранить (в редакторе типа Notepad++ с линуксовым стандартом метки окончания строки), переписать его на киндл поверх старого -- все.

6.6.2. wrote:
Корректировал, после загрузки значения автоматически меняються и возвращается максимально 30....

Что ж, фокус не удался.
_________________
Rooted: Kindle 3.0.3, Tolino Shine 1.1.1, THL T7
 
View user's profile ^

6.6.2.
Новенький участник форума

Новенький участник форума



Joined: 03 Mar 2014
Posts: 8


Location: Ukraine

Posted: 16.03.2014 15:17    

Учитывая последние события, не мог зайти в инет (не до этого было)...
Уважаемый НуПогоди
По function CREReader:nextView нашел из всего лишь (что да как менять не понял):
Code:
function CREReader:nextView()
   if self.view_mode == CRE_VM_SCROLL then
      self.show_overlap = -self.pan_overlap_vertical
      return self.pos + self.view_pan_step - self.pan_overlap_vertical
   else
      return self.pageno + 1
   end
end

Если будет время, возможность и желание помочь буду благодарен...
Полный текст файла, если вдруг понадобится:
:

require "font"
require "unireader"
require "inputbox"
require "selectmenu"
require "dialog"
require "lbrstrings"

CREReader = UniReader:new{
pos = nil,
percent = 0,

gamma_index = 15,
font_face = nil,
page_header_font = DCREREADER_PAGE_HEADER_FONT,
default_font = DCREREADER_DEFAULT_FONT,
font_zoom = 0,
default_font_zoom = 0,
fonts_menu_cur = 0,

line_space_percent = 100,
default_line_space_percent = 100,
view_mode = DCREREADER_VIEW_MODE,
view_pan_step = nil,
}

function CREReader:init()
self:addAllCommands()
self:adjustCreReaderCommands()

-- initialize cache and hyphenation engine
cre.initCache(1024*1024*64)
if DCREREADER_USE_HYPHENATION then cre.initHyphDict() end
-- we need to initialize the CRE font list
local fonts = Font:getFontList()
for _k, _v in ipairs(fonts) do
if _v ~= "Dingbats.cff" and _v ~= "StandardSymL.cff" then
local ok, err = pcall(cre.registerFont, Font.fontdir..'/'.._v)
if not ok then
Debug(err)
end
end
end

local cre_header_enable = G_reader_settings:readSetting("cre_header_enable")
if cre_header_enable ~= nil then self.cre_header_enable = cre_header_enable end

local page_header_font = G_reader_settings:readSetting("page_header_font")
if page_header_font then self.page_header_font = page_header_font end

local default_font = G_reader_settings:readSetting("cre_font")
if default_font then self.default_font = default_font end

local default_font_zoom = G_reader_settings:readSetting("font_zoom")
if default_font_zoom then self.default_font_zoom = default_font_zoom end

local default_line_space_percent = G_reader_settings:readSetting("line_space_percent")
if default_line_space_percent then self.default_line_space_percent = default_line_space_percent end

if G_width > G_height then
-- in landscape mode, crengine will render in two column mode
self.view_pan_step = G_height * 2
else
self.view_pan_step = G_height
end
end

-- inspect the zipfile content
function CREReader:ZipContentExt(fname)
local i, s = 1
local tmp = io.popen('unzip -l \"'..fname..'\"', "r")
while true do
s = tmp:read("*line")
if i > 3 then tmp:close(); break; end
i = i + 1
end
if s then
local ext = string.match(s, ".+%.([^.]+)")
if ext then
ext = string.lower(ext)
return ext
end
end
return nil
end

-- open a CREngine supported file and its settings store
function CREReader:open(filename)
local ok
local file_type = string.lower(string.match(filename, ".+%.([^.]+)") or "")
-- check zips for potential problems - wrong zip & wrong content
if file_type == "zip" then
file_type = self:ZipContentExt(filename)
end
if not file_type then
return false, SError_unzipping_file_
end
-- if the zip entry is not cre-document
if ReaderChooser:getReaderByType(file_type) ~= CREReader then
return false, SZip_contains_improper_content_
end
-- these two format use the same css file
if file_type == "html" then
file_type = "htm"
end
-- if native css-file doesn't exist, one needs to use default cr3.css
if not io.open("./data/"..file_type..".css") then
file_type = "cr3"
end
local style_sheet = "./data/"..file_type..".css"
self.style_sheet = style_sheet
-- default to scroll mode, which is 0
-- this is defined in kpvcrlib/crengine/crengine/include/lvdocview.h
local view_mode = self.view_mode

--ok, self.doc = pcall(cre.openDocument, filename, style_sheet, G_width, G_height, view_mode)
ok, self.doc = pcall(cre.newDocView, G_width, G_height)
if not ok then
return false, SError_opening_cre_document_ -- self.doc, will contain error message
end
self.filename = filename
return true
end

----------------------------------------------------
-- setting related methods
----------------------------------------------------
function CREReader:preLoadSettings(filename)
self.settings = DocSettings:open(filename)
local view_mode = self.settings:readSetting("view_mode")
if view_mode then self.view_mode = view_mode
else self.view_mode = DCREREADER_VIEW_MODE end
end

function CREReader:loadSpecialSettings()
local font_face = self.settings:readSetting("font_face")
if font_face then self.font_face = font_face
else self.font_face = DCREREADER_DEFAULT_FONT end
self.doc:setFontFace(self.font_face)

self.doc:setCHFont(self.page_header_font)

local info
if self.cre_header_enable then info = DCREREADER_PAGE_HEADER
else info = PGHDR_NONE end
self.doc:setCHInfo(info)

local gamma_index = self.settings:readSetting("gamma_index")
self.gamma_index = gamma_index or self.gamma_index
cre.setGammaIndex(self.gamma_index)

local line_space_percent = self.settings:readSetting("line_space_percent")
self.line_space_percent = line_space_percent or self.default_line_space_percent
self.doc:setDefaultInterlineSpace(self.line_space_percent)

local style_sheet = self.settings:readSetting("style_sheet")
self.style_sheet = style_sheet or self.style_sheet
Debug("Set style sheet: self.style_sheet=", tostring(self.style_sheet))
self.doc:setStyleSheet(self.style_sheet)

local font_zoom = self.settings:readSetting("font_zoom")
self.font_zoom = font_zoom or self.default_font_zoom
if self.font_zoom ~= 0 then
local i = math.abs(self.font_zoom)
local step = self.font_zoom / i
while i>0 do
self.doc:zoomFont(step)
i=i-1
end
end
self.doc:loadDocument(self.filename)
end

function CREReader:getLastPageOrPos()
--[[ Old method doesn't give as "as you left it" feel
local last_percent = self.settings:readSetting("last_percent")
if last_percent then
return math.floor((last_percent * self.doc:getFullHeight()) / 10000)
else
return 0
end
--]]
local last_pos = self.settings:readSetting("last_pos")
if last_pos then
return last_pos
else
return 0
end
end

function CREReader:saveSpecialSettings()
self.settings:saveSetting("font_face", self.font_face)
self.settings:saveSetting("gamma_index", self.gamma_index)
self.settings:saveSetting("line_space_percent", self.line_space_percent)
self.settings:saveSetting("font_zoom", self.font_zoom)
self.settings:saveSetting("view_mode", self.view_mode)
self.settings:saveSetting("style_sheet", self.style_sheet)
end

function CREReader:saveLastPageOrPos()
self.settings:saveSetting("last_percent", self.percent)
self.settings:saveSetting("last_pos", self.pos)
self.settings:saveSetting("last_xpointer", self.doc:getXPointer()) -- might increase compatibility with KPV
end

----------------------------------------------------
-- render related methods
----------------------------------------------------
-- we don't need setzoom in CREReader
function CREReader:setzoom(page, preCache)
return
end

function CREReader:redrawCurrentPage()
self:goto(self.pos)
end

-- there is no zoom mode in CREReader
function CREReader:setGlobalZoomMode()
return
end

----------------------------------------------------
-- goto related methods
----------------------------------------------------
function CREReader:goto(pos, is_ignore_jump, pos_type)
local prev_xpointer = self.doc:getXPointer()
local width, height = G_width, G_height
local battery_level = BatteryLevel()
battery_level = string.gsub(battery_level, "%%", "")
if battery_level and pcall(function () battery_level = battery_level + 0 end) then
-- battery_level is a number. All is good.
else
-- battery_level is not a number. Set it to 0.
battery_level = 0
end
self.doc:setBatteryState(battery_level)

if pos_type == "xpointer" then
self.doc:gotoXPointer(pos)
elseif pos_type == "link" then
self.doc:gotoLink(pos)
elseif pos_type == "page" and self.view_mode == CRE_VM_PAGE then
self.doc:gotoPage(pos)
else -- pos_type is position within document
pos = math.min(pos, self.doc:getFullHeight() - height)
pos = math.max(pos, 0)
self.doc:gotoPos(pos)
end
pos = self.doc:getCurrentPos() -- added by @Kai771
-- add to jump history, distinguish jump from normal page turn
-- NOTE:
-- even though we have called gotoPos() or gotoXPointer() previously,
-- self.pos hasn't been updated yet here, so we can still make use of it.
if not is_ignore_jump then
if self.pos and math.abs(self.pos - pos) > height then
self:addJump(prev_xpointer)
end
end
self.doc:drawCurrentPage(self.nulldc, fb.bb)

Debug("## self.show_overlap "..self.show_overlap)
if self.show_overlap <0> 0
and self.show_overlap_enable
and self.view_mode ~= "page" then
fb.bb:dimRect(0,height - self.show_overlap, width, self.show_overlap)
end
self.show_overlap = 0

if self.rcount >= self.rcountmax then
Debug("full refresh")
self.rcount = 0
fb:refresh(0)
else
Debug("partial refresh")
self.rcount = self.rcount + 1
fb:refresh(1)
end

self.pos = pos
self.pageno = self.doc:getCurrentPage()
self.percent = self.doc:getCurrentPercent()
end

function CREReader:gotoJump(pos, is_ignore_jump, pos_type)
self:goto(pos, is_ignore_jump, pos_type)
end

function CREReader:gotoPercent(percent)
self:goto(percent * self.doc:getFullHeight() / 10000)
end

function CREReader:gotoTocEntry(entry)
self:goto(entry.xpointer, nil, "xpointer")
end

function CREReader:nextView()
if self.view_mode == CRE_VM_SCROLL then
self.show_overlap = -self.pan_overlap_vertical
return self.pos + self.view_pan_step - self.pan_overlap_vertical
else
return self.pageno + 1
end
end

function CREReader:prevView()
if self.view_mode == CRE_VM_SCROLL then
self.show_overlap = self.pan_overlap_vertical
return self.pos - self.view_pan_step + self.pan_overlap_vertical
else
return self.pageno - 1
end
end

----------------------------------------------------
-- jump history related methods
----------------------------------------------------
function CREReader:isSamePage(p1, p2)
return self.doc:getPageFromXPointer(p1) == self.doc:getPageFromXPointer(p2)
end

function CREReader:showJumpHist()
local menu_items = {}
for k,v in ipairs(self.jump_history) do
if k == self.jump_history.cur then
cur_sign = "*(Cur) "
else
cur_sign = ""
end
table.insert(menu_items,
cur_sign..v.datetime.." -> Page "
..self.doc:getPageFromXPointer(v.page).." "..v.notes)
end

if #menu_items == 0 then
InfoMessage:inform(SNo_jump_history_found_, DINFO_DELAY, 1, MSG_WARN)
else
-- if cur points to head, draw entry for current page
if self.jump_history.cur > #self.jump_history then
table.insert(menu_items,
SCurrent_page_..self.pageno)
end

jump_menu = SelectMenu:new{
menu_title = SJump_History,
item_array = menu_items,
}
item_no = jump_menu:choose(0, G_height)
if item_no and item_no <= #self.jump_history then
local jump_item = self.jump_history[item_no]
self.jump_history.cur = item_no
self:goto(jump_item.page, true, "xpointer")
else
self:redrawCurrentPage()
end
end
end

----------------------------------------------------
-- bookmarks related methods
----------------------------------------------------
function CREReader:isBookmarkInSequence(a, b)
return self.doc:getPosFromXPointer(a.page) < self.doc:getPosFromXPointer(b.page)
end

function CREReader:nextBookMarkedPage()
for k,v in ipairs(self.bookmarks) do
if self.pos < self.doc:getPosFromXPointer(v.page) then
return v
end
end
return nil
end

function CREReader:prevBookMarkedPage()
local pre_item = nil
for k,v in ipairs(self.bookmarks) do
if self.pos <= self.doc:getPosFromXPointer(v.page) then
if not pre_item then
break
elseif self.doc:getPosFromXPointer(pre_item.page) <self> 1 ]]

function CREReader:gotoPrevNextTocEntry(direction)
if not self.toc then
self:fillToc()
end
if #self.toc == 0 then
InfoMessage:inform(SNo_Table_of_Contents_, DINFO_DELAY, 1, MSG_WARN)
return
end
-- search for current TOC-entry
local item_no = 0
for k,v in ipairs(self.toc) do
if v.page <self> self.toc[item_no].page and direction <0> #self.toc then -- jump to last page
self:goto(self.doc:getFullHeight()-G_height)
elseif item_no > 0 then
self:gotoTocEntry(self.toc[item_no])
else
self:goto(0) -- jump to first page
end
end

----------------------------------------------------
-- menu related methods
----------------------------------------------------
-- used in CREReader:showInfo()
function CREReader:_drawReadingInfo()
local width = G_width
local load_percent = self.percent/100
local rss, data, stack, lib, totalvm = memUsage()
local face = Font:getFace("rifont", 20)
local title = self.doc:getTitle()
local authors = self.doc:getAuthors()

-- display page number, date and memory stats at the top
fb.bb:paintRect(0, 0, width, 22*4+5+5, 0)
renderUtf8Text(fb.bb, 10, 15+6, face, "p."..self.pageno.."/"..self.doc:getPages(), true)
local txt = os.date("%a %d %b %Y %T").." ["..BatteryLevel().."]"
local w = sizeUtf8Text(0, width, face, txt, true).x
renderUtf8Text(fb.bb, width - w - 10, 15+6, face, txt, true)
renderUtf8Text(fb.bb, 10, 15+6+22, face, "Title: "..title)
renderUtf8Text(fb.bb, 10, 15+6+22*2, face, "Authors: "..authors)
renderUtf8Text(fb.bb, 10, 15+6+22*3+5, face,
"RSS:"..rss.." DAT:"..data.." STK:"..stack.." LIB:"..lib.." TOT:"..totalvm.."k", true)

-- display reading progress at the bottom
local ypos = G_height - 50
fb.bb:paintRect(0, ypos, width, 50, 0)

ypos = ypos + 15

local cur_section = self:getTocTitleOfCurrentPage()
if cur_section ~= "" then
cur_section = " Sec: "..cur_section
end
local footer = load_percent.."%"..cur_section
if sizeUtf8Text(10, fb.bb:getWidth(), face, footer, true).x <fb> 0 then self.gamma_index = self.gamma_index + delta end
if DINFO_GAMMA_CHANGE_SHOW then
InfoMessage:inform(SNew_gamma_is__..self.gamma_index, DINFO_NODELAY, 1, MSG_AUX)
end
cre.setGammaIndex(self.gamma_index)
self:redrawCurrentPage()
end

function CREReader:showFontsMenu()
local fonts_menu_list = {
SChange_document_font_,
SFont_size_n_spacing_,
SToggle_bold_normal,
SSet_current_settings_as_default,
SChange_page_header_font_,
}
local fonts_menu = SelectMenu:new{
menu_title = SLibrerator_Fonts_Menu,
item_array = fonts_menu_list,
current_entry = self.fonts_menu_cur
}
local re = fonts_menu:choose(0, G_height)
Debug("Fonts menu: selected item ", tostring(re))
if re ~= nil then self.fonts_menu_cur = re - 1 end
if re == 1 then
self:redrawCurrentPage()
self:changeDocFont()
elseif re == 2 then
self:redrawCurrentPage()
self:doIncDecFontSizeSpacing()
elseif re == 3 then
self:redrawCurrentPage()
self:toggleBoldNormal()
elseif re == 4 then
self:redrawCurrentPage()
self:setDocFontAsDefault()
elseif re == 5 then
self:redrawCurrentPage()
self:changeHeaderFont()
end
end

function CREReader:changeDocFont()
local face_list = cre.getFontFaces()
-- define the current font in face_list
local item_no = 0
while face_list[item_no] ~= self.font_face and item_no < #face_list do
item_no = item_no + 1
end
local fonts_menu = SelectMenu:new{
menu_title = SFonts_Menu_,
item_array = face_list,
current_entry = item_no - 1,
}
item_no = fonts_menu:choose(0, G_height)
local prev_xpointer = self.doc:getXPointer()
if item_no then
Debug(face_list[item_no])
InfoMessage:inform(SRedrawing_with_..face_list[item_no].." ", DINFO_NODELAY, 1, MSG_AUX)
self.doc:setFontFace(face_list[item_no])
self.font_face = face_list[item_no]
end
self:goto(prev_xpointer, nil, "xpointer")
self.toc = nil
end

function CREReader:changeHeaderFont()
local face_list = cre.getFontFaces()
-- define the current font in face_list
local item_no = 0
while face_list[item_no] ~= self.font_face and item_no <face_list> 0 then change = SIncreasing
else change = SDecreasing end

self.font_zoom = self.font_zoom + delta
self.font_zoom = math.max(self.font_zoom, -3)
self.font_zoom = math.min(self.font_zoom, 4)

if DINFO_FONT_SIZE_CHANGE_SHOW then
InfoMessage:inform(change..S_font_size_to_..self.font_zoom..". ", DINFO_NODELAY, 1, MSG_AUX)
end
Debug("font zoomed to", self.font_zoom)
local prev_xpointer = self.doc:getXPointer()
self.doc:zoomFont(delta)
self:goto(prev_xpointer, nil, "xpointer")
self.toc = nil
end

function CREReader:incDecFontSpacing(factor)
self.line_space_percent = self.line_space_percent + factor
self.line_space_percent = math.max(self.line_space_percent, 80)
self.line_space_percent = math.min(self.line_space_percent, 200)

if DINFO_LINE_SPACING_CHANGE_SHOW then
InfoMessage:inform(SChange_line_space_to_..self.line_space_percent.. "% ", DINFO_NODELAY, 1, MSG_AUX)
end
Debug("line spacing set to", self.line_space_percent)
local prev_xpointer = self.doc:getXPointer()
self.doc:setDefaultInterlineSpace(self.line_space_percent)
self:goto(prev_xpointer, nil, "xpointer")
self.toc = nil
end

function CREReader:gotoInput()
local height = self.doc:getFullHeight()
local inputtext, cur_pos
if self.view_mode == CRE_VM_SCROLL then
inputtext = SPosition_in_percent_
cur_pos = math.floor((self.pos / height)*100)
else
inputtext = SPage_
cur_pos = self.doc:getCurrentPage()
end
local position = NumInputBox:input(G_height-100, 100,
inputtext, Scurrent_..cur_pos, true)
-- convert string to number
if position and pcall(function () position = position + 0 end) then
if self.view_mode == CRE_VM_SCROLL then
if position >= 0 and position <= 100 then
self:goto(math.floor(height * position / 100))
return
end
else
self:goto(position, true, "page")
return
end
end
self:redrawCurrentPage()
end

function CREReader:gammaInput()
local new_gamma = NumInputBox:input(G_height-100, 100,
SGamma..":", self.gamma_index, true)
-- convert string to number
if pcall(function () new_gamma = math.floor(new_gamma) end) then
if new_gamma <0> G_height then
-- in landscape mode, crengine will render in two column mode
self.view_pan_step = G_height * 2
else
self.view_pan_step = G_height
end
self.toc = nil
end
)
-- CW-rotation
self.commands:add(KEY_J, nil, "J",
Srotate_screen_90_clockwise,
function(self)
local prev_xpointer = self.doc:getXPointer()
Screen:screenRotate("clockwise")
G_width, G_height = fb:getSize()
self:goto(prev_xpointer, nil, "xpointer")
self.pos = self.doc:getCurrentPos()
if G_width > G_height then
-- in landscape mode, crengine will render in two column mode
self.view_pan_step = G_height * 2
else
self.view_pan_step = G_height
end
self.toc = nil
end
)
-- navigate between chapters by Shift+Up & Shift-Down
self.commands:addGroup(MOD_SHIFT..Sup_down,{
Keydef:new(KEY_FW_UP, MOD_SHIFT), Keydef:new(KEY_FW_DOWN, MOD_SHIFT)},
Sskip_to_previous_next_chapter,
function(self)
if keydef.keycode == KEY_FW_UP then
self:gotoPrevNextTocEntry(-1)
else
self:gotoPrevNextTocEntry(1)
end
end
)
-- fast navigation by Left & Right
local scrollpages = DCREREADER_FASTNAV_PAGES
self.commands:addGroup(Sleft_right,
{Keydef:new(KEY_FW_LEFT, nil),Keydef:new(KEY_FW_RIGHT, nil)},
Smove_..scrollpages..S_pages_backwards_forward,
function(self)
if G_ScreenKB_pressed then
G_ScreenKB_pressed = false
if keydef.keycode == KEY_FW_RIGHT then
self:gotoInput()
end
return
end
if self.view_mode == CRE_VM_SCROLL then
if keydef.keycode == KEY_FW_LEFT then
self:goto(math.max(0, self.pos - scrollpages*G_height))
else
self:goto(math.min(self.pos + scrollpages*G_height, self.doc:getFullHeight()-G_height))
end
else
if keydef.keycode == KEY_FW_LEFT then
self:goto(self.pageno-scrollpages, true, "page")
else
self:goto(self.pageno+scrollpages, true, "page")
end
end
end
)
self.commands:addGroup(MOD_SHIFT.."< >",{
Keydef:new(KEY_PGBCK,MOD_SHIFT),Keydef:new(KEY_PGFWD,MOD_SHIFT),
Keydef:new(KEY_LPGBCK,MOD_SHIFT),Keydef:new(KEY_LPGFWD,MOD_SHIFT)},
Sincrease_decrease_font_size,
function(self)
if keydef.keycode == KEY_PGBCK or keydef.keycode == KEY_LPGBCK then
self:incDecFontSize(-1)
else
self:incDecFontSize(1)
end
end
)
self.commands:addGroup(MOD_ALT.."< >",{
Keydef:new(KEY_PGBCK,MOD_ALT),Keydef:new(KEY_PGFWD,MOD_ALT),
Keydef:new(KEY_LPGBCK,MOD_ALT),Keydef:new(KEY_LPGFWD,MOD_ALT)},
Sincrease_decrease_line_spacing,
function(self)
if keydef.keycode == KEY_PGBCK or keydef.keycode == KEY_LPGBCK then
self:incDecFontSpacing(-10)
else
self:incDecFontSpacing(10)
end
end
)
local numeric_keydefs = {}
for i=1,10 do
numeric_keydefs[i]=Keydef:new(KEY_1+i-1, nil, tostring(i%10))
end
self.commands:addGroup("[1, 2 .. 9, 0]",numeric_keydefs,
Sjump_to_0_10__90_100_of_document,
function(self, keydef)
Debug('jump to position: '..
math.floor(self.doc:getFullHeight()*(keydef.keycode-KEY_1)/9)..
'/'..self.doc:getFullHeight())
self:goto(math.floor(self.doc:getFullHeight()*(keydef.keycode-KEY_1 )/9))
end
)
self.commands:add(KEY_G,nil,"G",
Sopen_go_to_position_input_box,
function(unireader)
self:gotoInput()
end
)
self.commands:add({KEY_F, KEY_AA}, nil, "F",
Schange_document_font,
function(self)
self:changeDocFont()
end
)
self.commands:add(KEY_F, MOD_SHIFT, "F",
Suse_document_font_as_default_font,
function(self)
self:setDocFontAsDefault()
end
)
self.commands:add(KEY_F, MOD_ALT, "F",
Stoggle_font_weight_bold_normal,
function(self)
self:toggleBoldNormal()
end
)
self.commands:add(KEY_B, MOD_ALT, "B",
Sadd_bookmark_to_current_page,
function(self)
self:addBookmarkCommand()
end -- function
)
self.commands:add(KEY_S, nil, "S",
Schange_document_style_sheet,
function(self)
self:changeStyleSheet()
end
)
self.commands:addGroup(MOD_ALT.."K/L",{
Keydef:new(KEY_K,MOD_ALT), Keydef:new(KEY_L,MOD_ALT)},
Sjump_between_bookmarks,
function(unireader,keydef)
local bm = nil
if keydef.keycode == KEY_K then
bm = self:prevBookMarkedPage()
else
bm = self:nextBookMarkedPage()
end
if bm then self:goto(bm.page, true, "xpointer") end
end)
self.commands:add(KEY_BACK, nil, "Back",
Sgo_backward_in_jump_history,
function(self)
if G_ScreenKB_pressed then
G_ScreenKB_pressed = false
local next_jump_no = self.jump_history.cur + 1
if next_jump_no <self> #self.jump_history then
-- if cur points to head, put current page in history
self:addJump(self.doc:getXPointer())
prev_jump_no = self.jump_history.cur - 2
else
prev_jump_no = self.jump_history.cur - 1
end

if prev_jump_no >= 1 then
self.jump_history.cur = prev_jump_no
self:goto(self.jump_history[prev_jump_no].page, true, "xpointer")
else
InfoMessage:inform(SAlready_first_jump_, DINFO_DELAY, 1, MSG_WARN)
end
end
)
self.commands:add(KEY_BACK, MOD_SHIFT, "Back",
Sgo_forward_in_jump_history,
function(self)
local next_jump_no = self.jump_history.cur + 1
if next_jump_no <= #self.jump_history then
self.jump_history.cur = next_jump_no
self:goto(self.jump_history[next_jump_no].page, true, "xpointer")
else
InfoMessage:inform(SAlready_last_jump_, DINFO_DELAY, 1, MSG_WARN)
end
end
)
self.commands:addGroup("vol-/+",
{Keydef:new(KEY_VPLUS,nil), Keydef:new(KEY_VMINUS,nil)},
Sdecrease_increase_gamma,
function(self, keydef)
local delta = 1
if keydef.keycode == KEY_VMINUS then
delta = -1
end
cre.setGammaIndex(self.gamma_index+delta)
self.gamma_index = cre.getGammaIndex()
InfoMessage:inform(SChanging_gamma_to_..self.gamma_index..". ", DINFO_NODELAY, 1, MSG_AUX)
self:redrawCurrentPage()
end
)
self.commands:add(KEY_FW_UP, nil, Sjoypad_up,
Span_..self.shift_y..S_pixels_upwards,
function(self)
if G_ScreenKB_pressed then
G_ScreenKB_pressed = false
self:addBookmarkCommand()
return
end
if self.view_mode == CRE_VM_SCROLL then
self:goto(self.pos - self.shift_y)
end
end
)
self.commands:add(KEY_FW_DOWN, nil, Sjoypad_down,
Span_..self.shift_y..S_pixels_downwards,
function(self)
if G_ScreenKB_pressed then
G_ScreenKB_pressed = false
keep_running = true
return "break"
end
if self.view_mode == CRE_VM_SCROLL then
self:goto(self.pos + self.shift_y)
end
end
)
self.commands:add(KEY_V, nil, "V",
Stoggle_view_mode_,
function(self)
self:toggleViewMode()
end
)
self.commands:add(KEY_HOME, MOD_SHIFT, "Home",
Stoggle_crereader_header,
function(self)
--local prev_xpointer = self.doc:getXPointer()
self:toggleCREHeader()
G_reader_settings:saveSetting("cre_header_enable", self.cre_header_enable)
--self:goto(prev_xpointer, nil, "xpointer")
self:redrawCurrentPage()
end
)
self.commands:add(KEY_FW_PRESS, nil, nil, nil, -- hidden from help screen - only usable on K4NT
function(self)
if G_ScreenKB_pressed then
G_ScreenKB_pressed = false
self:doFollowLink()
return
end
end
)
self.commands:add(KEY_LPGBCK, nil, nil, nil, -- hidden from help screen - only usable on K4NT
function(self)
if G_ScreenKB_pressed then
G_ScreenKB_pressed = false
local bm = nil
bm = self:prevBookMarkedPage()
if bm then self:goto(bm.page, true, "xpointer") end
return
end
self:goto(self:prevView(), true, "page")
end
)
self.commands:add(KEY_LPGFWD, nil, nil, nil, -- hidden from help screen - only usable on K4NT
function(self)
if G_ScreenKB_pressed then
G_ScreenKB_pressed = false
local bm = nil
bm = self:nextBookMarkedPage()
if bm then self:goto(bm.page, true, "xpointer") end
return
end
self:goto(self:nextView(), true, "page")
end
)
end

----------------------------------------------------
--- search
----------------------------------------------------
function CREReader:searchHighLight(search)
Debug("FIXME CreReader::searchHighLight", search)

if self.last_search == nil or self.last_search.search == nil then
self.last_search = {
search = "",
}
end

local origin = 0 -- 0=current 1=next-last -1=first-current
if self.last_search.search == search then
origin = 1
end

local found, pos = self.doc:findText(
search,
origin,
0, -- reverse: boolean
1 -- caseInsensitive: boolean
)

if found then
self.pos = pos -- first metch position
self:redrawCurrentPage()
InfoMessage:inform( found..S_hits_.."'"..search.."'"..S_pos_..pos, DINFO_DELAY, 1, MSG_WARN)
else
InfoMessage:inform( "'"..search.."'"..S_not_found_in_document_, DINFO_DELAY, 1, MSG_WARN)
end

self.last_search.search = search
end

----------------------------------------------------
--- page links
----------------------------------------------------
function CREReader:getPageLinks()
local links = self.doc:getPageLinks()
Debug("getPageLinks", links)
return links
end

function CREReader:clearSelection()
Debug("clearSelection")
self.doc:clearSelection()
end

 
View user's profile ^

superworship
Новенький участник форума

Новенький участник форума



Joined: 22 May 2014
Posts: 8



Posted: 07.10.2014 19:17    

НуПогоди wrote:
Ограничения на макс. размер полей есть в тексте движка crengine -- .\crengine\crengine\src\lvdocview.cpp
Code:
static int def_margin[] = {8, 0, 1, 2, 3, 4, 5, 8, 10, 12, 14, 15, 16, 20, 25, 30, 40, 50, 60, 80, 100, 130, 150, 200, 300};

А как самостоятельно это редактировать и как его вообще найти?

PS Установил Liberator - DJVU не открывает с ошибкой! PDF открывает. Только не нашел как там выставлять поля - подскажите пожалуйста - половина экрана не работает вообще.
 
View user's profile ^

Nikon_ww
Новенький участник форума

Новенький участник форума



Joined: 05 Feb 2016
Posts: 1



Posted: 05.02.2016 00:16    

у меня разбита нижняя часть экрана, примерно 1/3.

вот что я сделал:
1) в файле cr3.ini параметр
window.rotate.angle=0 изменил на window.rotate.angle=1
страница текста повернулась на 90 градусов

битая часть получилась с правой стороны строк...

2) для файлов fb2 в файле fb2.css строку
body { ... } дополнил до body { ... ; margin-right: 300px}

300px как раз перекрыли разбитую часть.

для других типов файлов необходимо проделать тоже самое в соответствующих файлах css, но
для файлов doc и rtf добавлять отступ в разделе p {...}
для файлов epub устанавливать отступ в 2 раза меньше
(почему так получается не знаю, но у меня при отступе 150px для epub документ отображается так-же, как fb2 при отступе 300px )
 
View user's profile ^
Libroom Forum IndexAmazon KindleAll times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

© Libroom, 2021