Невидимость документа

Автор ishayahu, 22 мая 2011, 14:51

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

ishayahu

Подскажите, пожалуйста, какое свойство отвечает за невидимость документа? Мне надо открыть документ, внести в него значения, отправить на печать и закрыть. При этом мне не надо, чтобы открывалось лишнее окно. Как можно сделать документ (окно) невидимым?
WinXP - OO3.3/LibreOffice3.3

Рыбка Рио

Чтобы открыть документ невидимым,

DocURL=convertToURL("/path/to/file, например, C:\123.ods")
Dim p(0) as new com.sun.star.beans.PropertyValue
   p(0).Name = "Hidden"
   p(0).Value = TRUE
   oDoc = starDesktop.loadComponentFromURL(DocURL, "_default", 0, p())


Чтобы открытый документ сделать невидимым:
oDoc.CurrentController.Frame.ContainerWindow.setVisible(FALSE)
ubuntu 12.04 + LibO3.6.0

ishayahu

С первым вариантом перестает печататься документ, а со вторым все в порядке( В чем может быть дело?

[вложение удалено Администратором]
WinXP - OO3.3/LibreOffice3.3

JohnSUN

Питоньяк, когда рассказывал про параметр Hidden для loadComponentFromURL, предупредил, что большая часть сервисов при таком способе открытия документа просто не загружается и не будет доступна. Какие именно он не уточнил, но, похоже, печать относится именно к этим, пропускаемым...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

ishayahu

А Питоньяк это кто?
И нельзя ли загрузить эти сервисы принудительно?
WinXP - OO3.3/LibreOffice3.3

RFJ

Сервисы, свойства, методы, интерфейсы документа Hidden можно изучать обычным Xray:
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("XrayTool")) Then GlobalScope.BasicLibraries.LoadLibrary("XrayTool")
 Xray oDoc

Рыбка Рио

Цитата: ishayahu от 22 мая 2011, 14:55С первым вариантом перестает печататься документ
Вот такой код у меня работает (печатается):
Sub Main
DocURL=convertToURL("/home/user/Рабочий стол/Без имени 1.odt")
Dim p(0) as new com.sun.star.beans.PropertyValue
  p(0).Name = "Hidden"
  p(0).Value = TRUE
  oDoc = starDesktop.loadComponentFromURL(DocURL, "_default", 0, p())
  oDoc.print(Array())
  Wait 5000
  oDoc.close(True)
End Sub
ubuntu 12.04 + LibO3.6.0

JohnSUN

Эндрю Питоньяк это такой очень умный человек, который на макросах для OpenOffice.org "собаку съел"
Есть и несколько переведенных на русский язык вариантов этой книги... Что-то, ссылку сходу найти не могу... Да это и не важно, пожалуй. Там все-равно не столько английский язык, сколько чистый бэйсик, в переводе не нуждается

[вложение удалено Администратором]
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Рыбка Рио

И такой тоже код работает:
Sub Main
DocURL=convertToURL("/home/user/Рабочий стол/Без имени 1.odt")
Dim p(0) as new com.sun.star.beans.PropertyValue
  p(0).Name = "Hidden"
  p(0).Value = TRUE
  oDoc = starDesktop.loadComponentFromURL(DocURL, "_default", 0, p())
 
Dim PrintProperties(0) as new com.sun.star.beans.PropertyValue  
  PrintProperties(0).Name = "Wait"
PrintProperties(0).Value = True
oDoc.print(PrintProperties())
  'oDoc.print(Array())
 
'   Wait 2000
  oDoc.close(True)
End Sub
ubuntu 12.04 + LibO3.6.0

Рыбка Рио

Разницы между первым и вторым методом вроде бы нет. Со скрытыми документами даже dispatcher работает, только там нужно немного по-другому определять Frame, вот такая функция:

Function GetDocumentFrame( oDoc As Object ) As Object
Dim oFrame As Object
If oDoc.supportsService( "com.sun.star.document.OfficeDocument" ) Then
oCtrl = oDoc.getCurrentController()
oFrame = oCtrl.getFrame()
ElseIf HasUnoInterfaces( oDoc, "com.sun.star.frame.XController" ) Then
oCtrl = oDoc
oFrame = oCtrl.getFrame()
ElseIf HasUnoInterfaces( oDoc, "com.sun.star.frame.XFrame" ) Then
oFrame = oDoc
EndIf

GetDocumentFrame() = oFrame
End Function


Так что код с диспатчером выглядит так:
dispatcher.executeDispatch(GetDocumentFrame(oDoc), ".uno:Paste", "", 0, Array())
ubuntu 12.04 + LibO3.6.0

ishayahu

э... вдруг заработало... возможно помогла снятая галочка "печатать только выбранные листы"
WinXP - OO3.3/LibreOffice3.3

ishayahu

Печатает в любом случае, и с галочкой, и без нее. Почему - не знаю :( Но, работает :)
Видимо, можно закрывать.
WinXP - OO3.3/LibreOffice3.3