LXF121 OpenOffice
Материал от Linuxformat.
|
СъдържаниеOOo: Работи автоматичноЧесто използваме компютър, за да създадем множество различни версии на един и същи документ, но ръчните актуализации на вашите файлове имат смисъл само ако не са чести. В крайна сметка има много начини да спестите ценни секунди - както показахме в LXF119, когато разгледахме автоматичните актуализации на електронни таблици. И в този урок ще поемем по-обемна задача: ще прехвърлим набор от „сурови“ данни в някакъв полезен документ с минимални усилия. Освен това ще избегнем отварянето наOpenOffice.org(е, почти) благодарение на свойствата на неговия стандартен файлов формат: OpenDocument или ODF. ODF документът е просто zip файл със снимки и макроси в техните собствени директории, а самият текст - написан в XML формат - е във файл, нареченcontent.xml. За да създадете нова версия на документа, отворете архива, променете текста вcontent.xml, поставете няколко нови изображения в тяхната директория и опаковайте отново. Тук ще ви покажем как да постигнете това с ODF текстови документи и наистина прости шел скриптове. Тестове с множество възможности за избор в ODFБлагодарение на ODF можете да създавате документи без OpenOffice.org, но все пак ви трябва OOo, за да напишете първоначалния шаблон.Нека започнем с едно практическо предизвикателство: създаване на форматиран тест с избираем отговор с произволно генерирани въпроси. За по-лесно нека приемем, че тестът съдържа само един въпрос и едокумент, съдържащ името на теста, неговото описание, въпрос и три варианта за отговор, всеки със собствена снимка и подпис. Неговият файл (нека го кръстимsample_multiple_choice.odt) ще бъде нашият оригинален шаблон. За да използваме файла за генериране на нашия тест във формат OpenDocument, първо трябва да напишем всички редове, които ще бъдат включени в теста, в ASCII файл (нека го наречемmy_test_data_1), както следва: Форматът на този файл е доста прост, но има няколко неща, които трябва да се отбележат: първо, това е напълно валиден команден синтаксис на shell. Всеки ред от този файл присвоява стойност на някаква променлива на средата, която ще се използва в основния скрипт. Второ, въпреки че няма общи правила, внимавайте с използването на кавички. Например, в последния ред трябва да използвате двойни кавички, тъй като единичният [вече се намира в текста на въпроса или трябва да бъде екраниран, заменен с \', - прибл. изд.]. Подготовка на снимкиВъв файловете OpenDocument няма тайни: когато ги декомпресирате, текстът, метаданните и снимките се виждат веднага.Освен редовете, трябва да добавите и три картинки – в реда, в който се появяват в документа. В нашия пример те са в директориятаLinux_Test_Picturesи сме ги нарекли съответно01_ubuntu_logo.png, 02_mandriva_logo.pngи03_fedora_logo.png. Номерирането е необходимо, за да се гарантира, че се използват в правилния ред. След като всичко е на мястото си, изпълнете следната команда: за да завършите първия си тест. Нека използваме скрипта по различен начинНай-хубавото на този процес е, че методът е приложим за всички случаи, стига структурата на документа да е непроменена. Като доказателство поставяме три съответстващи снимки (първатапланини, второто е плажът, третото е исторически места) в директориятаHoliday_Picturesи добавете следния ASCII текст към файл с имеmy_holiday_data_1: Завършете процеса, като стартирате: Не е ли готино? Сега, за да генерирате 1000 подобни файла, всичко, което остава, е да стартирате скрипта по-долу в цикъл. Ето резултата от повторното изпълнение на нашия прост скрипт за обработка на OpenDocument: оригиналният шаблон е изпълнен с динамични данни, всички безOpenOffice.orgСкриптътtest_generator.shприема като аргумент ODF шаблон, ASCII файл, съдържащ текстови низове и всякакви изображения, които да бъдат поставени в новия документ. Първите 10 реда определят временна директория и копират всички необходими файлове в нея. Командитеshiftна редове9и10премахват ODF шаблона и файла с данни от променливата на списъка с аргументи,$@. Това е необходимо, за да се създаде цикъл в редове14до19, обработвайки само графични файлове. Това създава локално копие на всяка картина, но по-важната част е в ред18: генерира файлnew_pictures_list, който изглежда като Скоро ще научите защо трябва да създадете такъв файл, но засега нека се върнем към кода. Редове22до28ни преместват в директориятаwork, зареждаме набор от променливи от файла с данни (ред26), разопаковаме шаблона и след това, накрая, можем да започнем да генерираме нов ODF файл. Обърнете внимание на секцията за заместване на текстов низ (редове30до38), състояща се от няколко командиsed, свързани заедно. Всяко извикване наsedзамества един ред от текста на контейнера във файлаcontent.xmlсъс съдържанието на една от променливите, включени в набора, дефиниран във файлаmy_test_data_1. Ако по-късно искате да адаптирате този скрипт за създаване на други документи, тогава това е секцията с код и файл с данни, която трябва да бъде променена. След създаването на нов файлcontent.xmlоригиналните изображения се заменят с тези, които искаме да поставим в шаблона. Това става на две стъпки. Редът41използва командитеtrиgrepза извличане и записване на имената на всички картини във файлаpictures_list. Имената се съдържат в XML атрибутxlinkвcontent.xmlи резултатът трябва да бъде нещо като След това всичко, което остава, е да залепитеnew_pictures_listиpicture_listзаедно, ред по ред (редове42до43), за да получите партидния файл, формиран на ред43: Сега всички части са готови. В останалата част от скрипта всичко е просто пакетирано и разширението на получения файл е променено наODT. Като втори пример, нека да разгледаме как да създадете ODF фактури. Вече има много статии как да направите това, но всички изискват стартиране наOOoи ръчно редактиране. И искаме компютърът да върши цялата работа вместо нас. Процедурата е подобна на вече обсъдената, само че е по-лесна, защото няма снимки. Първо настройте шаблон и след това създайте файл с данни като този: Задачите са различни, решението е същото: прост шаблон е всичко, което е необходимо за генериране на фактури от компютър.за конвертиране на шаблон във фактура. Сега стартирайте скрипта по-долу, който е извлечен от скрипта на обвивкатаtest_generator.sh, видян в първия пример: AlterРезултатът от вашия труд: готова за печат фактура илиизпращане по имейл.Голяма част от това трябва да ви е познато отСписък 1, но нека да разгледаме редовете19до25. Както вече споменахме, когато променяте шаблона, трябва да добавите командатаsedза всеки ред, който ще бъде заменен. Ако един и същ низ се среща няколко пъти, какъвто е случаят с нашата обща сума, не забравяйте да добавите опциятаg(глобална) къмsed, в противен случай само първото срещане на този низ ще бъде заменено (вижте ред23). Какво ще кажете за версиите на MS Office?В един идеален свят всеки ще премине към OpenDocument и офиси без хартия и в този рай няма да има нужда да се ровите във файловите формати, използвани от други хора, или в лицензите, които позволяват отварянето на такива документи. Но докато дойдат тези дни (ех...), не можете без да печатате файлове или да ги конвертирате за горките, приковани към приложения, които разбират самоMicrosoft Officeформати. За щастие можете да конвертирате и отпечатвате автоматично. Въпреки това, за разлика от генерирането на ODF файлове, тази стъпка изискваOpenOffice.org. Трябва да добавите ред към вашия скрипт, който ще стартираOpenOffice.orgбез GUI, след което изпълнете макросаOOo, за да конвертирате ODF файла в PDF (за печат) или DOC. Налични са няколко макроса за постигане на тази цел; двете най-добри саSaveAsPDFиSaveAsDoc, от http://www.xml.com/pub/a/2006/01/11/from-microsoftto-openoffice.html. Алтернативен макрос за генериране на PDF е достъпен на http://linux.derkeiler.com/Mailing-Lists/Fedora/2008‑06/msg00561.html. За да отпечатате PDF файл от скрипт, можете просто да го подадете към командатаlPr. ИзползвайкиOpenOffice.orgвкомандния ред е описан на http://tinyurl.com/rybr9d, но все пак ще ви покажа правилния синтаксис: Опцията-invisibleкараOpenOffice.orgда стартира без GUI. Файлът, който ще се обработва, трябва да бъде предаден като аргумент ($FILE) на макроса. Какво научихме?В този урок научихме метод за автоматизиране на повтарящи се задачи с документи, който има няколко важни предимства. Първо, той работи без стартиране наOpenOffice.org(освен за печат), което означава, че може да се изпълнява на сървъра. Методът също не разчита на никакви релационни бази данни; Освен това е много просто! В много случаи, когато XML инструментите (като тези, описани в страничната лента с ресурси по-долу) са твърде сложни за изучаване и инсталиране, използването на триковете тук поне ще избегне загубата на време за повтарящо се редактиране. Всъщност всеки с основни познания за скриптове на обвивка може да генерира, модифицира и анализира стотици ODF текстови документи за няколко минути кодиране. Но горният процес е привлекателен не само поради лекотата на използване. Първо, основите на този процес на теория са ви достатъчно познати. Откриваме, че повечето потребители на Linux се чувстват по-удобно със скриптовеBashотколкото сStarBasic, езикът за писане на макросиOOo. Което ни води до основната причина, поради която избягвамеOOoмакросите: внедряването на логика за вземане на решения извънOpenOffice.orgноси много повече мощност, гъвкавост и потенциал за интеграция с други инструменти, отCronзадания до масово изпращане по поща и обработка на графики. Например можете лесно да добавите инструментиImageMagick(LXF116–LXF117) имащабирайте и изрежете изображения, преди да ги поставите в ODF документ! Ясно е, че представените два сценария не са идеални. Те не са особено гъвкави или разтегателни и в този си вид не са напълно надеждни. Първо, тук няма обработка на грешки: ако един от файловете липсва или на тестовия генератор са дадени повече снимки, отколкото има в оригиналния шаблон, тогава всичко ще се обърка, без никакво съобщение за случилото се. |