Управление врезкой

Автор pinewood, 4 сентября 2016, 11:23

0 Пользователи и 1 гость просматривают эту тему.

pinewood

Здравствуйте! Прошу помощи.
Нужно с помощью макроса расположить врезку с определенным размером на определенную часть листа в Libreoffice Writer. В этой врезке должно находится поле т.е. Дата, Время и т.д.
Пример на фото.
Я пробовал создать  макрос с помощью записи
Но получилось только управлять расположением врезки

sub Main

dim document   as object
dim dispatcher as object


document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")


dim args1(4) as new com.sun.star.beans.PropertyValue
args1(0).Name = "AnchorType"
args1(0).Value = 0
args1(1).Name = "Pos.X"
args1(1).Value = 15702
args1(2).Name = "Pos.Y"
args1(2).Value = 26545
args1(3).Name = "Size.Width"
args1(3).Value = 1649
args1(4).Name = "Size.Height"
args1(4).Value = 1432

dispatcher.executeDispatch(document, ".uno:InsertFrame", "", 0, args1())

dispatcher.executeDispatch(document, ".uno:InsertPageNumberField", "", 0, args1())

dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Fieldnames"
args4(0).Value = false

dispatcher.executeDispatch(document, ".uno:Fieldnames", "", 0, args4())


dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Marks"
args5(0).Value = true

dispatcher.executeDispatch(document, ".uno:Marks", "", 0, args5())


end sub




Но мне бы хотелось бы узнать как управлять врезкой без DispatchHelper.

rami

Цитата: pinewood от  4 сентября 2016, 09:23Но мне бы хотелось бы узнать как управлять врезкой без DispatchHelper.
Там целая туча параметров, проще вручную нарисовать, но если хотите макрос без наворотов, то так:
Sub main Dim oTextFrame, oDateTime
oTextFrame=ThisComponent.createInstance("com.sun.star.text.TextFrame")
oDateTime=ThisComponent.createInstance("com.sun.star.text.TextField.DateTime")
oTextFrame.HoriOrient=0
oTextFrame.VertOrient=0
oTextFrame.HoriOrientPosition=15702
oTextFrame.VertOrientPosition=26545
oTextFrame.Width=1649
oTextFrame.Height=1432
ThisComponent.Text.insertTextContent(ThisComponent.Text,oTextFrame,False)
oTextFrame.Text.insertTextContent(oTextFrame.Text,oDateTime,False)
oTextFrame.FrameIsAutomaticHeight=True
oDateTime.NumberFormat=51
oTextFrame.WidthType=2
End Sub

pinewood

#2
К сожалению в ручную не проще.
Мне нужно расположить несколько подобных врезок на нескольких страницах =(
В ручную это будет очень кропотливо и долго.
Спасибо!
Только сейчас другой вопрос.
Можно ли сделать так, чтобы координаты позиции врезки указывались относительно страницы, а не всего документа?

rami

Цитата: pinewood от  4 сентября 2016, 17:05Можно ли сделать так, чтобы координаты позиции врезки указывались относительно страницы, а не всего документа?
Оно и так относительно страницы (области текста), относительно документа нельзя.

Если нужно чтобы на каждой странице была врезка с полем или текстом, её нужно вставить в колонтитул (проще один раз в ручную и она будет на всех страницах данного стиля)

pinewood

В таком случае действительно проще  
Почему-то про врезку не подумал что она будет повторяться если ее разместить в колонтитуле.
Еще раз спасибо.
Все подсказки определенно пригодятся.

economist

Как-то делали подобное, другу показалось проще сделать кодом таблицу 1х1, мне - путем натравливания на выходной PDF-файл консольного ImageMagick, а секретарша нашла готовое расширения для QR-кодирования документов. Так что решений много.

Если нужно просто фиксированое поле Дата/Время "в рамке" - можно сделать стиль абзаца с обрамлением и вставлять его по F3 (Автотекст), вообще без макросов. Автотекст поддерживает и графику. В какой-то момент директор сказал что стал больше успевать (а на самом деле его подпись и печать теперь ставятся по F3 в 80% случаев, но злоупотребления были). Подписывать ежедневно по 300-500 документов тяжело.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...