Потребовалось мне тут как-то оформить рассадочные карточки для свадьбы. Для своей свадьбы имена писались на каждую карточку вручную, для чужой свадьбы каждое имя стало писать лень и я решил это дело оптимизировать. С помощью данного способа можно также легко создать кучу персональных приглашений на мероприятие, напечатать почтовые конверты для многих адресатов и др. Задача решалась в свободном офисном приложении LibreOffice Writer (3.3.3), действия в OpenOffice аналогичные.
- Для начала выбрал красивый шрифт! Мне понравился Corinthia Regular TrueType Font.
Шрифт устанавливал в Ubuntu через консоль следующей командой:sudo cp CORINTHI.TTF /usr/share/fonts/truetype/openoffice/
Кнопку “Install Font” при кликании на шрифт сначала не разглядел, но думаю должно заработать и так.
- После этого создал новый документ в Writer:
- Установил нужные параметры страницы – ориентацию, размер бумаги, поля
- Создал таблицу 3х1
- После этого преобразовал список имён из такого вида:
Иванов Иван Иванович Петров Пётр Петрович Сидоров Сидор Сидорович
в удобный вид для дальнейшего использования макросами LibreOffice:
"Иванов Иван Иванович", "Петров Пётр Петрович", "Сидоров Сидор Сидорович"
Т.е. записал все имена в строчку через запятую и каждое имя в кавычках.
Имена записывал в строчку с помощью VIM и следующих простых команд::%s/^/"/g :%s/$/"/g :%s/\n/,/g :%s/"\ /"/g :%s/\ "/"/g :%s/"\ /"/g :%s/,$//g
- По умолчанию макросы отключены в LibreOffice и являются экспериментальной функцией. Включить макросы можно с помощью нажатия галочки в меню:
“Tools | Options… | General | Enable experimental” - Далее был написан следующий индусский код, который был записан в новый макрос 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
- Далее при установке курсора в первую ячейку таблицы и активации макроса Иванов, Петров и Сидоров автоматически помещались в таблицу.
- Остаётся только изменить размеры ячеек и выбрать нужный шрифт и его размер
Вот, что получилось в конечном итоге:
В моём случае 17 листов имён людей создались за пятнадцать-двадцать кликов мышкой!