diff options
-rw-r--r-- | include/vcl/graphicfilter.hxx | 1 | ||||
-rw-r--r-- | vcl/source/filter/graphicfilter.cxx | 16 |
2 files changed, 13 insertions, 4 deletions
diff --git a/include/vcl/graphicfilter.hxx b/include/vcl/graphicfilter.hxx index 27388da41c28..fb237bc780a4 100644 --- a/include/vcl/graphicfilter.hxx +++ b/include/vcl/graphicfilter.hxx @@ -101,6 +101,7 @@ namespace o3tl #define EXP_EMZ "SVEMZ" #define EXP_JPEG "SVEJPEG" #define EXP_SVG "SVESVG" +#define EXP_SVGZ "SVESVGZ" #define EXP_PDF "SVEPDF" #define EXP_PNG "SVEPNG" #define EXP_TIFF "SVTIFF" diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx index bfe1d3b7d506..f7e3765f4e94 100644 --- a/vcl/source/filter/graphicfilter.cxx +++ b/vcl/source/filter/graphicfilter.cxx @@ -1844,9 +1844,17 @@ ErrCode GraphicFilter::ExportGraphic( const Graphic& rGraphic, std::u16string_vi if( rOStm.GetError() ) nStatus = ERRCODE_GRFILTER_IOERROR; } - else if( aFilterName.equalsIgnoreAsciiCase( EXP_SVG ) ) + else if( aFilterName.equalsIgnoreAsciiCase( EXP_SVG ) || aFilterName.equalsIgnoreAsciiCase( EXP_SVGZ ) ) { bool bDone(false); + SvStream* rTempStm = &rOStm; + if (aFilterName.equalsIgnoreAsciiCase(EXP_SVGZ)) + { + // Write to a different stream so that we can compress to rOStm later + rCompressableStm.SetBufferSize(rOStm.GetBufferSize()); + rTempStm = &rCompressableStm; + bShouldCompress = true; + } // do we have a native Vector Graphic Data RenderGraphic, whose data can be written directly? auto const & rVectorGraphicDataPtr(rGraphic.getVectorGraphicData()); @@ -1856,9 +1864,9 @@ ErrCode GraphicFilter::ExportGraphic( const Graphic& rGraphic, std::u16string_vi && !rVectorGraphicDataPtr->getBinaryDataContainer().isEmpty()) { auto & aDataContainer = rVectorGraphicDataPtr->getBinaryDataContainer(); - rOStm.WriteBytes(aDataContainer.getData(), aDataContainer.getSize()); + rTempStm->WriteBytes(aDataContainer.getData(), aDataContainer.getSize()); - if( rOStm.GetError() ) + if( rTempStm->GetError() ) { nStatus = ERRCODE_GRFILTER_IOERROR; } @@ -1890,7 +1898,7 @@ ErrCode GraphicFilter::ExportGraphic( const Graphic& rGraphic, std::u16string_vi if( xActiveDataSource.is() ) { const css::uno::Reference< css::uno::XInterface > xStmIf( - static_cast< ::cppu::OWeakObject* >( new ImpFilterOutputStream( rOStm ) ) ); + static_cast< ::cppu::OWeakObject* >( new ImpFilterOutputStream( *rTempStm ) ) ); SvMemoryStream aMemStm( 65535, 65535 ); |