Как экспортировать диапазон ячеек в файл PDF?

У меня есть следующий код для экспорта листа в файл PDF:

Option Explicit

Sub exportToPdf

    Dim document As Object
    Dim dispatcher As Object

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

    Dim args1(1) as new com.sun.star.beans.PropertyValue

    args1(0).Name = "URL"
    args1(0).Value = "file:///home/someuser/Desktop/exported.pdf"
    args1(1).Name = "FilterName"
    args1(1).Value = "calc_pdf_Export"

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

End Sub

Он работает правильно. У меня есть следующие вопросы:

  • Можно ли экспортировать PDF без создания unoService? (А как это сделать?)

  • Как экспортировать диапазон ячеек вместо всего листа?


person Maciej    schedule 28.05.2015    source источник


Ответы (1)


Создание uno-сервисов не является проблемой. А вот диспетчера вам следует избегать. Вот почему запись макроса с openoffice не очень полезна. Вы должны возиться с API.

В этом руководстве показано, как в целом работает экспорт PDF: https://wiki.openoffice.org/wiki/API/Tutorials/PDF_export

Для настройки требуется MediaDescriptor. https://www.openoffice.org/api/docs/common/ref/com/sun/star/document/MediaDescriptor.html

Эта служба может быть представлена ​​как ::com::sun::star::beans::PropertyValue[]. Этот тип имеет свойства Name и Value.

Этому MediaDescriptor нужен как минимум FilterName. Не очень актуальный список имен фильтров можно найти здесь: https://wiki.openoffice .org/wiki/Framework/Article/Filter/FilterList_OOoValue0

Возможна дальнейшая настройка FilterData. Для тех, кто читает: https://wiki.openoffice.org/wiki/API/Tutorials/PDF_export#General_properties

Начиная с демонстрации данных фильтра в https://wiki.openoffice.org/wiki/API/Tutorials/PDF_export#Filter_data_demo для Value из FilterData также используется массив PropertyValue.

Итак, мы получаем:

sub storeCellRangeToPDF()

 oDoc   = ThisComponent
 oController = oDoc.getCurrentController()
 oSheet = oController.getActiveSheet()
 oCellRange = oSheet.getCellRangeByName("$A$1:$B$3")

 dim aFilterData(0) as new com.sun.star.beans.PropertyValue
 aFilterData(0).Name = "Selection"
 aFilterData(0).Value = oCellRange

 dim aMediaDescriptor(1) as new com.sun.star.beans.PropertyValue
 aMediaDescriptor(0).Name = "FilterName"
 aMediaDescriptor(0).Value = "calc_pdf_Export"
 aMediaDescriptor(1).Name = "FilterData"
 aMediaDescriptor(1).Value = aFilterData()

 oDoc.storeToURL("file:///home/axel/Dokumente/test.pdf", aMediaDescriptor())

end sub
person Axel Richter    schedule 31.05.2015
comment
Можете ли вы уточнить, почему следует избегать диспетчера? - person Maciej; 31.05.2015
comment
См.: wiki.openoffice.org/wiki/ Рекордер производит серию сообщений UNO. вызовы, которые не особенно полезны для изучения модели OpenOffice.org API. Я лично нахожу код, который производит рекордер, немного сложным для понимания. ... Аргументы каждой команды отправки не документированы. - person Axel Richter; 01.06.2015
comment
Этот код не будет работать с Option Explicit. Переменные oDoc, oController, oSheet, oCellRange не объявлены. - person Maciej; 24.06.2015