[PW|PW2] Как поменять набор размеров шрифта в меню Аа?

 
Libroom Forum IndexAmazon KindleKindle Paperwhite
AuthorMessage

Ihor
Искушенный участник форума

Искушенный участник форума



Joined: 31 Jul 2011
Posts: 66



Posted: 24.09.2014 03:32    

Всем добрый день.

Это снова Игорь, автор данного топика и первой версии фонт-фикса для К3/К4, который эту всю кашу и заварил. Интересно было увидеть через два года что тема развивалась дальше.

Позвольте спросить всех, кто это сообщение видит: а это добро работает на Paperwhite 2? Кто-нибудь пробовал ставить?

А то я отцу купил Paperwhite, хочу шрифты поменять. И что-то так не хочется начинать разрабатывать по новой...

Может кто пробовал на Paperwhite?
 
View user's profile ^

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4642


Location: Москва

Posted: 24.09.2014 08:24    

Ihor
Ура, он вернулся! Smile

Видел Ваш вопрос на MobileRead - самый свежий KindleTool лежит тут:
http://www.mobileread.com/forums/showthread.php?t=225030

Kindle Paperwhite всех версий живёт в этом подфоруме:
libroom.net/viewforum.php?f=93

Откат прошивок 5.4.5.х возможен:
libroom.net/viewtopic.php?p=1182147#1182147

Текущий метод замены шрифтов и полей не отличается изяществом, живёт тут (также готовый фонтхак см. пункт 9 в первом сообщении темы):
libroom.net/viewtopic.php?p=1114264#1114264
Реализовано тупо-в-лоб, но по крайней мере нужные параметры и подводные камни уже найдены.

Переезжайте в последнюю тему, или если наработки по замене уже есть - создавайте новую в разделе Paperwhite...


PS: Кстати, а как опрашиваются jar-файлы с ресурсами для локализации?
Я вот знаю, что file_ln.jar будет перекрыт файлом file_ln_LN.jar, а вот в каком порядке опрашиваются всевозможные комбинации ln_LN и символов "-" / "_"?
file_ln_LN.jar
file-ln_LN.jar
file_ln-LN.jar
file-ln-LN.jar
...
_________________
Kobo Glo HD, Kobo Aura H2O, Kindle Paperwhite 2
 
View user's profile ^

Ihor
Искушенный участник форума

Искушенный участник форума



Joined: 31 Jul 2011
Posts: 66



Posted: 24.09.2014 14:08    

kaznelson wrote:
самый свежий KindleTool лежит тут

И с ним тоже ничего не работает. bin файл, который получается, успешно автоматически удаляется устройством. В wiki написано, что для моего девайса нужна версия KindleTool 1.6.3 - пока его не нашел.


Насчет вот этого
libroom.net/viewtopic.php?p=1114264#1114264

Что-то я совсем ничего не понимаю: Вы людям предлагаете отредактировать бинарник? А почему не дать им отредактировать текстовый файл fontfix.pref - как это было у меня в моей версии? Есть какие-то технические ограничения?


Позвольте еще вопрос.

Я так понимаю, что подход у них поменялся. Раньше были framework-api_en_US.jar и MobiReader_en_US.jar, в которых надо было сделать исправления - отдать массивы с другими значениями.

А что в paperwhite киндле? Другие названия ресурсных файлов только, или что-то посложнее?


И последний вопрос: здесь
libroom.net/viewtopic.php?t=25430

Вижу Размеры шрифтов и полей для Paperwhite 1/2: (автор kaznelson) - Вы могли бы дать все сорсы этого добра? Мой мейл - ibobak at gmail dot com.


Извините, что столько вопросов. Но Вы сами понимаете: что если я этот путь уже раз проходил, то второй раз не хочется проходить его с нуля.
 
View user's profile ^

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4642


Location: Москва

Posted: 24.09.2014 15:02    

Ihor wrote:
с ним тоже ничего не работает. bin файл, который получается, успешно автоматически удаляется устройством. в wiki написано, что для моего девайса нужна версия kindletool 1.6.3

В wiki указаны финальные версии, а я дал ссылку на самый свежий снапшот, который скорее всего и станет 1.6.3. Мне пока не попадались PW2, которые этот KindleTool (1.6.2.20) не понимает. Ну или первые 4 цифры серийника своего Paperwhite - в студию.
И да, надо сначала откатить прошивку до 5.4.3.2, поставить джейлбрэк (тоже крайний снапшот), а уж потом...

Ihor wrote:
вы людям предлагаете отредактировать бинарник? А почему не дать им отредактировать текстовый файл fontfix.pref - как это было у меня в моей версии? Есть какие-то технические ограничения?

И ещё какие - там... у меня в голове. (с) Wink
Я Java знаю более чем посредственно, поэтому сделал как сумел - по минимуму, зато работает.

Ihor wrote:
А что в paperwhite киндле? Другие названия ресурсных файлов только, или что-то посложнее?

Ну я же все названия файлов, и что где править, привёл в этом сообщении. Там же и архив с исходниками под прошивку 5.4.5 (в архиве с готовыми бинарниками сорцы только на сам установщик).

Ihor wrote:
я этот путь уже раз проходил, то второй раз не хочется проходить его с нуля.

С нуля и не надо. Собственно, основная проблема - получение параметров из внешнего файла. Java-потроха в новых прошивках от старых отличаются весьма сильно...
_________________
Kobo Glo HD, Kobo Aura H2O, Kindle Paperwhite 2
 
View user's profile ^

Ihor
Искушенный участник форума

Искушенный участник форума



Joined: 31 Jul 2011
Posts: 66



Posted: 24.09.2014 15:42    

Уважаемый kaznelson, спасибо за ответ.

А Вы можете сорсы своих файлов
Mobi-drawing-en_GB.jar 
HTMLReader-impl-en_GB.jar 
Reader-plugin-en_GB.jar 
ReaderSDK-impl-en_GB.jar 

сюда дать?

Или Вы их правили тем редактором бинарников?

Я понял в чем фокус. Файлы поменялись (по сравнению с KDX и K3), java код поменялся. Но принцип остался прежним: список размеров сидит в ресурсах. А раз так, то я просто могу сделать такую же штуку, какую делал два года назад: написать кусок кода, который будет читать текстовый файл fontfix.pref. И людям будет счастье.
 
View user's profile ^

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4642


Location: Москва

Posted: 24.09.2014 16:02    

Ihor wrote:
А Вы можете сорсы своих файлов <...> сюда дать?

Вот для версий 5.4.5-5.4.5.1:
https://yadi.sk/d/xXXS99MdZp93F

За основу для правки я брал en_GB-ресурсы, они в папке "en_GB_orig". В ней же, в "Class" лежат нужные class-файлы, которые и надо менять (я использовал байткод-редактор JBE, параметры по файлам тут):

HTMLReaderImplResources_en_GB.class отвечает за размер шрифтов в новых KF8/AZW3 книгах.

MobiDrawingResources_en_GB.class отвечает за размер шрифтов в старых MOBI/AZW книгах.

PDFResources_en_GB.class отвечает за рефлоу PDF-файлов.

ReaderResources_en_GB.class отвечает за размер полей во всех книгах.
В нём же можно исправить отображаемый размер шрифтов
в самом меню "Аа", но глючит это отчаянно.

ScrubberUIResources_en_GB.class отвечает за миниатюрное окно быстрого перехода по тексту слайдером - при изменении полей пропорции искажаются.

SearchResultsPaneResources_en_GB.class и YJReaderImplResources_en_GB.class тоже отвечают за размер шрифтов, но где именно, я не знаю.

В папке "Bookmark" лежит картинка закладок, которая при уменьшении полей наползает на текст.


Ihor wrote:
принцип остался прежним: список размеров сидит в ресурсах.

Да, подход к размещению параметров у Амазонок не изменился...
_________________
Kobo Glo HD, Kobo Aura H2O, Kindle Paperwhite 2
 
View user's profile ^

Ihor
Искушенный участник форума

Искушенный участник форума



Joined: 31 Jul 2011
Posts: 66



Posted: 24.09.2014 16:38    

Теперь понятно: Вы ломали сам class-файл (бинарник), не декомпилируя это в java и не пытаясь сделать по тому принципу, по которому я тогда сделал (с текстовым файлом настроек).

Так тоже можно, но заставлять простых смертных работать с байт-кодом (если им надо поменять) - это конечно жестоко. Бессовестный Вы. Smile


Кроме того, сами шрифты в окне выбора шрифтов отображаются отвратительно: визуально размер в окне один, а когда выбираешь - применяется действительный размер (что во взломанном файле). Значит Вы где-то недоломали.

Помните, в K3 было два файла - ReaderResources_en_US.java и UIResources_en_US.java:
один из них отдавал ресурс - mobireader.default.font.size.list
второй - fontmenu.displaystring и fontmenu.default.font.size.list

Как думаете почему так? Потому что один использовала сама читалка, а второй - программа-морда.

И они оба должны были быть синхронизированы. А у вас полный десинхрон. Я понимаю, что оно работает, однако почему-то мне кажется, что можно сделать лучше. Надо только найти где ресурсы морды. Вот не верю, что они их зашили в коде - должен быть где-то еще один ресурсный файл.

Но в любом случае спасибо за то, что направление указали. Двигаться дальше (делать нормальный пак с текстовым конфигом) или нет - этого я уже не знаю; зависит от наличия свободного времени.

С уважением
Игорь.
 
View user's profile ^

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4642


Location: Москва

Posted: 24.09.2014 16:52    

Ihor wrote:
И они оба должны были быть синхронизированы. А у вас полный десинхрон. Я понимаю, что оно работает, однако почему-то мне кажется, что можно сделать лучше. Надо только найти где ресурсы морды. Вот не верю, что они их зашили в коде - должен быть где-то еще один ресурсный файл.

А чего искать-то? Wink Туточки:
ReaderSDK-impl-en_GB.jar -> ReaderResources_en_GB.class

Вот только просто поменять размеры мало - помните, я же предупредил: "В нём же можно исправить отображаемый размер шрифтов в самом меню "Аа", но глючит это отчаянно."

Во первых, похоже что как-то разнесены сами шрифты в меню и тап-области, им соответствующие.

Во вторых, стоит только тронуть размеры, как моментально ломается изменение размеров, за которое отвечает HTMLReaderImplResources_en_GB.class, т.е. новые KF8-книги. А поскольку это почти ePub со всем богатством форматирования и иногда даже переносами, то становится особенно обидно...
_________________
Kobo Glo HD, Kobo Aura H2O, Kindle Paperwhite 2
 
View user's profile ^

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

Член клуба The eBook



Joined: 11 Sep 2009
Posts: 1639


Location: Kiev

Posted: 24.09.2014 17:59    

Ihor, kaznelson
Здравствуте!
Приятно, что тема ожила. Smile

Возможно Игорь не знает, что фонтхак имеет проблему - после хака слова из окошка словаря вылазят, или как-то так... Я думаю это очень важно. Smile

Спасибо.
_________________
Kindle Voyage
 
View user's profile ^

Ihor
Искушенный участник форума

Искушенный участник форума



Joined: 31 Jul 2011
Posts: 66



Posted: 25.09.2014 11:38    

kaznelson wrote:
просто поменять размеры мало - помните, я же предупредил: "В нём же можно исправить отображаемый размер шрифтов в самом меню "Аа", но глючит это отчаянно."

Значит надо сидеть и читать java код, который формирует это окно, контролы для выбора шрифтов и т.д., и который рассчитывает значения высоты и ширины этих контролов. А также их количества и всего прочего.

Тоже почему-то слабо верю, что в этом коде хардкод, но вполне может быть, что там зашит рассчет, что в массиве ровно 9 значений.

К сожалению посмотреть смогу на следующей недели, так как сейчас завал по времени.

Но вот сделать то, чтобы править эти настройки можно было в текстовом файле (а не в бинарнике) - это то, что я бы хотел сделать. Я думаю многим было бы куда приятнее править текстовый файл.
 
View user's profile ^

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4642


Location: Москва

Posted: 25.09.2014 14:19    

Ihor wrote:
надо сидеть и читать java код

После достижения определённого порога вкладываемых усилий подобное занятие перестаёт приносить какое-либо удовольствие. А поскольку вид меню шрифтов меня совсем не напрягает, то и копать вглубь категорически лень. Wink

Вот брать настройки из внешнего файла - это да, сверхполезно. Меню же - так, красявости...
_________________
Kobo Glo HD, Kobo Aura H2O, Kindle Paperwhite 2
 
View user's profile ^

Ihor
Искушенный участник форума

Искушенный участник форума



Joined: 31 Jul 2011
Posts: 66



Posted: 27.09.2014 18:28    

Не хочу вас разочаровывать, однако я уже попробовал три декомпилятора, и вместо нормального java кода получается вот такая хрень:
:

Code:
package com.amazon.ebook.booklet.htmlreader.impl.resources;

import com.amazon.agui.swing.KindleColor;
import com.amazon.ebook.util.KindleResourceBundle;
import java.awt.Point;
import java.awt.Rectangle;

public class HTMLReaderImplResources_es extends KindleResourceBundle
{

    public HTMLReaderImplResources_es()
    {
        12;
        a;
        JVM INSTR dup_x1 ;
        KindleResourceBundle();
        new Object[][];
        true;
        true;
        JVM INSTR pop2 ;
        JVM INSTR dup ;
        0;
        new Object[2];
        true;
        true;
        JVM INSTR pop2 ;
        JVM INSTR dup ;
        0;
        "font.html.linespacing.values";
        JVM INSTR aastore ;
        JVM INSTR dup ;
        new int[3];
        true;
        true;
        JVM INSTR pop2 ;
        JVM INSTR dup ;
        0;
        1;
        JVM INSTR iastore ;
        JVM INSTR dup ;
        1;
        JVM INSTR dup_x2 ;
        2;
     
// дальше в том же стиле - без нормального кода

        29.2F;
        JVM INSTR fastore ;
        JVM INSTR aastore ;
        JVM INSTR aastore ;
        CONTENTS_DPI_212;
    }
}

Такого не было в class файлах от Kindle DX, например.

Так что я не знаю что тут делать. Наверное редактирование бинарников - это единственный путь.

Если кто-то даст нормальный декомпилятор - сделаю вторую попытку.


Posted after 1 hour 35 minutes 27 seconds:

Кстати, описанные тут манипуляции с ReaderSDK-impl-ln_LN.jar (ReaderResources_ln_LN.class) у меня не работают: поля со всех сторон какие были, такие и остаются.

Я сделал jar-ы испанские (у отца киндл на испанском языке), вначале сделал HTMLReader-impl-es_ES.jar и Mobi-drawing-es_ES.jar для изменения набора шрифтов - через редактор JBE. Все сработало хорошо, с размерами порядок.

Потом я поменял ReaderSDK-impl-ln_LN.jar для установки полей - по тому же алгоритму. И ФИГ!

При этом я на 100% уверен, что менял все правильно, потому что изменения записывал в текстовый файл, а потом компаратором сравнивал оригинал с модификацией, и смотрел внимательно в ваше описание - ничего ли не забыл. А еще повторно в JBE открыл уже свой class (замененный ранее) чтобы убедиться, что изменения есть. ОНИ ТАМ ЕСТЬ - 100%. Но вот поля не поменялись. Девайс перегружал.


Я конечно был бы очень счастлив, если бы нашел где-то нормальный декомпилятор (желательно такой, который запускается с командной строки), чтобы можно было:

1) переписать ВСЕ jar файлы на комп
2) распаковать архиватором каждый в отдельную папку - одной операцией
3) запустить команду powershell, которая переберет все папки рекурсивно и все файлы class, декомпилирует их:
Code:
get-childitem .\ -include *.class -recurse | foreach ($_) {D:\__FROM_HOME\j2sdk1.4.2_19\bin\jad.exe -d $_.directory -s .java $_.fullname}
4) потом поиск по файлах на предмет вхождения строчки reader.content.bottomMargin например.

И тогда будет видно где оно еще сидит.
А так, к сожалению, что-то недоработано.
 
View user's profile ^

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4642


Location: Москва

Posted: 27.09.2014 22:14    

Ihor
Как-то так...
libroom.net/viewtopic.php?p=1041564#1041564

Metazoa wrote:
этот пример - вообще строго говоря не декомпиляция. Это просто отображение инструкций байт-кода в текстовом виде (ближайший аналог - любой однопроходной дизассемблер, например Hiew). У JAD'а явно слетела крыша, о чем он недвусмысленно сигнализирует в конце листинга. Ну и он, мягко скажем, староват: Copyright 2001 Pavel Kouznetsov.
Вот как выглядит тот же модуль, декопмилированный приличным современным Ява-декомпилятором AndroChef Java Decompiler
<...>

PS: http://asm.ow2.org/
http://commons.apache.org/proper/commons-bcel/manual.html
http://habrahabr.ru/post/111456/
http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings
http://en.wikibooks.org/wiki/Java_Programming/Byte_Code
_________________
Kobo Glo HD, Kobo Aura H2O, Kindle Paperwhite 2
 
View user's profile ^

rupor
Developer

Developer



Joined: 08 Nov 2008
Posts: 1985


Location: США

Posted: 29.09.2014 00:48    

Попробуйте вот это. Получается не особо красиво, но это все же Java code.
:

Code:
package com.amazon.ebook.booklet.htmlreader.impl.resources;

public class HTMLReaderImplResources_es extends com.amazon.ebook.util.KindleResourceBundle {
    public HTMLReaderImplResources_es()
    {
        super();
        Object[][] a = new Object[12][];
        Object[] a0 = new Object[2];
        a0[0] = "font.html.linespacing.values";
        int[] a1 = new int[3];
        a1[0] = 1;
        a1[1] = 2;
        a1[2] = 3;
        a0[1] = a1;
        a[0] = a0;
        Object[] a2 = new Object[2];
        a2[0] = "htmlreader.default.font.size.list";
        int[] a3 = new int[8];
        a3[0] = 7;
        a3[1] = 8;
        a3[2] = 9;
        a3[3] = 11;
        a3[4] = 13;
        a3[5] = 16;
        a3[6] = 25;
        a3[7] = 37;
        a2[1] = a3;
        a[1] = a2;
        Object[] a4 = new Object[2];
        a4[0] = "htmlreader.default.font.size.list.cjk";
        int[] a5 = new int[8];
        a5[0] = 7;
        a5[1] = 8;
        a5[2] = 9;
        a5[3] = 11;
        a5[4] = 13;
        a5[5] = 16;
        a5[6] = 25;
        a5[7] = 37;
        a4[1] = a5;
        a[2] = a4;
        Object[] a6 = new Object[2];
        a6[0] = "html.fixedlayout.region.overlap.ratio";
        a6[1] = new Double(0.2);
        a[3] = a6;
        Object[] a7 = new Object[2];
        a7[0] = "html.fixedlayout.panel.icon.background";
        a7[1] = com.amazon.agui.swing.KindleColor.white;
        a[4] = a7;
        Object[] a8 = new Object[2];
        a8[0] = "html.fixedlayout.panel.icon.foreground";
        a8[1] = com.amazon.agui.swing.KindleColor.black;
        a[5] = a8;
        Object[] a9 = new Object[2];
        a9[0] = "html.fixedlayout.blank.indicator.color";
        a9[1] = com.amazon.agui.swing.KindleColor.GRAY_08;
        a[6] = a9;
        Object[] a10 = new Object[2];
        a10[0] = "html.fixedlayout.flash.timer.intial";
        a10[1] = new Integer(400);
        a[7] = a10;
        Object[] a11 = new Object[2];
        a11[0] = "html.fixedlayout.flash.timer.repeat";
        a11[1] = new Integer(200);
        a[8] = a11;
        Object[] a12 = new Object[2];
        a12[0] = "html.fixedlayout.flash.indicator.background";
        a12[1] = com.amazon.agui.swing.KindleColor.white;
        a[9] = a12;
        Object[] a13 = new Object[2];
        a13[0] = "html.fixedlayout.flash.indicator.foreground";
        a13[1] = com.amazon.agui.swing.KindleColor.black;
        a[10] = a13;
        Object[] a14 = new Object[2];
        a14[0] = "html.fixedlayout.max.stretched.ratio";
        a14[1] = new Integer(120);
        a[11] = a14;
        this.CONTENTS_DEFAULT = a;
        Object[][] a15 = new Object[21][];
        Object[] a16 = new Object[2];
        a16[0] = "html.fixedlayout.panel.icon.bg.border.location.offset";
        a16[1] = new Integer(1);
        a15[0] = a16;
        Object[] a17 = new Object[2];
        a17[0] = "html.fixedlayout.panel.icon.bg.border.dimension.offset";
        a17[1] = new Integer(3);
        a15[1] = a17;
        Object[] a18 = new Object[2];
        a18[0] = "html.fixedlayout.panel.icon.portrait.rectangle";
        a18[1] = new java.awt.Rectangle(560, 752, 22, 30);
        a15[2] = a18;
        Object[] a19 = new Object[2];
        a19[0] = "html.fixedlayout.panel.icon.landscape.rectangle";
        a19[1] = new java.awt.Rectangle(752, 560, 30, 22);
        a15[3] = a19;
        Object[] a20 = new Object[2];
        a20[0] = "html.fixedlayout.closebutton.icon.filename";
        a20[1] = "/com/amazon/ebook/booklet/reader/impl/ui/resources/assets/yoshi/iconC lose.png";
        a15[4] = a20;
        Object[] a21 = new Object[2];
        a21[0] = "html.fixedlayout.closebutton.icon.portrait.point";
        a21[1] = new java.awt.Point(487, 75);
        a15[5] = a21;
        Object[] a22 = new Object[2];
        a22[0] = "html.fixedlayout.closebutton.icon.landscape.point";
        a22[1] = new java.awt.Point(687, 75);
        a15[6] = a22;
        Object[] a23 = new Object[2];
        a23[0] = "html.fixedlayout.closebutton.tapzone.portrait.rectangle";
        a23[1] = new java.awt.Rectangle(487, 75, 38, 38);
        a15[7] = a23;
        Object[] a24 = new Object[2];
        a24[0] = "html.fixedlayout.closebutton.tapzone.landscape.rectangle";
        a24[1] = new java.awt.Rectangle(687, 75, 38, 38);
        a15[8] = a24;
        Object[] a25 = new Object[2];
        a25[0] = "html.fixedlayout.blank.indicator.portrait.center.point";
        a25[1] = new java.awt.Point(300, 785);
        a15[9] = a25;
        Object[] a26 = new Object[2];
        a26[0] = "html.fixedlayout.blank.indicator.landscape.center.point";
        a26[1] = new java.awt.Point(400, 585);
        a15[10] = a26;
        Object[] a27 = new Object[2];
        a27[0] = "html.fixedlayout.blank.indicator.landscape.leftpage.center.point";
        a27[1] = new java.awt.Point(200, 585);
        a15[11] = a27;
        Object[] a28 = new Object[2];
        a28[0] = "html.fixedlayout.blank.indicator.landscape.rightpage.center.point";
        a28[1] = new java.awt.Point(600, 585);
        a15[12] = a28;
        Object[] a29 = new Object[2];
        a29[0] = "html.fixedlayout.blank.indicator.width";
        a29[1] = new Integer(8);
        a15[13] = a29;
        Object[] a30 = new Object[2];
        a30[0] = "html.fixedlayout.blank.indicator.xoffset";
        a30[1] = new Integer(38);
        a15[14] = a30;
        Object[] a31 = new Object[2];
        a31[0] = "html.fixedlayout.flash.indicator.portrait.point";
        a31[1] = new java.awt.Point(488, 688);
        a15[15] = a31;
        Object[] a32 = new Object[2];
        a32[0] = "html.fixedlayout.flash.indicator.landscape.point";
        a32[1] = new java.awt.Point(688, 488);
        a15[16] = a32;
        Object[] a33 = new Object[2];
        a33[0] = "html.fixedlayout.flash.indicator.width";
        a33[1] = new Integer(15);
        a15[17] = a33;
        Object[] a34 = new Object[2];
        a34[0] = "html.fixedlayout.flash.indicator.border";
        a34[1] = new Integer(1);
        a15[18] = a34;
        Object[] a35 = new Object[2];
        a35[0] = "htmlreader.font.size.list";
        float[] a36 = new float[8];
        a36[0] = 7f;
        a36[1] = 8f;
        a36[2] = 9f;
        a36[3] = 11f;
        a36[4] = 13f;
        a36[5] = 16f;
        a36[6] = 25f;
        a36[7] = 37f;
        a35[1] = a36;
        a15[19] = a35;
        Object[] a37 = new Object[2];
        a37[0] = "htmlreader.font.size.list.cjk";
        float[] a38 = new float[8];
        a38[0] = 7f;
        a38[1] = 8f;
        a38[2] = 9f;
        a38[3] = 11f;
        a38[4] = 13f;
        a38[5] = 16f;
        a38[6] = 25f;
        a38[7] = 37f;
        a37[1] = a38;
        a15[20] = a37;
        this.CONTENTS_DPI_167 = a15;
        Object[][] a39 = new Object[21][];
        Object[] a40 = new Object[2];
        a40[0] = "html.fixedlayout.panel.icon.bg.border.location.offset";
        a40[1] = new Integer(1);
        a39[0] = a40;
        Object[] a41 = new Object[2];
        a41[0] = "html.fixedlayout.panel.icon.bg.border.dimension.offset";
        a41[1] = new Integer(3);
        a39[1] = a41;
        Object[] a42 = new Object[2];
        a42[0] = "html.fixedlayout.panel.icon.portrait.rectangle";
        a42[1] = new java.awt.Rectangle(704, 960, 30, 40);
        a39[2] = a42;
        Object[] a43 = new Object[2];
        a43[0] = "html.fixedlayout.panel.icon.landscape.rectangle";
        a43[1] = new java.awt.Rectangle(960, 704, 40, 30);
        a39[3] = a43;
        Object[] a44 = new Object[2];
        a44[0] = "html.fixedlayout.closebutton.icon.filename";
        a44[1] = "/com/amazon/ebook/booklet/reader/impl/ui/resources/assets/yoshime3/ic onClose.png";
        a39[4] = a44;
        Object[] a45 = new Object[2];
        a45[0] = "html.fixedlayout.closebutton.icon.portrait.point";
        a45[1] = new java.awt.Point(608, 100);
        a39[5] = a45;
        Object[] a46 = new Object[2];
        a46[0] = "html.fixedlayout.closebutton.icon.landscape.point";
        a46[1] = new java.awt.Point(874, 100);
        a39[6] = a46;
        Object[] a47 = new Object[2];
        a47[0] = "html.fixedlayout.closebutton.tapzone.portrait.rectangle";
        a47[1] = new java.awt.Rectangle(608, 100, 50, 50);
        a39[7] = a47;
        Object[] a48 = new Object[2];
        a48[0] = "html.fixedlayout.closebutton.tapzone.landscape.rectangle";
        a48[1] = new java.awt.Rectangle(874, 100, 50, 50);
        a39[8] = a48;
        Object[] a49 = new Object[2];
        a49[0] = "html.fixedlayout.blank.indicator.portrait.center.point";
        a49[1] = new java.awt.Point(379, 1004);
        a39[9] = a49;
        Object[] a50 = new Object[2];
        a50[0] = "html.fixedlayout.blank.indicator.landscape.center.point";
        a50[1] = new java.awt.Point(512, 738);
        a39[10] = a50;
        Object[] a51 = new Object[2];
        a51[0] = "html.fixedlayout.blank.indicator.landscape.leftpage.center.point";
        a51[1] = new java.awt.Point(256, 738);
        a39[11] = a51;
        Object[] a52 = new Object[2];
        a52[0] = "html.fixedlayout.blank.indicator.landscape.rightpage.center.point";
        a52[1] = new java.awt.Point(768, 738);
        a39[12] = a52;
        Object[] a53 = new Object[2];
        a53[0] = "html.fixedlayout.blank.indicator.width";
        a53[1] = new Integer(10);
        a39[13] = a53;
        Object[] a54 = new Object[2];
        a54[0] = "html.fixedlayout.blank.indicator.xoffset";
        a54[1] = new Integer(50);
        a39[14] = a54;
        Object[] a55 = new Object[2];
        a55[0] = "html.fixedlayout.flash.indicator.portrait.point";
        a55[1] = new java.awt.Point(608, 874);
        a39[15] = a55;
        Object[] a56 = new Object[2];
        a56[0] = "html.fixedlayout.flash.indicator.landscape.point";
        a56[1] = new java.awt.Point(874, 608);
        a39[16] = a56;
        Object[] a57 = new Object[2];
        a57[0] = "html.fixedlayout.flash.indicator.width";
        a57[1] = new Integer(20);
        a39[17] = a57;
        Object[] a58 = new Object[2];
        a58[0] = "html.fixedlayout.flash.indicator.border";
        a58[1] = new Integer(1);
        a39[18] = a58;
        Object[] a59 = new Object[2];
        a59[0] = "htmlreader.font.size.list";
        float[] a60 = new float[8];
        a60[0] = 7.13f;
        a60[1] = 7.81f;
        a60[2] = 8.49f;
        a60[3] = 9.17f;
        a60[4] = 10.53f;
        a60[5] = 12.56f;
        a60[6] = 16.98f;
        a60[7] = 29.2f;
        a59[1] = a60;
        a39[19] = a59;
        Object[] a61 = new Object[2];
        a61[0] = "htmlreader.font.size.list.cjk";
        float[] a62 = new float[8];
        a62[0] = 7.13f;
        a62[1] = 8.15f;
        a62[2] = 8.83f;
        a62[3] = 9.51f;
        a62[4] = 10.19f;
        a62[5] = 11.88f;
        a62[6] = 16.98f;
        a62[7] = 29.2f;
        a61[1] = a62;
        a39[20] = a61;
        this.CONTENTS_DPI_212 = a39;
    }
}

Работает из коммандной строки, powershell'ом я не пользовался, мне было удобнее запускать из под cygwin, так как там есть python прямо во флаконе, но все остальное весьма похоже. Вот так примерно декомпилируется вся Java из киндловского firmware:

decomp_all.sh
:

Code:
AMAZON=$1/amazon/ebook

if [ "${AMAZON}" = "/amazon/ebook" ]; then
   echo "Please, specify source /opt directory"
   exit 1
fi

DESTDIR=$2

if [ "x${DESTDIR}" = "x" ]; then
   echo "Please, specify destination directory"
   exit 2
fi

if [ ! -d "${DESTDIR}" ]; then
   mkdir "${DESTDIR}"
fi

echo Processing lib
[ ! -d "${DESTDIR}/lib" ] && mkdir "${DESTDIR}/lib"

for f in `ls ${AMAZON}/lib/*.jar`
do
   file_jar=`basename ${f}`
   file_name=${file_jar%%.*}
   dest_dir=${DESTDIR}/lib/${file_name}

   if [ -d "${dest_dir}" ]; then
      echo "${file_jar} has been processed before, skipping"
   else
      echo "decompiling ${file_jar} into ${dest_dir}"
      mkdir "${dest_dir}"
      ./decomp_lib.sh "${1}" "${file_jar}" "${dest_dir}" > "${dest_dir}/all.log"
   fi
done

echo Processing booklet
[ ! -d "${DESTDIR}/booklet" ] && mkdir "${DESTDIR}/booklet"

for f in `ls ${AMAZON}/booklet/*.jar`
do
   file_jar=`basename ${f}`
   file_name=${file_jar%%.*}
   dest_dir=${DESTDIR}/booklet/${file_name}

   if [ -d "${dest_dir}" ]; then
      echo "${file_jar} has been processed before, skipping"
   else
      echo "decompiling ${file_jar} into ${dest_dir}"
      mkdir "${dest_dir}"
      ./decomp.sh  "${1}" "${file_jar}" "${dest_dir}" > "${dest_dir}/all.log"
   fi
done

decomp.sh
:

Code:
JAVA=/cygdrive/d/Java
DECOMP=${JAVA}/decomp/Krakatau/decompile.py

AMAZON=$1/amazon/ebook

if [ "${AMAZON}" = "/amazon/ebook" ]; then
   echo "Please, specify source's /opt directory"
   exit 1
fi

export JAVA_HOME=${JAVA}/jdk1.4.2_19

python -O ${DECOMP} -path `ls ${AMAZON}/lib/*.jar | tr '\n' ';'` -skip -out $3 ${AMAZON}/booklet/$2

decomp_lib.sh
:

Code:
JAVA=/cygdrive/d/Java
DECOMP=${JAVA}/decomp/Krakatau/decompile.py

AMAZON=$1/amazon/ebook

if [ "${AMAZON}" = "/amazon/ebook" ]; then
   echo "Please, specify source's /opt directory"
   exit 1
fi

export JAVA_HOME=${JAVA}/jdk1.4.2_19

python -O ${DECOMP} -path `ls ${AMAZON}/lib/*.jar | grep -ve "$2" | tr '\n' ';'` -skip -out $3 ${AMAZON}/lib/$2

Обратите внимание на старый Java SDK - КМК это важно.

Вот что дает "findstr /s reader.content.bottomMargin *" на результате (прошивка 5.4.5.1)
:

Code:
lib\PDFReader-impl\com\amazon\ebook\booklet\pdfreader\impl\PDFBookCont roller.java:        this.gw(i0, i0, a0.top, ((Integer)a.getObject("reader.content.bottomMargin")).intValue() - ((Integer)a.getObject("reader.progressbar.footer.height")).intValue()) ;
lib\PDFReader-impl\com\amazon\ebook\booklet\pdfreader\impl\PDFBookCont roller.java:        int i1 = Math.max(((Integer)a.getObject("reader.content.bottomMargin.pdf")).int Value() - ((Integer)a.getObject("reader.progressbar.footer.height")).intValue(), 0);
lib\ReaderSDK-impl\com\amazon\ebook\booklet\reader\impl\ReaderSDKImpl. java:            i2 = ((Integer)a0.getObject("reader.content.bottomMargin")).intValue() - ((Integer)a0.getObject("reader.progressbar.footer.height")).intValue() ;
lib\ReaderSDK-impl\com\amazon\ebook\booklet\reader\resources\ReaderRes ources.java:        a191[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl\com\amazon\ebook\booklet\reader\resources\ReaderRes ources.java:        a192[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl\com\amazon\ebook\booklet\reader\resources\ReaderRes ources.java:        a305[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl\com\amazon\ebook\booklet\reader\resources\ReaderRes ources.java:        a306[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-de_DE\com\amazon\ebook\booklet\reader\resources\Rea derResources_de.java:        a191[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-de_DE\com\amazon\ebook\booklet\reader\resources\Rea derResources_de.java:        a192[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-de_DE\com\amazon\ebook\booklet\reader\resources\Rea derResources_de.java:        a305[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-de_DE\com\amazon\ebook\booklet\reader\resources\Rea derResources_de.java:        a306[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-en_GB\com\amazon\ebook\booklet\reader\resources\Rea derResources_en_GB.java:        a191[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-en_GB\com\amazon\ebook\booklet\reader\resources\Rea derResources_en_GB.java:        a192[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-en_GB\com\amazon\ebook\booklet\reader\resources\Rea derResources_en_GB.java:        a305[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-en_GB\com\amazon\ebook\booklet\reader\resources\Rea derResources_en_GB.java:        a306[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-es_ES\com\amazon\ebook\booklet\reader\resources\Rea derResources_es.java:        a191[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-es_ES\com\amazon\ebook\booklet\reader\resources\Rea derResources_es.java:        a192[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-es_ES\com\amazon\ebook\booklet\reader\resources\Rea derResources_es.java:        a305[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-es_ES\com\amazon\ebook\booklet\reader\resources\Rea derResources_es.java:        a306[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-fr_FR\com\amazon\ebook\booklet\reader\resources\Rea derResources_fr.java:        a191[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-fr_FR\com\amazon\ebook\booklet\reader\resources\Rea derResources_fr.java:        a192[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-fr_FR\com\amazon\ebook\booklet\reader\resources\Rea derResources_fr.java:        a305[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-fr_FR\com\amazon\ebook\booklet\reader\resources\Rea derResources_fr.java:        a306[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-it_IT\com\amazon\ebook\booklet\reader\resources\Rea derResources_it.java:        a191[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-it_IT\com\amazon\ebook\booklet\reader\resources\Rea derResources_it.java:        a192[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-it_IT\com\amazon\ebook\booklet\reader\resources\Rea derResources_it.java:        a305[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-it_IT\com\amazon\ebook\booklet\reader\resources\Rea derResources_it.java:        a306[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-ja_JP\com\amazon\ebook\booklet\reader\resources\Rea derResources_ja.java:        a191[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-ja_JP\com\amazon\ebook\booklet\reader\resources\Rea derResources_ja.java:        a192[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-ja_JP\com\amazon\ebook\booklet\reader\resources\Rea derResources_ja.java:        a305[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-ja_JP\com\amazon\ebook\booklet\reader\resources\Rea derResources_ja.java:        a306[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-pt_BR\com\amazon\ebook\booklet\reader\resources\Rea derResources_pt.java:        a191[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-pt_BR\com\amazon\ebook\booklet\reader\resources\Rea derResources_pt.java:        a192[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-pt_BR\com\amazon\ebook\booklet\reader\resources\Rea derResources_pt.java:        a305[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-pt_BR\com\amazon\ebook\booklet\reader\resources\Rea derResources_pt.java:        a306[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-sq\com\amazon\ebook\booklet\reader\resources\Reader Resources_sq.java:        a191[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-sq\com\amazon\ebook\booklet\reader\resources\Reader Resources_sq.java:        a192[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-sq\com\amazon\ebook\booklet\reader\resources\Reader Resources_sq.java:        a305[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-sq\com\amazon\ebook\booklet\reader\resources\Reader Resources_sq.java:        a306[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-zh_CN\com\amazon\ebook\booklet\reader\resources\Rea derResources_zh.java:        a191[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-zh_CN\com\amazon\ebook\booklet\reader\resources\Rea derResources_zh.java:        a192[0] = "reader.content.bottomMargin.pdf";
lib\ReaderSDK-impl-zh_CN\com\amazon\ebook\booklet\reader\resources\Rea derResources_zh.java:        a305[0] = "reader.content.bottomMargin";
lib\ReaderSDK-impl-zh_CN\com\amazon\ebook\booklet\reader\resources\Rea derResources_zh.java:        a306[0] = "reader.content.bottomMargin.pdf";


_________________
Sony PRS (500,505,900,650,T1,Т2), Nook (ST, GL+), Kindle (PW2,3,4 Voyage, Oasis 2)
 
View user's profile ^

Barafu
Искушенный участник форума

Искушенный участник форума



Joined: 09 Nov 2010
Posts: 51



Posted: 06.08.2015 16:00    

А вот тут народ нашёл штатное решение вопроса ( так, как он стоит в заголовке )
 
View user's profile ^

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

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4642


Location: Москва

Posted: 06.08.2015 18:10    

Barafu
Это частное решение только для шрифта - на Kindle 3/4 и поля можно было настраивать...
_________________
Kobo Glo HD, Kobo Aura H2O, Kindle Paperwhite 2
 
View user's profile ^
Libroom Forum IndexAmazon KindleKindle PaperwhiteAll 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