Приглашения, рассадочные карточки в Libreoffice

Потребовалось мне тут как-то оформить рассадочные карточки для свадьбы. Для своей свадьбы имена писались на каждую карточку вручную, для чужой свадьбы каждое имя стало писать лень и я решил это дело оптимизировать. С помощью данного способа можно также легко создать кучу персональных приглашений на мероприятие, напечатать почтовые конверты для многих адресатов и др. Задача решалась в свободном офисном приложении LibreOffice Writer (3.3.3), действия в OpenOffice аналогичные.

  1. Для начала выбрал красивый шрифт! Мне понравился Corinthia Regular TrueType Font.
    Шрифт Corinthia
    Шрифт устанавливал в Ubuntu через консоль следующей командой:

    sudo cp CORINTHI.TTF /usr/share/fonts/truetype/openoffice/
    

    Кнопку “Install Font” при кликании на шрифт сначала не разглядел, но думаю должно заработать и так.

  2. После этого создал новый документ в Writer:
    Новый документ в LibreOffice Writer
  3. Установил нужные параметры страницы – ориентацию, размер бумаги, поля
    Размеры полей
  4. Создал таблицу 3х1
    Создание таблицы
  5. После этого преобразовал список имён из такого вида:
    Иванов Иван Иванович
    Петров Пётр Петрович
    Сидоров Сидор Сидорович

    в удобный вид для дальнейшего использования макросами LibreOffice:

    "Иванов Иван Иванович", "Петров Пётр Петрович", "Сидоров Сидор Сидорович"

    Т.е. записал все имена в строчку через запятую и каждое имя в кавычках.
    Имена записывал в строчку с помощью VIM и следующих простых команд:

    :%s/^/"/g
    :%s/$/"/g
    :%s/\n/,/g
    :%s/"\ /"/g
    :%s/\ "/"/g
    :%s/"\ /"/g
    :%s/,$//g
    
  6. По умолчанию макросы отключены в LibreOffice и являются экспериментальной функцией. Включить макросы можно с помощью нажатия галочки в меню:
    “Tools | Options… | General | Enable experimental”
  7. Далее был написан следующий индусский код, который был записан в новый макрос Writer:
    sub Main
    dim document   as object
    dim dispatcher as object
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dim col as integer
    dim row as integer
    dim args4(0) as new com.sun.star.beans.PropertyValue
    
    myarray=Array("Иванов Иван Иванович", "Петров Пётр Петрович", "Сидоров Сидор Сидорович")
    row=0
    Do while row<(UBound(MyArray) \ 3)+1
            col=0
            Do While col<3
                    dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())
                    col=col+1
            Loop
            args4(0).Name = "Text"
            col=0
            Do While col<3
                    args4(0).Value = myarray(row*3+col)
                    dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args4())
                    dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())
                    col=col+1
            Loop
            row=row+1
    Loop
    end sub
    
  8. Далее при установке курсора в первую ячейку таблицы и активации макроса Иванов, Петров и Сидоров автоматически помещались в таблицу.
  9. Остаётся только изменить размеры ячеек и выбрать нужный шрифт и его размер
    Размеры ячеек

Вот, что получилось в конечном итоге:
Вот, что получилось в конечном итоге

В моём случае 17 листов имён людей создались за пятнадцать-двадцать кликов мышкой!

Скачивание песен vkontakte на Linux


Warning: Trying to access array offset on value of type bool in /var/www/sandalov.org/blog/wp-content/themes/mantra/includes/theme-loop.php on line 249

С помощью regexp можно просто скачнуть все песни: сохраняете страничку audio в текстовый файл и проходитесь по нему:

cat vk | grep -P -o  "http://cs.+?\.mp3" | xargs -tl -I _ wget _

Иногда бывает так, что песня в контакте называется правильно, а вот тег совершенно неправильный. Выход один – брать названия у Дурова.

Для этого написал на досуге маленький bash-скриптик script.sh упрощающий массовое скачивание песен из контакта.

script.sh:

#!/bin/bash
cat audio.html | egrep "mp3|title_wrap" > rename.sh
chmod 777 rename.sh
vim -s vk.sh
wget -i download.lst
sh rename.sh
rm rename.sh
rm download.lst

Рядом со скриптом лежит скрипт vk.sh для текстового редактора vim, который парсит страницу, получая названия песен и ссылки на них.

vk.sh:

:e ++enc=cp1251 rename.sh
:%s/\.mp3,.*/\.mp3/g
:%norm jdd
:%s/.*"\ value="//g
:norm Gdd
:w! download.lst
:norm uuu
:%s/^.*audio\///g
:%s/\ <\/span><span\ class="user">.*//g
:%s/^.*');\ return\ false">//g
:%s/<\/a><\/b>\ -\ <span\ class="title">/\ -\ /g
:%s/<a href=""\ onclick="Audio.showLyrics('.*;">//g
:%s/<\/a>//g
:%s/"/'/g
:%s/\//\ /g
:%s/?/\ /g
:%s/</\ /g
:%s/>/\ /g
:%s/\\/\ /g
:%s/\:/\ /g
:%s/*/\ /g
:%s/|/\ /g
:%s/mp3.*\n/mp3\ "/g
:%s/^/mv\ /g
:%s/\n/\.mp3"\r/g
:%s/\ -\ $//
:%s/&amp;/\&/g
:%s/"\ /"/g
:%s/"\ /"/g
:%s/\ .mp3"/.mp3"/g
:%s/\ .mp3"/.mp3"/g
:%s/\ \ -/\ -/g
:%s/\ \ -/\ -/g
:%s/-\ \ /-\ /g
:%s/-\ \ /-\ /g
:norm Gdddddd
:w! ++enc=utf-8 rename.sh
:q!

Для работы скрипта необходимо наличие установленного текстового редактора vim в системе.

Ubuntu:

sudo aptitude install vim

Процедура скачивания:

  1. Сначала необходимо зайти через браузер на страницу с нужными песнями (к примеру сюда: http://vkontakte.ru/audio.php) и сохранить её как html-файлик: audio.php.html
  2. Положить рядом с audio.php.html файл script.sh и vk.sh
  3. Запустить скрипт
    $ sh script.sh
    

UPD: Скачал файл audio.php.html с утра, вечером хотел запустить скрипт на скачку. Ссылки оказались недействительными. Видимо контакт меняет ссылки на файлы через какие-то промежутки времени. Т.о. скрипт стоит запускать сразу же после скачивания audio.php.html, чтоб не было ошибок 404.

UPD2: Скрипт подправил: теперь правильно отображается “&”, подчистил пробелы, а также – да(!), UNIX/WIN не любят “/” в названиях файлов/папок :).

Также, юзеры вконтакте взрослеют и уже освоили копипаст Unicode символов, по типу:

♥♡♥♡♥ Дима Билан ♥♡♥♡♥ - ♥♡♥♡♥ Ты, только ты ♥♡♥♡♥
☭☭☭ Гражданская оборона ☮☮☮ -  У войны не женское лицо

Такую штуку придётся вычищать руками. 🙂 (Всю таблицу как-то неохота в vim скрипт кидать)

20110812: Поправил в связи с новыми поправками Vk.