Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
6: } elsif ($st && $st->getName eq 'text:list-level-style-bullet') {
7: $is_ordered = 0;
8: } else {
9: warn 'Unknown type of the list: '. $st . " ";
10: }
Как было отмечено выше, OpenDocument различает эти два типа списков на уровне стилей; параметры нумерованных списков задаются при помощи элемента text:list-level-style-number, а ненумерованных – text:list-level-style-bullet. XPath-выражение в строке 3 просто возвращает элемент стиля, соответствующий списку заданного уровня $level (а уровень, в свою очередь, определяется глубиной вложенности списков друг в друга).
По шаблону
Другой распространенной задачей является генерация документов по шаблону. В простейшем случае она сводится к подстановке имен, дат, адресов, сумм, реквизитов и другой уместной информации в письма, извещения, платежные поручения и т. п. Эта задача решается средствами «чистого» OpenOffice.org благодаря механизму полей, которые могут заполняться даже из внешней базы данных, но если вы чувствуете, что для решения данной проблемы лучше создать скрипт, то его простейший вариант может выглядеть так:
my $doc = ooDocument(file => $i_file, member => 'content');
$doc->userFieldValue('someField', 'someValue');
$doc->save($o_file);
Данный код открывает документ, имя которого содержится в $i_file, присваивает полю someField значение «someValue» и сохраняет его под именем $o_file. Документ-шаблон готовится обычным образом, вставка полей происходит через меню «Вставка -> Поле -> Дополнительно -> Переменные -> Поле пользователя» (в OpenOffice.org 2.3 Pro).
Несколько более интересным представляется вариант, когда на лету модифицируется не только содержимое, но и сама структура документа. Здесь опять удобно провести аналогию с динамическими веб-страницами. В простейшем случае они представляют собой HTML-код, перемежающийся с инструкциями по его созданию, обрамленными специальными тегами. Тот же подход, но на языке OpenDocument, может звучать так: шаблон представляет собой обычный документ OpenDocument со вставками кода на Perl, выделенными специальным стилем. Отметим, что похожая идея реализуется библиотекой с красивым именем pod (Pyhton Open Document), но для языка Pyhton [7].
Чтобы создать шаблон, подобный предложенному выше, откройте OpenOffice.org Writer и создайте новый стиль текста, например, на базе обычного Базового стиля. Назовите его как-нибудь вроде EmbeddedPerl (пробелы допустимы, но нежелательны – в коде нашего скрипта их придется менять на _20_). В качестве «Следующего стиля» можно указать все тот же «Базовый» – тогда при нажатии <Enter> будет автоматически начинаться обычный абзац. Для стиля EmbeddedPerl удобно установить моноширинный шрифт и цвет фона, отличный от стандартного. Однако OOo Writer – не IDE, поэтому при вводе кода следует соблюдать некоторые меры предосторожности: всегда использовать «мягкий» перевод строки (<Shift + Enter>) и отключить автозамену кавычек («Сервис -> Автозамена -> Параметры»).