diff options
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/filter/FilterConfigCache.cxx | 2 | ||||
-rw-r--r-- | vcl/source/filter/graphicfilter.cxx | 2 | ||||
-rw-r--r-- | vcl/source/filter/ipdf/pdfread.cxx | 7 | ||||
-rw-r--r-- | vcl/source/gdi/graph.cxx | 11 | ||||
-rw-r--r-- | vcl/source/gdi/impgraph.cxx | 9 |
5 files changed, 30 insertions, 1 deletions
diff --git a/vcl/source/filter/FilterConfigCache.cxx b/vcl/source/filter/FilterConfigCache.cxx index d8d8862447c1..262bd66d7582 100644 --- a/vcl/source/filter/FilterConfigCache.cxx +++ b/vcl/source/filter/FilterConfigCache.cxx @@ -43,7 +43,7 @@ const char* FilterConfigCache::FilterConfigCacheEntry::InternalPixelFilterNameLi const char* FilterConfigCache::FilterConfigCacheEntry::InternalVectorFilterNameList[] = { IMP_SVMETAFILE, IMP_WMF, IMP_EMF, IMP_SVSGF, IMP_SVSGV, IMP_SVG, IMP_PDF, - EXP_SVMETAFILE, EXP_WMF, EXP_EMF, EXP_SVG, nullptr + EXP_SVMETAFILE, EXP_WMF, EXP_EMF, EXP_SVG, EXP_PDF, nullptr }; const char* FilterConfigCache::FilterConfigCacheEntry::ExternalPixelFilterNameList[] = diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx index 38e72dc5e837..b65a8a02ea78 100644 --- a/vcl/source/filter/graphicfilter.cxx +++ b/vcl/source/filter/graphicfilter.cxx @@ -1698,6 +1698,8 @@ sal_uInt16 GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPat { if (!ImportPDF(rIStream, rGraphic)) nStatus = GRFILTER_FILTERERROR; + else + eLinkType = GfxLinkType::NativePdf; } else nStatus = GRFILTER_FILTERERROR; diff --git a/vcl/source/filter/ipdf/pdfread.cxx b/vcl/source/filter/ipdf/pdfread.cxx index cc63415eba6d..6bd1f6f524a8 100644 --- a/vcl/source/filter/ipdf/pdfread.cxx +++ b/vcl/source/filter/ipdf/pdfread.cxx @@ -101,6 +101,13 @@ VCL_DLLPUBLIC bool ImportPDF(SvStream& rStream, Graphic& rGraphic) rGraphic = aMtf; + // Save the original PDF stream for later use. + rStream.Seek(STREAM_SEEK_TO_END); + uno::Sequence<sal_Int8> aPdfData(rStream.Tell()); + rStream.Seek(STREAM_SEEK_TO_BEGIN); + rStream.ReadBytes(aPdfData.getArray(), aPdfData.getLength()); + rGraphic.setPdfData(aPdfData); + return true; } diff --git a/vcl/source/gdi/graph.cxx b/vcl/source/gdi/graph.cxx index c5a7901e25ca..7a61594e1b42 100644 --- a/vcl/source/gdi/graph.cxx +++ b/vcl/source/gdi/graph.cxx @@ -593,6 +593,17 @@ const SvgDataPtr& Graphic::getSvgData() const return mpImpGraphic->getSvgData(); } +void Graphic::setPdfData(const uno::Sequence<sal_Int8>& rPdfData) +{ + ImplTestRefCount(); + mpImpGraphic->maPdfData = rPdfData; +} + +const uno::Sequence<sal_Int8>& Graphic::getPdfData() const +{ + return mpImpGraphic->maPdfData; +} + namespace { struct Id: public rtl::Static<cppu::OImplementationId, Id> {}; diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx index 8c66d1a0e548..933a0a60ffe9 100644 --- a/vcl/source/gdi/impgraph.cxx +++ b/vcl/source/gdi/impgraph.cxx @@ -51,6 +51,8 @@ #define GRAPHIC_FORMAT_50 static_cast<sal_uInt32>(COMPAT_FORMAT( 'G', 'R', 'F', '5' )) #define NATIVE_FORMAT_50 static_cast<sal_uInt32>(COMPAT_FORMAT( 'N', 'A', 'T', '5' )) +using namespace com::sun::star; + struct ImpSwapFile { INetURLObject aSwapURL; @@ -132,6 +134,7 @@ ImpGraphic::ImpGraphic( const ImpGraphic& rImpGraphic ) : mpAnimation = nullptr; maSvgData = rImpGraphic.maSvgData; + maPdfData = rImpGraphic.maPdfData; } ImpGraphic::ImpGraphic( const Bitmap& rBitmap ) : @@ -256,6 +259,7 @@ ImpGraphic& ImpGraphic::operator=( const ImpGraphic& rImpGraphic ) mpGfxLink = nullptr; maSvgData = rImpGraphic.maSvgData; + maPdfData = rImpGraphic.maPdfData; } return *this; @@ -304,6 +308,10 @@ bool ImpGraphic::operator==( const ImpGraphic& rImpGraphic ) const } } } + else if (maPdfData.hasElements()) + { + bRet = maPdfData == rImpGraphic.maPdfData; + } else if( mpAnimation ) { if( rImpGraphic.mpAnimation && ( *rImpGraphic.mpAnimation == *mpAnimation ) ) @@ -349,6 +357,7 @@ void ImpGraphic::ImplClearGraphics( bool bCreateSwapInfo ) } maSvgData.reset(); + maPdfData = uno::Sequence<sal_Int8>(); } void ImpGraphic::ImplClear() |