summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/graphicfilter.hxx1
-rw-r--r--vcl/source/filter/graphicfilter.cxx16
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 );