Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Обратите внимание, что деление на классы происходит по типу содержимого, а не документа, то есть, например, OODoc::Text используется как для ODT, так и для ODS. На вершине иерархии находится класс OpenOffice::OODoc::Document, наследующий от OpenOffice::OODoc::Text, Image и Styles. Таким образом, экземпляром OODoc::Document может быть представлен практически любой документ, будь то текст, электронная таблица или презентация. Неприятным исключением из этого перечня являются диаграммы – с ними OpenOffice::OODoc работать не умеет (хочется надеяться, что пока).
Из всего перечисленного выше наиболее развитым
интерфейсом обладает OODoc::Text. Для большинства текстовых элементов
поддерживаются следующие действия: вставить/добавить в конец документа
(insertXXX/appendXXX), найти по стилю/содержимому/чему-то еще (selectByXXX),
получить список всех элементов заданного типа/конкретное вхождение по его
номеру (getXXX), удалить (removeXXX), а также некоторые другие. Интересно, что
в объектной модели OpenOffice::OODoc методы часто приписываются не к самому
элементу, а к документу в целом. Так, например, для получения текстового
содержимого элемента используется конструкция $document->getText($element),
а не $element->getText, как можно было бы ожидать.
Прослойки, реализуемые указанными выше классами, весьма упрощают выполнение типовых операций над документом, но при этом являются сравнительно «тонкими», так что знание основ формата все же не помешает. Спецификацию OpenDocument (в форматах ODT и PDF) можно загрузить с [4], а также [5], если вас интересует неофициальный русскоязычный перевод.
Думаю, на сегодня теории достаточно. В составе
POD-документации OpenOffice::OODoc имеется страница Intro, помогающая глубже
разобраться с возможностями модуля. Мы же посмотрим, как применить его к
решению стандартных задач. Приведенные примеры были сделаны нарочито простыми,
но в то же время расширяемыми, так что при необходимости их можно превратить в
полноценные программы. Полный исходный код можно скачать на сайте журнала
Первый шаг
OpenOffice::OODoc позволяет как создавать новые документы «с нуля» (точнее, на основе заранее подготовленных шаблонов, хранящихся в виде несжатых XML-файлов в каталоге, путь к которому возвращается функцией ooTemplatePath()), так и преобразовывать уже существующие. Традиционно, вторая задача считается более сложной, поэтому мы сфокусируемся именно на ней.
Пожалуй, первое, что приходит в голову в этой связи – это чтение файла OpenDocument и вывод его в виде простого текста. Соответствующий скрипт занимает всего восемь строк:
1: #!/usr/bin/perl
2: use strict;
3: use OpenOffice::OODoc;
4: my $file = shift;
5: die "Usage: $0 filename.odt" unless ($file);
6: my $doc = ooDocument(file => $file, member => 'content');
7: $doc->outputDelimitersOn();
8: print scalar $doc->getTextContent();
Программа принимает имя файла в качестве единственного аргумента командной строки и выводит на консоль его текстовое содержимое.