# Программа создания электронной книги в формате fb2 за один клик

Виктор Кон (http://kohnvict.narod.ru)

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

Электронные книги можно читать в любом формате. Самый универсальный и самый мощный -- это формат pdf. Но у него есть одна плохая особенность. Она состоит в том, что он ориентирован все же на принтер, на печать, и у него жестко прописывается размер страницы, размер картинок и текста, и полная организация текста. Хотя картинку на экране можно масштабировать, но в этом случае многое может оказаться за кадром.

Кроме того, это вообще не книжный формат, у него нет информации для организации поиска книги в библиотеке, сортирования по теме, автору и так далее. Для чтения книг, в которых кроме текста и рисунков больше ничего нет, то есть нет математических формул, таблиц, ссылок, наиболее удобен формат fb2. В этом формате файл записывается печатными символами, то есть с ним можно работать в простом текстовом редакторе, но его размер не намного превышает размер самого текста в аски символах и размера картинки.

Этот формат является частным случаем наиболее популярного формата xml. Единственная сложность для создания книги в fb2 формате с помощью текстового редактора состоит в конвертировании картинок в mime BASE64 формат, который используется в почтовых программах. Тем не менее, даже без картинок, расстановка тегов xml вручную не очень приятная задача. Данная программа позволяет автоматизировать эту работу.

Она рассчитана на создание полноценной книги в формате fb2 из специально приготовленного текстового файла и одного рисунка обложки книги. Форматирование текстового файла простое и интуитивно понятное, а приготовление картинки обложки зависит от умения пользователя. Картинку легко приготовить с помощью других моих программ, а также на языке ACL. Вместе в тем форматирование текстового файла должно выполняться СТРОГО по инструкции. Ошибки программа не отслеживает и не исправляет.

Если текст будет сформатирован неправильно, то полученный fb2 файл также будет содержать ошибки. Это не так страшно при использовании таких программ-читалок, как Cool Reader или Universal Viewer, потому что они игнорируют ошибки и показывают все, что можно показать. Но главная программа FBReader перестает показывать книгу при первой же ошибке. У меня лично на смартфоне правильно работает только FBReader, поэтому важно иметь правильный файл.

Программа существует во всех вариантах интерпретатора ACL, начиная со старой версии vkACL. В коллекции программ ACLP она слегка модернизирована и имеет номер 64. Вообще говоря, для программы сам текст практически не надо форматировать. Точнее его форматирование естественное. Речь идет о шапке файла, которая имеет небольшие размеры и легко создается. Ниже я покажу и объясню что и как надо делать. Прежде всего надо приготовить два файла с одинаковым именем и с расширениями txt и jpg, например, "book25.txt" и "book25.jpg". Их можно записать в любую папку на компьютере. В старых версиях интерпретатора в начале работы программа откроет менеджер файлов на какой-то папке и предложит вам найти и отметить файл "book25.txt". В программе ACLP нужно просто указать имя этого файла.

В старых версиях результат работы в виде файла "book25.fb2" появится в той же самой папке за один клик на кнопке "Run". Затем по кнопке "Show" книгу можно посмотреть в той программе, которая у вас назначена на расширение файла "fb2". В программе ACLP все делается сразу, то есть книга создается и показывается. Перейдем к объяснению правил как надо приготовить текстовый файл "book25.txt". Вот пример такого файла

======================

`жанр == nonf_biography

`имя == Виктор

`отчество == Германович

`фамилия == Кон

`название == Моя жизнь, часть 7

`аннотация == В этой книге описаны интересные моменты . . .

`заголовок == Виктор Кон

МОЯ ЖИЗНЬ.

Воспоминания в свободной манере.

Часть 7. Конец первой жизни.

Предисловие^

Это седьмая часть моих воспоминаний. Я написал ее сразу же . . .

%

%

`глава == ^Докторская диссертация Ковальчука^

Михаил Ковальчук защитил докторскую . . .

В 6-й части я рассказал как мы с ним . . .

%

`конец ==

==================

Теперь комментарии. В шапке файла есть поля, которые в книге не показываются и служат только для организации библиотеки как базы данных для легкого поиска нужной книги и быстрого ознакомления с ее содержанием. Каждое поле начинается с символа "`" и заканчивается символами " == " (пробелы обязательны). Справа от такого поля надо поставить информацию, какую вы сами хотите поставить, причем одной строкой, без символов переноса строк.

Поле "`жанр == " указывает на жанр книги. Здесь требуется указать какой-либо жанр по коду из заранее специально составленного списка. Этот список можно найти в инструкциях по fb2 формату. Для удобства я привел список, который опубликован в книге Кондратовича [1], в Приложении. Нужно указывать код, а его смысл можно узнать в таблице.

Поля "имя", "отчество", "фамилия", "аннотация ", "название" -- достаточно простые. Их надо заполнять одной строкой, они показываются не в основной книге, а в ее преамбуле, если книга выбирается из библиотеки. Некоторые программы, например, "Universal Viewer" эту информацию не показывают.

Поле "заголовок" уже является частью книги, которая является отдельной секцией, или главой. Каждая такая секция начинается с новой страницы. В этом поле можно использовать перенос текста на новую строку. Но правила и тут очень жесткие. Это просто связано с принципом работы программы конвертирования. Полезно обсуждать эти правила одновременно с другим полем "глава".

Поле "глава" также описывает отдельную секцию книги, которая показывается с новой страницы. Оно должно начинаться с названия главы, которое имеет по краям символы "^". После второго символа начинается текст с новой строки. Каждый параграф текста пишется одной строкой. Если между параграфами текста нужно поставить пустую строку (что желательно для удобства чтения), то надо ставить пустую строку, в которой не должно быть ни одного символа, включая символы пробела, которые обычно не видны и тут легко сделать ошибку. Надо специально проверять, чтобы все пустые строки были абсолютно пустые.

Если пустую строку ставить не надо, например, в списках или в стихах, то новая строка должна начинаться с символа пробела. Это тоже обязательно, иначе будет ошибка. Формально это означает абзац (отступ текста), но фактически это необходимо для правильного форматирования книги. Полей "глава" может быть много. Между ними для удобства чтения можно ставить строки из одного символа "%". Такие строки игнорируются. И снова -- нужен только один символ, и никаких символов пробела.

В поле "заголовок" все точно так же как в поле глава, но только первый символ "^" у заголовка не ставится. Сам заголовок может содержать переносы строк (по таким же правилам, как и выше), а после заголовка может быть еще и текст. Обычно это та самая аннотация, которая уже показывается в книге.

Наконец, в самом конце книги должна быть строка с указанием поля "конец", но с пустым содержанием. И после этой строки не должно быть других строк.

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

В заключение я хочу отметить, что существуют различные программы, которые конвертируют любой текстовый формат книг в любой другой. В частности удобно конвертировать html файл. Но для этого надо уметь писать такой файл. Кроме того, каждый формат имеет свои особенности, и не в каждом есть то, что необходимо для другого формата. При конвертировании чистого текста в fb2 книга будет скучной.

Наиболее массовой программой такого типа является "any2fb2" [2]. Я сам ей пользовался для конвертирования картинок. Но вот в системе Windows 8.1 она работать не захотела, хотя в системе Windows 8.0 она работает. Другие программы я даже не пробовал.

Моя программа предлагает форматировать только главы и параграфы текста, а также списки (простым способом). В формате fb2 есть возможность специально форматировать стихи, ссылки, таблицы, цитаты, историю создания книги и многое другое. Но это уже совсем не обязательно. Разумно пропускать пустую строку между параграфами, а стихи и списки писать параграфами без пустой строки. Ссылки можно делать обычным образом, а ссылки на интернет при чтении книги не актуальны.

Фактически форматирование книги делается примерно так же, как и форматирование вэб-страниц, так как язык xml близок к html. Но главная цель моей программы -- очень быстро превратить простой текст в электронную книгу, удобную для чтения. Поэтому сложные приемы форматирования можно уже дополнительно делать вручную, используя, например, информацию из книги [1].

Образцы файлов текста и картинки "mylife.txt" и "mylife.jpg" можно увидеть в папке pro/data программы. Всегда желательно иметь относительно малый размер файла книги. По этой причине я предлагаю использовать только одну картинку для обложки книги. Но и ее неразумно делать слишком большой. Вполне достаточный размер 300*400 пикселей. Ссылки

[1] М. И. Кондратович, Создание электронных книг в формате FictionBook 2.1: Практическое руководство., 2007, www.litru.ru

[2] http://convertera.net/load/text/any2fb2/4-1-0-88

ПРИЛОЖЕНИЕ

Cписок жанров книг, сначала код, потом его смысл по английски, потом то же самое по русски

sf_history - Alternative history - Альтернативная история

sf_action - Action - Боевая фантастика

sf_epic - Epic- Эпическая фантастика

sf_heroic - Heroic - Героическая фантастика

sf_detective - Detective - Детективная фантастика

sf_cyberpunk - Cyberpunk - Киберпанк

sf_space - Space - Космическая фантастика

sf_social - Social-philosophical - Социально-философская фантастика

sf_horror - Horror & mystic - Ужасы и Мистика

sf_humor - Humor - Юмористическая фантастика

sf_fantasy - Fantasy - Фэнтези

sf - Science Fiction - Научная Фантастика

det_classic - Classical detectives - Классический детектив

det_police - Police Stories - Полицейский детектив

det_action - Action - Боевик

det_irony - Ironical detectives - Иронический детектив

det_history - Historical detectives - Исторический детектив

det_espionage - Espionage detectives - Шпионский детектив

det_crime - Crime detectives - Криминальный детектив

det_political - Political detectives - Политический детектив

det_maniac - Maniacs - Маньяки

det_hard - Hard-boiled - Крутой детектив

thriller - Thrillers - Триллер

detective - Detectives - Детектив, не относящийся в прочие категории.

prose_classic - Classics prose - Классическая проза

prose_history - Historical prose - Историческая проза

prose_contemporary - Contemporary prose - Современная проза

prose_counter - Counterculture - Контркультура

prose_rus_classic - Russian classics prose - Русская классическая проза

prose_su_classics - Soviet classics prose - Советская классическая проза

love_contemporary - Contemporary Romance - Современные любовные романы

love_history - Historical Romance - Исторические любовные романы

love_detective - Detective Romance - Остросюжетные любовные романы

love_short - Short Romance - Короткие любовные романы

love_erotica - Erotica - Эротика

adv_western - Western - Вестерн

adv_history - History - Исторические приключения

adv_indian - Indians - Про индейцев

adv_maritime - Maritime Fiction - Морские истории

adv_geo - Travel & geography - Путешествия и география

adv_animal - Nature & animals - Природа и животные

adventure - Other - Прочие приключения (то, что не вошло в другие категории)

child_tale - Fairy Tales - Сказка

child_verse - Verses - Детские стихи

child_prose - Prose - Детская проза

child_sf - Science Fiction - Детская фантастика

child_det - Detectives & Thrillers - Детские остросюжетные

child_adv - Adventures - Детские приключения

child_education - Educational - Детская образовательная литература

children - Other - Прочая детская литература (то, что не вошло в другие категории)

poetry - Poetry - Поэзия

dramaturgy - Dramaturgy - Драматургия

antique_ant - Antique - Античная литература

antique_european - European - Европейская старинная литература

antique_russian - Old russian - Древнерусская литература

antique_east - Old east - Древневосточная литература

antique_myths - Myths. Legends. Epos - Мифы. Легенды. Эпос

antique - Other - Прочая старинная литература (то, что не вошло в другие категории)

sci_history - History - История

sci_psychology - Psychology - Психология

sci_culture - Cultural science - Культурология

sci_religion - Religious studies - Религиоведение

sci_philosophy - Philosophy - Философия

sci_politics - Politics - Политика

sci_business - Business literature - Деловая литература

sci_juris - Jurisprudence - Юриспруденция

sci_linguistic - Linguistics - Языкознание

sci_medicine - Medicine - Медицина

sci_phys - Physics - Физика

sci_math - Mathematics - Математика

sci_chem - Chemistry - Химия

sci_biology - Biology - Биология

sci_tech - Technical - Технические науки

science - Other - Прочая научная литература (то, что не вошло в другие категории)

comp_www - Internet - Интернет

comp_programming - Programming - Программирование

comp_hard - Hardware - Компьютерное "железо" (аппаратное обеспечение)

comp_soft - Software - Программы

comp_db - Databases - Базы данных

comp_osnet - OS & Networking - ОС и Сети

computers - Other - Прочая околокомпьтерная литература (то, что не вошло в другие категории)

ref_encyc - Encyclopedias - Энциклопедии

ref_dict - Dictionaries - Словари

ref_ref - Reference - Справочники

ref_guide - Guidebooks - Руководства

reference - Other - Прочая справочная литература (то, что не вошло в другие категории)

nonf_biography - Biography & Memoirs - Биографии и Мемуары

nonf_publicism - Publicism - Публицистика

nonf_criticism - Criticism - Критика

design - Art & design - Искусство и Дизайн

nonfiction - Other - Прочая документальная литература (то, что не вошло в другие категории)

religion_rel - Religion - Религия

religion_esoterics - Esoterics - Эзотерика

religion_self - Self-improvement - Самосовершенствование

religion - Other - Прочая религионая литература (то, что не вошло в другие категории)

humor_anecdote - Anecdote - Анекдоты

humor_prose - Prose - Юмористическая проза

humor_verse - Verses - Юмористические стихи

humor - Other - Прочий юмор (то, что не вошло в другие категории)

home_cooking - Cooking - Кулинария

home_pets - Pets - Домашние животные

home_crafts - Hobbies & Crafts - Хобби и ремесла

home_entertain - Entertaining - Развлечения

home_health - Health - Здоровье

home_garden - Garden - Сад и огород

home_diy - Do it yourself - Сделай сам

home_sport - Sports - Спорт

home_sex - Erotica & sex - Эротика, Секс

home - Other - Прочее домоводство (то, что не вошло в другие категории)

.