Kaydet (Commit) f3221085 authored tarafından Radek Doulik's avatar Radek Doulik

export embedded spreadsheet(s), fixes n#780830

Change-Id: Iee8328a695b554d97f6805b64b98706b9e3d7ab9
üst 78770449
...@@ -81,6 +81,9 @@ protected: ...@@ -81,6 +81,9 @@ protected:
rtl::OUString WriteImage( const rtl::OUString& rURL ); rtl::OUString WriteImage( const rtl::OUString& rURL );
const char* GetComponentDir();
const char* GetRelationCompPrefix();
public: public:
DrawingML( ::sax_fastparser::FSHelperPtr pFS, ::oox::core::XmlFilterBase* pFB = NULL, DocumentType eDocumentType = DOCUMENT_PPTX ) : meDocumentType( eDocumentType ), mpFS( pFS ), mpFB( pFB ) {} DrawingML( ::sax_fastparser::FSHelperPtr pFS, ::oox::core::XmlFilterBase* pFB = NULL, DocumentType eDocumentType = DOCUMENT_PPTX ) : meDocumentType( eDocumentType ), mpFS( pFS ), mpFB( pFB ) {}
void SetFS( ::sax_fastparser::FSHelperPtr pFS ) { mpFS = pFS; } void SetFS( ::sax_fastparser::FSHelperPtr pFS ) { mpFS = pFS; }
...@@ -104,7 +107,7 @@ public: ...@@ -104,7 +107,7 @@ public:
void WriteStretch(); void WriteStretch();
void WriteLinespacing( ::com::sun::star::style::LineSpacing& rLineSpacing ); void WriteLinespacing( ::com::sun::star::style::LineSpacing& rLineSpacing );
::rtl::OUString WriteBlip( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet, ::rtl::OUString& rURL ); ::rtl::OUString WriteBlip( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet, ::rtl::OUString& rURL, Graphic *pGraphic=NULL );
void WriteBlipMode( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet ); void WriteBlipMode( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet );
void WriteShapeTransformation( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rXShape, void WriteShapeTransformation( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rXShape,
......
...@@ -42,6 +42,7 @@ namespace oox { namespace drawingml { ...@@ -42,6 +42,7 @@ namespace oox { namespace drawingml {
class OOX_DLLPUBLIC ShapeExport : public DrawingML { class OOX_DLLPUBLIC ShapeExport : public DrawingML {
private: private:
static int mnSpreadsheetCounter;
struct ShapeCheck struct ShapeCheck
{ {
bool operator()( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape> s1, const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape> s2 ) const bool operator()( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape> s1, const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape> s2 ) const
...@@ -61,6 +62,8 @@ public: ...@@ -61,6 +62,8 @@ public:
protected: protected:
sal_Int32 mnShapeIdMax, mnPictureIdMax; sal_Int32 mnShapeIdMax, mnPictureIdMax;
void WriteGraphicObjectShapePart( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape, Graphic *pGraphic=NULL );
private: private:
sal_Int32 mnXmlNamespace; sal_Int32 mnXmlNamespace;
Fraction maFraction; Fraction maFraction;
......
...@@ -421,6 +421,30 @@ OUString DrawingML::WriteImage( const OUString& rURL ) ...@@ -421,6 +421,30 @@ OUString DrawingML::WriteImage( const OUString& rURL )
return OUString(); return OUString();
} }
const char* DrawingML::GetComponentDir()
{
switch ( meDocumentType )
{
case DOCUMENT_DOCX: return "word";
case DOCUMENT_PPTX: return "ppt";
case DOCUMENT_XLSX: return "xl";
}
return "unknown";
}
const char* DrawingML::GetRelationCompPrefix()
{
switch ( meDocumentType )
{
case DOCUMENT_DOCX: return "";
case DOCUMENT_PPTX:
case DOCUMENT_XLSX: return "../";
}
return "unknown";
}
OUString DrawingML::WriteImage( const Graphic& rGraphic ) OUString DrawingML::WriteImage( const Graphic& rGraphic )
{ {
GfxLink aLink = rGraphic.GetLink (); GfxLink aLink = rGraphic.GetLink ();
...@@ -482,16 +506,8 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic ) ...@@ -482,16 +506,8 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic )
} }
} }
const char *pComponent = "";
switch ( meDocumentType )
{
case DOCUMENT_DOCX: pComponent = "word"; break;
case DOCUMENT_PPTX: pComponent = "ppt"; break;
case DOCUMENT_XLSX: pComponent = "xl"; break;
}
Reference< XOutputStream > xOutStream = mpFB->openFragmentStream( OUStringBuffer() Reference< XOutputStream > xOutStream = mpFB->openFragmentStream( OUStringBuffer()
.appendAscii( pComponent ) .appendAscii( GetComponentDir() )
.appendAscii( "/media/image" ) .appendAscii( "/media/image" )
.append( (sal_Int32) mnImageCounter ) .append( (sal_Int32) mnImageCounter )
.appendAscii( pExtension ) .appendAscii( pExtension )
...@@ -500,22 +516,11 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic ) ...@@ -500,22 +516,11 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic )
xOutStream->writeBytes( Sequence< sal_Int8 >( (const sal_Int8*) aData, nDataSize ) ); xOutStream->writeBytes( Sequence< sal_Int8 >( (const sal_Int8*) aData, nDataSize ) );
xOutStream->closeOutput(); xOutStream->closeOutput();
const char *pImagePrefix = "";
switch ( meDocumentType )
{
case DOCUMENT_DOCX:
pImagePrefix = "media/image";
break;
case DOCUMENT_PPTX:
case DOCUMENT_XLSX:
pImagePrefix = "../media/image";
break;
}
sRelId = mpFB->addRelation( mpFS->getOutputStream(), sRelId = mpFB->addRelation( mpFS->getOutputStream(),
US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" ), US( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" ),
OUStringBuffer() OUStringBuffer()
.appendAscii( pImagePrefix ) .appendAscii( GetRelationCompPrefix() )
.appendAscii( "media/image" )
.append( (sal_Int32) mnImageCounter ++ ) .append( (sal_Int32) mnImageCounter ++ )
.appendAscii( pExtension ) .appendAscii( pExtension )
.makeStringAndClear() ); .makeStringAndClear() );
...@@ -523,9 +528,9 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic ) ...@@ -523,9 +528,9 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic )
return sRelId; return sRelId;
} }
OUString DrawingML::WriteBlip( Reference< XPropertySet > rXPropSet, OUString& rURL ) OUString DrawingML::WriteBlip( Reference< XPropertySet > rXPropSet, OUString& rURL, Graphic *pGraphic )
{ {
OUString sRelId = WriteImage( rURL ); OUString sRelId = pGraphic ? WriteImage( *pGraphic ) : WriteImage( rURL );
sal_Int16 nBright = 0; sal_Int16 nBright = 0;
sal_Int32 nContrast = 0; sal_Int32 nContrast = 0;
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment