Skip to content

Instantly share code, notes, and snippets.

@nzjrs
Created November 1, 2010 11:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nzjrs/658017 to your computer and use it in GitHub Desktop.
Save nzjrs/658017 to your computer and use it in GitHub Desktop.
Exporting openoffice charts for LaTeX
' Export all charts from a Calc spreadsheet to EPS
' (c) Jose Fonseca
' Taken from http://www.oooforum.org/forum/viewtopic.phtml?t=60155
Sub Main
Dim oDoc, oDocCtrl, oDocFrame, oDispatchHelper
oDoc = ThisComponent
oDocCtrl = oDoc.getCurrentController()
oDocFrame = oDocCtrl.getFrame()
oDispatchHelper = createUnoService( "com.sun.star.frame.DispatchHelper" )
Dim storeUrl
storeUrl = oDoc.getURL()
storeUrl = Left( storeUrl, Len( storeUrl ) - 4 )
nCharts = 0
' Search the draw page for the chart.
Dim oSheets, oSheet, oDrawPage, oShape
oSheets = oDoc.getSheets()
For i = 0 to oSheets.getCount() - 1
oSheet = oSheets.getByIndex( i )
oDrawPage = oSheet.getDrawPage()
For j = 0 to oDrawPage.getCount() - 1
oShape = oDrawPage.getByIndex( j )
' Can't call supportsService unless the com.sun.star.lang.XServiceInfo is present.
If HasUnoInterfaces( oShape, "com.sun.star.lang.XServiceInfo" ) Then
If oShape.supportsService( "com.sun.star.drawing.OLE2Shape" ) Then
' Is it a Chart?
If oShape.CLSID = "12DCAE26-281F-416F-a234-c3086127382e" Then
' Select the chart shape.
oDocCtrl.select( oShape )
oDispatchHelper.executeDispatch( oDocFrame, ".uno:Copy", "", 0, Array() )
' export the chart
nCharts = nCharts + 1
ExportSelection( storeUrl + "_chart" + nCharts + ".eps", "image/x-eps" )
EndIf
EndIf
EndIf
Next
Next
End Sub
Sub ExportSelection(url As String, mediaType As String)
' Create a new Draw document
Dim aArgs(1) As New com.sun.star.beans.PropertyValue
aArgs(0).Name = "Hidden"
aArgs(0).Value = True
oDrawDoc = StarDesktop.loadComponentFromURL( "private:factory/sdraw", "_blank", 0, aArgs() )
' Past current selection
Dim oDrawDocCtrl, oDrawDocFrame, oDispatchHelper
oDrawDocCtrl = oDrawDoc.getCurrentController()
oDrawDocFrame = oDrawDocCtrl.getFrame()
oDispatchHelper = createUnoService( "com.sun.star.frame.DispatchHelper" )
oDispatchHelper.executeDispatch( oDrawDocFrame, ".uno:Paste", "", 0, Array() )
' Get an export filter object
Dim exportFilter
exportFilter = createUnoService( "com.sun.star.drawing.GraphicExportFilter" )
' get first draw page
Dim oDrawPages, oDrawPage, oShape
oDrawPages = oDrawDoc.getDrawPages()
oDrawPage = oDrawPages.getByIndex( 0 )
oShape = oDrawPage.getByIndex( 0 )
exportFilter.setSourceDocument( oShape )
' Set the filter data
Dim aFilterData(5) As New com.sun.star.beans.PropertyValue
aFilterData(0).Name = "Level" '1=PS level 1, 2=PS level 2
aFilterData(0).Value = 2
aFilterData(1).Name = "ColorFormat" '1=color, 2=grayscale
aFilterData(1).Value = 1
aFilterData(2).Name = "TextMode" '0=glyph outlines, 1=no glyph outlines, see ooo bug 7918
aFilterData(2).Value = 1
aFilterData(3).Name = "Preview" '0=none, 1=TIFF, 2=EPSI, 3=TIFF+EPSI
aFilterData(3).Value = 0
aFilterData(4).Name = "CompressionMode" '1=LZW, 2=none
aFilterData(4).Value = 2
Dim aProps(2) As New com.sun.star.beans.PropertyValue
aProps(0).Name = "MediaType"
aProps(0).Value = mediaType
aProps(1).Name = "URL"
aProps(1).Value = url
aProps(2).Name = "FilterData"
aProps(2).Value = aFilterData()
exportFilter.filter( aProps() )
End Sub
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment