Created
November 1, 2010 11:24
-
-
Save nzjrs/658017 to your computer and use it in GitHub Desktop.
Exporting openoffice charts for LaTeX
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
' 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