[Все] [А] [Б] [В] [Г] [Д] [Е] [Ж] [З] [И] [Й] [К] [Л] [М] [Н] [О] [П] [Р] [С] [Т] [У] [Ф] [Х] [Ц] [Ч] [Ш] [Щ] [Э] [Ю] [Я] [Прочее] | [Рекомендации сообщества] [Книжный торрент] |
Конвертирование fb2 в rtf. Возник вопрос.
Попытка изложить все на трезвую голову (см. первый коммент.)
Та-да-да-да... Подумал. Может при перегонки comments в notes добавлять к началу коммента спец значок? Затем в ворде попробовать Найти->Выделить все элементы найденные в... ищем этот спец значок в тексте сноски и перегоняем ее в концевые... Или не получится... Думать надо.
В природе уже существует утилитка командной строки fb2Notes2Body, позволяющая обрабатывать fb2-файл таким образом, чтобы примечания и комментарии, находящиеся в нём, перемещались в тело fb2-файла. Она была сделана для чтения на устройствах, которые (пока) не поддерживают переход по сноскам. Её автор — ditkovski.
http://lbookv8.at.ua/load/soft_dlja_podgotovki_knig/fb2notes2body/4-1-0-11
Совет от автора на The_ebook (об автоматизации процесса):
http://www.the-ebook.org/forum/viewtopic.php?p=271118&sid=7bd4d46d8c28bdbb63a153b8f0403bb5
Может быть, она Вам поможет — у Вас получится fb2-файл, из которого, возможно, м.б. сделан rtf... Я её не пробовал.
F.CYXOB
В новых версиях ФБЕ перенос примечаний в скобки реализован на уровне обычного скрипта
Да, Wotti прав. Перегонять в комменты и сноски в скобки - это FBE умеет и умеет олично. Вопрос в том чтобы на автомате получить из моего файла полноценный rtf с обычными и концевыми сносками.
Попробую зати с другого конца. Вот есть у меня утилита FB2ANY. Там в корне лежит файл FB2_2_rtf.xsl (вполне себе текстовый). Ежели я его поправлю, то, видимо и ход конвертирования поменяется, правильно?
За конвертирование сносок, по-видимому, отвечает следующий кусок кода:
- <!-- link
-->
- <xsl:template match="fb:a">
- <xsl:choose>
- <xsl:when test="(@type) = 'note'">
<xsl:variable name="IsNumbered" select="translate(.,'123456789[]{}()_-%#^*><','00000000000000000000000')+1" />
- <xsl:choose>
- <xsl:when test="$IsNumbered">
{\up6 \chftn}{\footnote
<xsl:value-of select="$RTF_style_FootNote" />
{
<xsl:value-of select="$RTF_style_FootNote" />
\up6 \chftn }
</xsl:when>
- <xsl:otherwise>
\ul\i1
<xsl:apply-templates />
\ul0\i0{\footnote
<xsl:value-of select="$RTF_style_FootNote" />
- <xsl:if test="not(key('note-link',substring-after(@xlink:href,'#'))/fb:title)">
{
<xsl:value-of select="$RTF_style_FootNote" />
\up6
<xsl:apply-templates />
}
</xsl:if>
</xsl:otherwise>
</xsl:choose>
- <xsl:choose>
- <xsl:when test="$IsNumbered">
- <xsl:for-each select="key('note-link',substring-after(@xlink:href,'#'))">
<xsl:apply-templates mode="footnote" select="*[name() != 'title']" />
</xsl:for-each>
</xsl:when>
- <xsl:otherwise>
- <xsl:for-each select="key('note-link',substring-after(@xlink:href,'#'))">
<xsl:apply-templates mode="footnote" />
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
}
</xsl:when>
- <xsl:otherwise>
<xsl:apply-templates />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Что тут нужно изменить чтобы (для начала) он хоть комменты за сноски начал считать?
ЗЫ: Я в програмировании под ДОС немного разбиараюсь - fortran, pascal. Плюс в Matlabe постоянно скрипты для расчета пишу. С программированием под Windows дальше создания эл. версии игры в "циферки" (тупейшее развлечение школьной поры!) дело не продвинулось. Т.е. в принципе скрипт понять могу. Только такой язык вижу в первый раз. Объясните, пожалуйста, популярно, чего там написано.
(Или книжку хорошую по xsl подскажите)
UPD: Хе-хе! Реально работает. Поменял
<xsl:when test="$IsNumbered">
{\up6 \chftn}{\footnote\ftnalt
<xsl:value-of select="$RTF_style_FootNote" />
{
<xsl:value-of select="$RTF_style_FootNote" />
\up6 \chftn }
</xsl:when>
- <xsl:otherwise>
\ul\i1
<xsl:apply-templates />
\ul0\i0{\footnote\ftnalt
<xsl:value-of select="$RTF_style_FootNote" />
- <xsl:if test="not(key('note-link',substring-after(@xlink:href,'#'))/fb:title)">
{
<xsl:value-of select="$RTF_style_FootNote" />
\up6
<xsl:apply-templates />
}
Теперь вместо обычных сносок на выходе в rtf имеем концевые. Теперя думать надо как код до ума довести. Жду подсказок. Help! F1! и т.д.
Бля! Я точно мегабизон! В первый раз вижу xsl, однако же удалось добиться результата. Если код модифицировать так:
<!-- link -->
<xsl:template match="fb:a">
<xsl:choose>
<xsl:when test="(@type) = 'note'">
<xsl:variable name="IsNumbered" select="translate(.,'123456789[]{}()_-%#^*><','00000000000000000000000')+1"/>
<xsl:choose>
<xsl:when test="$IsNumbered">{\up6 \chftn}{\footnote <xsl:value-of select="$RTF_style_FootNote"/>{<xsl:value-of select="$RTF_style_FootNote"/>\up6 \chftn } </xsl:when>
<xsl:otherwise>\ul\i1 <xsl:apply-templates/>\ul0\i0{\footnote <xsl:value-of select="$RTF_style_FootNote"/>
<xsl:if test="not(key('note-link',substring-after(@xlink:href,'#'))/fb:title)">{<xsl:value-of select="$RTF_style_FootNote"/>\up6 <xsl:apply-templates/> }</xsl:if>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="$IsNumbered"><xsl:for-each select="key('note-link',substring-after(@xlink:href,'#'))"><xsl:apply-templates mode="footnote" select="*[name() != 'title']"/></xsl:for-each></xsl:when>
<xsl:otherwise><xsl:for-each select="key('note-link',substring-after(@xlink:href,'#'))"><xsl:apply-templates mode="footnote"/></xsl:for-each></xsl:otherwise>
</xsl:choose>
}
</xsl:when>
<xsl:otherwise>
<xsl:variable name="IsNumbered" select="translate(.,'123456789[]{}()_-%#^*><','00000000000000000000000')+1"/>
<xsl:choose>
<xsl:when test="$IsNumbered">{\up6 \chftn}{\footnote\ftnalt <xsl:value-of select="$RTF_style_FootNote"/>{<xsl:value-of select="$RTF_style_FootNote"/>\up6 \chftn } </xsl:when>
<xsl:otherwise>\ul\i1 <xsl:apply-templates/>\ul0\i0{\footnote\ftnalt <xsl:value-of select="$RTF_style_FootNote"/>
<xsl:if test="not(key('note-link',substring-after(@xlink:href,'#'))/fb:title)">{<xsl:value-of select="$RTF_style_FootNote"/>\up6 <xsl:apply-templates/> }</xsl:if>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="$IsNumbered"><xsl:for-each select="key('note-link',substring-after(@xlink:href,'#'))"><xsl:apply-templates mode="footnote" select="*[name() != 'title']"/></xsl:for-each></xsl:when>
<xsl:otherwise><xsl:for-each select="key('note-link',substring-after(@xlink:href,'#'))"><xsl:apply-templates mode="footnote"/></xsl:for-each></xsl:otherwise>
</xsl:choose>
}
</xsl:otherwise>
</xsl:choose>
</xsl:template>
то программа начинает как миленькая пихать сноски в сноски, а комментарии в концевые сноски. Уря. Только, на самом деле, все это работает лишь в элементарном случае и отсутсвии гиперссылок.
Слушайте, ну помогите! Есть же здесь люди, которые в xsl рабираются хорошо!
Сам с собоютихую я веду беседу...
Короче скрипт xsl я почти допилил. То что нужно он теперь делает. Список исправлений:
1. Не писать информацию из body comments в основной текст файла rtf
2. Если в основном body есть <section id="xxx"> и <p id="xxx">, то в этом месте rtf ставим закладки.
3. Если найден тег сноски типа <a, то возможны три варианта:
- Если номер сноски стоит после '{', то это комментарий - его мы превращаем в концевую сноску.
- Если тип сноски 'note', то ее превращаем в обыкновенную сноску.
- Если ни то и ни другое - то это гиперссылка. Связываем ее с закладкой в rtf файле.
Все. Остальное осталось по-прежнему. Причем скрипт нормально работает. Осталась маленькая проблема. Дело в том, что в rtf внутрення сноска записывается так:
{\field{\*\fldinst {\lang1033\langfe1049\langnp1033\insrsid4413917 HYPERLINK \\l "h_444" }{\lang1033\langfe1049\langnp1033\insrsid4413917\charrsid4413917 {\*\datafield
08d0c9ea79f9bace118c8200aa004ba90b02000000080000000600000068005f003400340034000000}}}
И это жуть. Особенно datafield. Т.е. я, конечно, понял что здесь записаны некие данные в шестнадцатиричном представлении. И даже догадался, что храниться в последних байтах - адрес закладки, на кторую ссылается hyperlink.
0006 - число символов + 1
0068 = 'h'
005f = '_'
0034 = '4'
0034 = '4'
0034 = '4'
Вопрос в том, что означает остальная биллибердистика и является ли предществующий набор байтов постоянной величиной (у меня в нескольких файлах вроде получилось одинаково).
И еще вопрос: как в xsl перегнать символ в шестнадцатиричную систему, а потом снова сохранить как символ?
Не молчите, здесь темно и страшно.
Вложение | Размер |
---|---|
fb2_2_rtf.zip | 3.25 КБ |
Извините, прочитала (неоднократно!) все, естественно, ничего не поняла...
Вложение в последнем посте поможет сконвертировать файл в формате Fb в обычный RTF?
Заранее спасибо за ответ!
Вложение в последнем посте поможет сконвертировать файл в формате Fb в обычный RTF?
Заранее спасибо за ответ!
Если Вам нужно просто из fb2 в rtf конвертировать тексты, установите fb2any (http://www.gribuser.ru/xml/fictionbook/2.0/software/FB2Any.exe)
Лишние форматы можно "выключить" галочкой при установке.
После установки программы при щелчке правой кнопкой на fb2-файле появится пункт Convert to rtf.
Вложение в последнем посте поможет сконвертировать файл в формате Fb в обычный RTF?
Заранее спасибо за ответ!
Если Вам нужно просто из fb2 в rtf конвертировать тексты, установите fb2any (http://www.gribuser.ru/xml/fictionbook/2.0/software/FB2Any.exe)
Лишние форматы можно "выключить" галочкой при установке.
После установки программы при щелчке правой кнопкой на fb2-файле появится пункт Convert to rtf.
Посмотрите первый пост. Попробовал изложить более внятно.
Попробовал изложить более внятно.
Спасибо!
Дело не в Вашем невнятном изложении, а в моей..., ну, в общем, не буду о себе так плохо прилюдно...
Конвертацию попробую.
Попытка изложить все на трезвую голову.
Итак, у нас есть fb2 файл следующего вида:
(См. primer.zip)
Который, как мы видим, содержит сноски, комментарии и гиперссылку.
Теперь скачиваем fb2Any http://www.gribuser.ru/xml/fictionbook/2.0/software/FB2Any.exe, устанавливаем и пытаемся сконвертировать, используя стандартный xsl скрипт, который идет вместе с программой (см. fb2_2_rtf1.zip).
В результате получаем такой rtf:
(См. primer1.zip)
Как вы видите, конвертер проигнорировал гиперссылку и комментарий. Текст комментария вошел в основной текст книги. И только сноски (notes) проинтерпретированы как сноски.
Теперь заменяем xsl на мой, слегка модифицированный (см. fb2_2_rtf2.zip). В результате, после конвертирования, имеем:
Со сносками превращенными в сноски, комментарием превращенным в концевые сноски и рабочей гиперссылкой на низлежащий кусок текста.
(см. primer2.zip).
Вот, собственно, и все, о чем я пытался сказать. На моих fb2 файлах скрипт срабатывет нормально. Правда остаются gt; и lt; и, кроме того, отсутствует разделитль сносок (унаследовано от исходного скрипта). Но после пяти секунд работы с вордом - получается вполне приличный файл (который я на всякий случай пересохраняю в doc). Все.
Вложение | Размер |
---|---|
primer.zip | 3.94 КБ |
primer1.zip | 3.55 КБ |
primer2.zip | 3.82 КБ |
fb2_2_rtf1.zip | 2.98 КБ |
fb2_2_rtf2.zip | 3.74 КБ |
2.png | 6.65 КБ |
Последние комментарии
20 минут 49 секунд назад
1 час 31 минута назад
2 часа 56 минут назад
3 часа 11 минут назад
3 часа 20 минут назад
3 часа 43 минуты назад
3 часа 56 минут назад
4 часа 21 секунда назад
4 часа 5 минут назад
4 часа 20 минут назад