PyRTF – библиотека для создания RTF (Rich Text Format) файлов средствами языка Python.
Краткое описание:
PyRTF – это библиотека для создания RTF документов непосредственно из Python скриптов. У библиотеки нет внешних зависимостей (написана на чистом Python), в тестах разработчиков она показала себя вполне стабильным и быстрым инструментом.
PyRTF была протестирована на следующих ОС: W2K, WinXP, GNU/Linux, OpenBSD, FreeBSD и на следующих текстовых редакторах: OpenOffice, Word95, Word97, Word2000, WordXP и MacWord.
Функционал:
- Стили:
Предоставляется стандартный набор стилей, но допускается создание произвольных наборов стилей, что позволяет генерировать комплекты документов, которые соответствуют нормативам оформления для конкретного предприятия.
Стили могут быть переопределены практически на любом уровне, таким образом базовая структура документа может быть привязана к некоторому набору стилей, а переопределение стилей производится только в необходимых местах. Например жирное начертание, курсив, подчеркивание и т.д. могут быть применены лишь к тем элементам, которые того требуют.
- Разделы документа:
Документы могут содержать многочисленные разделы, каждый раздел может обладать своим собственным размером страницы, набором стилей, верхним и нижним колонтитулом. Поддерживаются и колонтитулы, которые применяются только к первой странице раздела.
- Таблицы:
Имеется всесторонняя поддержка таблиц, в PyRTF реализованы практически все особенности оформления таблиц входящие в спецификацию формата RTF. Таблицы конструируются из базовых “строительных блоков”, таким образом, если вы ознакомились с основами, то таблицы относительно легки в обхождении.
- Изображения:
Поддерживается встраивание как растровых изображений (форматов PNG и JPG), так и векторных (EMF).
PDF формат идеально подходит для кроссплатформенной печати, но если пользователю необходимо оперативно внести коррективы в сгенерированный документ, то тут возникают проблемы. И в данном случае чуть ли не единственным выбором становится формат RTF - редакторы под все платформы имеются в избытке, спецификация формата открытая, возможности, конечно не такие богатые как в PDF, да и гарантий, что он будет выглядеть “один-в-один” на разных платформах тоже никто не даст. Ну, всегда приходится чем-то жертвовать.
Итак, PyRTF. Несмотря на заброшенность проекта (последние изменения датируются началом 2006 года) и “зеленый” номер версии (0.46), возможности у неё, в целом, очень даже зрелые, да и в плане стабильности особо не придерешься. Самый большой недостаток - это практически полное отсутствие документации - в наличии имеется лишь подборка из примеров, демонстрирующих основные возможности. Еще одна неприятная мелочь - отсутствие поддержки юникода. Из возможностей мне остро недостает только так называемой “text box” - это такие фреймы в которые можно помещать текст и располагать их в любом месте листа хоть поверх друг друга (если дойдут руки, то попробую самостоятельно реализовать этот элемент).
Пришлось потратить некоторое время на “русификацию” PyRTF, чтобы в RTF файлах отображалась кириллица вместо кракозябр. Вот что для этого нужно сделать:
1) В модуле pyRTF/PropertySets.py находим класс Font:
class Font :
def __init__( self, name, family, character_set = 0, pitch = None, panose = None, alternate = None ) :
2) В модуле pyRTF/Elements.py находим строки идущие подряд (всего 28 штук):
StandardFonts.append( Font( 'Arial', 'swiss' , 0, 2, '020b0604020202020204' ) )
...
...
StandardFonts.append( Font( 'Verdana', 'swiss' , 0, 2, '020b0604030504040204' ) )
3) В модуле pyRTF/Constants.py находим класс Languages и атрибут DEFAULT=EnglishAustralian меняем на DEFAULT=Russian
4) В модуле pyRTF/Renderer.py находим класс Renderer, у него ищем метод _WriteDocument( self ) и в нем в строчке
self._write( "{\\rtf1\\ansi\\ansicpg1252\\deff0%s\n" % settings )
Ну вот, собственно, и все по русификации.