2

我有以下代码将工作表导出到 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

它工作正常。我有以下问题:

  • 是否可以在不创建 unoService 的情况下导出 PDF?(以及怎么做?)

  • 如何导出一系列单元格而不是整个工作表?

4

1 回答 1

1

uno 服务的创建不是问题。但是您应该避免使用调度程序。这就是为什么用 openoffice 录制宏不是很有帮助的原因。您必须为 API 烦恼。

本教程展示了 PDF 导出的一般工作原理:https ://wiki.openoffice.org/wiki/API/Tutorials/PDF_export

对于定制 aMediaDescriptor是需要的。https://www.openoffice.org/api/docs/common/ref/com/sun/star/document/MediaDescriptor.html

该服务可以由 ::com::sun::star::beans::PropertyValue[] 表示。这种类型有NameValue属性。

MediaDescriptor至少需要一个FilterName. 可以在此处找到不太实际的 FilterName 列表:https ://wiki.openoffice.org/wiki/Framework/Article/Filter/FilterList_OOo_3_0

为了进一步定制 aFilterData是可能的。对于那些阅读:https ://wiki.openoffice.org/wiki/API/Tutorials/PDF_export#General_properties

从https://wiki.openoffice.org/wiki/API/Tutorials/PDF_export#Filter_data_demo中的过滤器数据演示开始Value,也使用了一个sFilterData数组。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
于 2015-05-31T13:44:27.613 回答