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