23 #include <com/sun/star/embed/XTransactedObject.hpp>
24 #include <com/sun/star/embed/ElementModes.hpp>
25 #include <com/sun/star/beans/XPropertySet.hpp>
26 #include <com/sun/star/io/NotConnectedException.hpp>
27 #include <com/sun/star/lang/XServiceInfo.hpp>
28 #include <com/sun/star/lang/XInitialization.hpp>
29 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
30 #include <com/sun/star/util/XCancellable.hpp>
31 #include <com/sun/star/embed/XHierarchicalStorageAccess.hpp>
38 #include <rtl/ref.hxx>
56 #include <string_view>
83 class GraphicInputStream :
public cppu::WeakImplHelper<XInputStream>
87 virtual sal_Int32 SAL_CALL readSomeBytes(
Sequence<sal_Int8> & aData, sal_Int32 nMaxBytesToRead)
override;
88 virtual void SAL_CALL skipBytes(sal_Int32 nBytesToSkip)
override;
89 virtual sal_Int32 SAL_CALL available()
override;
90 virtual void SAL_CALL closeInput()
override;
98 explicit GraphicInputStream(
GraphicObject const & raGraphicObject,
const OUString & rMimeType);
99 GraphicInputStream(
const GraphicInputStream&) =
delete;
101 GraphicInputStream& operator=(
const GraphicInputStream&) =
delete;
105 return mxStreamWrapper.is();
110 GraphicInputStream::GraphicInputStream(
GraphicObject const & aGraphicObject,
const OUString & rMimeType)
112 maTempFile.EnableKillingFile();
114 if (aGraphicObject.
GetType() == GraphicType::NONE)
123 const GfxLink aGfxLink(aGraphic.GetGfxLink());
126 if (aGfxLink.GetDataSize() && aGfxLink.GetData())
128 if (rMimeType.isEmpty())
130 pStream->WriteBytes(aGfxLink.GetData(), aGfxLink.GetDataSize());
141 if (aGraphic.GetType() == GraphicType::Bitmap)
144 OUString aFormat = rMimeType;
146 if (aGraphic.IsAnimated())
147 aFormat =
"image/gif";
148 else if (aFormat.isEmpty())
149 aFormat =
"image/png";
153 else if (rMimeType.isEmpty() && aGraphic.GetType() == GraphicType::GdiMetafile)
156 pStream->SetCompressMode(SvStreamCompressFlags::ZBITMAP);
158 aWriter.
Write(aGraphic.GetGDIMetaFile());
161 else if (!rMimeType.isEmpty())
171 mxStreamWrapper = new ::utl::OInputStreamWrapper(std::move(pStream));
177 if (!mxStreamWrapper.is())
178 throw NotConnectedException();
180 return mxStreamWrapper->readBytes(rData, nBytesToRead);
183 sal_Int32 SAL_CALL GraphicInputStream::readSomeBytes(
Sequence<sal_Int8>& rData, sal_Int32 nMaxBytesToRead )
185 if (!mxStreamWrapper.is())
186 throw NotConnectedException() ;
188 return mxStreamWrapper->readSomeBytes(rData, nMaxBytesToRead);
191 void SAL_CALL GraphicInputStream::skipBytes(sal_Int32 nBytesToSkip)
193 if (!mxStreamWrapper.is())
194 throw NotConnectedException();
196 mxStreamWrapper->skipBytes(nBytesToSkip);
199 sal_Int32 SAL_CALL GraphicInputStream::available()
201 if (!mxStreamWrapper.is())
202 throw NotConnectedException();
204 return mxStreamWrapper->available();
207 void SAL_CALL GraphicInputStream::closeInput()
209 if (!mxStreamWrapper.is())
210 throw NotConnectedException();
212 mxStreamWrapper->closeInput();
215 class SvXMLGraphicOutputStream:
216 public cppu::WeakImplHelper<XOutputStream>
222 virtual void SAL_CALL flush()
override;
223 virtual void SAL_CALL closeOutput()
override;
227 std::unique_ptr<::utl::TempFile> mpTmp;
228 std::unique_ptr<SvStream> mpOStm;
230 std::unique_ptr<GraphicObject> mxGrfObj;
235 SvXMLGraphicOutputStream();
236 virtual ~SvXMLGraphicOutputStream()
override;
237 SvXMLGraphicOutputStream(
const SvXMLGraphicOutputStream&) =
delete;
238 SvXMLGraphicOutputStream& operator=(
const SvXMLGraphicOutputStream&) =
delete;
240 bool Exists()
const {
return mxStmWrapper.is(); }
245 SvXMLGraphicOutputStream::SvXMLGraphicOutputStream()
246 : mpTmp(new ::utl::TempFile)
250 mpTmp->EnableKillingFile();
255 mxStmWrapper = new ::utl::OOutputStreamWrapper( *mpOStm );
258 SvXMLGraphicOutputStream::~SvXMLGraphicOutputStream()
266 if( !mxStmWrapper.is() )
267 throw NotConnectedException() ;
269 mxStmWrapper->writeBytes( rData );
272 void SAL_CALL SvXMLGraphicOutputStream::flush()
274 if( !mxStmWrapper.is() )
275 throw NotConnectedException() ;
277 mxStmWrapper->flush();
280 void SAL_CALL SvXMLGraphicOutputStream::closeOutput()
282 if( !mxStmWrapper.is() )
283 throw NotConnectedException() ;
285 mxStmWrapper->closeOutput();
286 mxStmWrapper.clear();
291 Graphic SvXMLGraphicOutputStream::GetGraphic()
295 if (mbClosed && mxGrfObj->GetType() == GraphicType::NONE && mpOStm)
309 sal_uInt64 nStreamLen = mpOStm->TellEnd();
312 if ( nStreamLen == 0 )
318 nStreamLen = mpOStm->TellEnd();
321 if( nStreamLen >= 2 )
324 mpOStm->ReadBytes(sFirstBytes, 2);
326 if( sFirstBytes[0] == 0x1f && sFirstBytes[1] == 0x8b )
329 ZCodec aZCodec( 0x8000, 0x8000 );
336 sal_uInt64 nStreamLen_ = aDest.
TellEnd();
348 if (aGraphic.
GetType() != GraphicType::NONE)
356 const GraphicObject& SvXMLGraphicOutputStream::GetGraphicObject()
358 Graphic aGraphic(GetGraphic());
359 if (aGraphic.
GetType() != GraphicType::NONE)
370 Init(
nullptr, eCreateMode );
383 OUString& rPictureStorageName,
384 OUString& rPictureStreamName )
386 if (rURLStr.isEmpty())
389 const OUString aURLStr {rURLStr.copy(rURLStr.lastIndexOf(
':')+1)};
391 if( !aURLStr.isEmpty() && aURLStr.indexOf(
'/')<0 )
394 rPictureStreamName = aURLStr;
399 SAL_WARN_IF(rPictureStreamName.isEmpty(),
"svx",
"SvXMLGraphicHelper::ImplInsertGraphicURL: invalid scheme: " << rURLStr);
401 return !rPictureStreamName.isEmpty();
406 uno::Reference < embed::XStorage > xRetStorage;
415 ? embed::ElementModes::READWRITE
416 : embed::ElementModes::READ );
418 catch ( uno::Exception& )
422 if(!xRetStorage.is())
429 catch ( uno::Exception& )
439 const OUString& rPictureStreamName )
444 sal_Int32 nMode = embed::ElementModes::READ;
447 nMode = embed::ElementModes::READWRITE;
452 aRet.
xStream = aRet.
xStorage->openStreamElement( rPictureStreamName, nMode );
454 else if (rPictureStorageName.indexOf(
'/') != -1)
456 uno::Reference<embed::XHierarchicalStorageAccess> xHierRootStorage(
mxRootStorage,
458 if (xHierRootStorage.is())
462 aRet.
xStream = xHierRootStorage->openStreamElementByHierarchicalName(
463 rPictureStorageName +
"/" + rPictureStreamName, nMode);
466 catch (
const uno::Exception&)
469 "SvXMLGraphicHelper::ImplGetGraphicStream: failed to open "
470 << rPictureStreamName);
477 uno::Reference<beans::XPropertySet> xProps(aRet.
xStream, uno::UNO_QUERY);
478 xProps->setPropertyValue(
"UseCommonStoragePasswordEncryption",
uno::Any(
true));
486 if( ( rFileName.getLength() >= 4 ) && ( rFileName[ rFileName.getLength() - 4 ] ==
'.' ) )
488 const OString aExt(
OUStringToOString(rFileName.subView(rFileName.getLength() - 3),
489 RTL_TEXTENCODING_ASCII_US));
497 const OUString& rPictureStreamName )
507 aReturnGraphic = aGraphic;
512 return aReturnGraphic;
517 const OUString& rGraphicMimeType )
528 pThis->Init( rXMLStorage, eCreateMode, OUString() );
534 const OUString& rGraphicMimeType )
538 pThis->Init(
nullptr, eCreateMode, rGraphicMimeType );
546 void splitUserDataFromURL(OUString
const & rWholeURL, OUString & rJustURL, OUString & rUserData)
548 sal_Int32 nUser = rWholeURL.indexOf(
'?');
551 rJustURL = rWholeURL.copy(0, nUser);
553 rUserData = rWholeURL.copy(nUser);
557 rJustURL = rWholeURL;
566 throw uno::RuntimeException(
"XGraphicObjectResolver has been removed in LibreOffice 6.1");
574 uno::Reference<graphic::XGraphic> xGraphic;
578 splitUserDataFromURL(rURL, aURLOnly, aUserData);
583 return aIterator->second;
586 OUString aPictureStorageName, aPictureStreamName;
592 if (aGraphicObject.
GetType() != GraphicType::NONE)
606 uno::Reference<graphic::XGraphic> xGraphic;
611 SvXMLGraphicOutputStream* pGraphicOutputStream =
static_cast<SvXMLGraphicOutputStream*
>(rxOutputStream.get());
612 if (pGraphicOutputStream)
614 xGraphic = pGraphicOutputStream->GetGraphic().GetXGraphic();
621 OUString & rOutSavedMimeType, OUString
const & rRequestName)
628 OUString aOutMimeType;
629 return implSaveGraphic(rxGraphic, aOutMimeType, std::u16string_view());
633 OUString & rOutSavedMimeType, std::u16string_view rRequestName)
640 auto const & aURLAndMimePair = aIterator->second;
641 rOutSavedMimeType = aURLAndMimePair.second;
642 return aURLAndMimePair.first;
647 if (aGraphicObject.
GetType() != GraphicType::NONE)
651 bool bUseGfxLink =
true;
653 if (aGfxLink.GetDataSize())
655 switch (aGfxLink.GetType())
657 case GfxLinkType::EpsBuffer: aExtension =
".eps";
break;
658 case GfxLinkType::NativeGif: aExtension =
".gif";
break;
660 case GfxLinkType::NativeBmp: aExtension =
".bmp";
break;
661 case GfxLinkType::NativeJpg: aExtension =
".jpg";
break;
662 case GfxLinkType::NativePng: aExtension =
".png";
break;
663 case GfxLinkType::NativeTif: aExtension =
".tif";
break;
664 case GfxLinkType::NativeWmf:
665 if (aGfxLink.IsEMF())
670 case GfxLinkType::NativeMet: aExtension =
".met";
break;
671 case GfxLinkType::NativePct: aExtension =
".pct";
break;
672 case GfxLinkType::NativeSvg:
692 case GfxLinkType::NativePdf: aExtension =
".pdf";
break;
693 case GfxLinkType::NativeWebp: aExtension =
".webp";
break;
702 if (aGraphicObject.
GetType() == GraphicType::Bitmap)
709 else if (aGraphicObject.
GetType() == GraphicType::GdiMetafile)
714 if (ImplCheckForEPS(rMetafile))
721 OUString rPictureStreamName;
722 if (!rRequestName.empty())
724 rPictureStreamName = rRequestName + aExtension;
728 OUString
sId = OStringToOUString(aGraphicObject.
GetUniqueID(), RTL_TEXTENCODING_ASCII_US);
729 rPictureStreamName = sId + aExtension;
737 uno::Reference<beans::XPropertySet> xProps(aStream.
xStream, uno::UNO_QUERY);
740 if (!aMimeType.isEmpty())
742 xProps->setPropertyValue(
"MediaType",
uno::Any(aMimeType));
749 static const char* aCompressiblePics[] =
760 bool bSuccess =
false;
762 bool bCompressed = aMimeType.isEmpty();
765 for(
const char*
p : aCompressiblePics)
767 if( aMimeType.equalsIgnoreAsciiCaseAscii(
p) )
775 xProps->setPropertyValue(
"Compressed",
Any(bCompressed));
778 if (bUseGfxLink && aGfxLink.GetDataSize() && aGfxLink.GetData())
780 pStream->WriteBytes(aGfxLink.GetData(), aGfxLink.GetDataSize());
781 rOutSavedMimeType = aMimeType;
786 if (aGraphic.
GetType() == GraphicType::Bitmap)
803 else if (aGraphic.
GetType() == GraphicType::GdiMetafile)
806 pStream->SetCompressMode(SvStreamCompressFlags::ZBITMAP);
817 pStream->WriteBytes(pData, nSize);
837 uno::Reference<embed::XTransactedObject> xStorage(aStream.
xStorage, uno::UNO_QUERY);
839 aStream.
xStream->getOutputStream()->closeOutput();
843 OUString aStoragePath =
"Pictures/" + rPictureStreamName;
846 maExportGraphics[aGraphic] = std::make_pair(aStoragePath, rOutSavedMimeType);
869 if (pInputStream->exists())
870 xInputStream = pInputStream.get();
891 if( pOutputStream->Exists() )
893 xRet = pOutputStream.get();
909 SvXMLGraphicOutputStream* pOStm =
static_cast< SvXMLGraphicOutputStream*
>( rxBinaryStream.get() );
914 const OUString
aId(OStringToOUString(
915 rGrfObj.
GetUniqueID(), RTL_TEXTENCODING_ASCII_US));
934 document::XGraphicObjectResolver,
935 document::XGraphicStorageHandler,
936 document::XBinaryStreamResolver,
938 SvXMLGraphicImportExportHelper_Base;
942 class SvXMLGraphicImportExportHelper :
943 public impl::SvXMLGraphicImportExportHelper_Base
951 virtual void disposing(std::unique_lock<std::mutex>&)
override;
955 virtual void SAL_CALL initialize(
const Sequence< Any >& aArguments )
override;
961 virtual css::uno::Reference<css::graphic::XGraphic> SAL_CALL
964 virtual css::uno::Reference<css::graphic::XGraphic> SAL_CALL
967 virtual OUString SAL_CALL
968 saveGraphic(css::uno::Reference<css::graphic::XGraphic>
const & rxGraphic)
override;
970 virtual OUString SAL_CALL
971 saveGraphicByName(css::uno::Reference<css::graphic::XGraphic>
const & rxGraphic, OUString & rOutSavedMimeType, OUString
const & rRequestName)
override;
973 virtual css::uno::Reference<css::io::XInputStream> SAL_CALL
974 createInputStream(css::uno::Reference<css::graphic::XGraphic>
const & rxGraphic)
override;
992 m_eGraphicHelperMode( eMode )
995 void SvXMLGraphicImportExportHelper::disposing(std::unique_lock<std::mutex>&)
997 if (m_xXMLGraphicHelper)
999 m_xXMLGraphicHelper->dispose();
1000 m_xXMLGraphicHelper.clear();
1005 void SAL_CALL SvXMLGraphicImportExportHelper::initialize(
1009 if( aArguments.hasElements() )
1010 aArguments[0] >>= xStorage;
1016 OUString SAL_CALL SvXMLGraphicImportExportHelper::resolveGraphicObjectURL(
const OUString& aURL )
1018 return m_xXMLGraphicHelper->resolveGraphicObjectURL( aURL );
1022 uno::Reference<graphic::XGraphic> SAL_CALL SvXMLGraphicImportExportHelper::loadGraphic(OUString
const & rURL)
1024 return m_xXMLGraphicHelper->loadGraphic(rURL);
1027 uno::Reference<graphic::XGraphic> SAL_CALL SvXMLGraphicImportExportHelper::loadGraphicFromOutputStream(uno::Reference<io::XOutputStream>
const & rxOutputStream)
1029 return m_xXMLGraphicHelper->loadGraphicFromOutputStream(rxOutputStream);
1032 OUString SAL_CALL SvXMLGraphicImportExportHelper::saveGraphic(css::uno::Reference<css::graphic::XGraphic>
const & rxGraphic)
1034 return m_xXMLGraphicHelper->saveGraphic(rxGraphic);
1037 OUString SAL_CALL SvXMLGraphicImportExportHelper::saveGraphicByName(css::uno::Reference<css::graphic::XGraphic>
const & rxGraphic,
1038 OUString & rOutSavedMimeType, OUString
const & rRequestName)
1040 return m_xXMLGraphicHelper->saveGraphicByName(rxGraphic, rOutSavedMimeType, rRequestName);
1043 uno::Reference<io::XInputStream> SAL_CALL SvXMLGraphicImportExportHelper::createInputStream(uno::Reference<graphic::XGraphic>
const & rxGraphic)
1045 return m_xXMLGraphicHelper->createInputStream(rxGraphic);
1051 return m_xXMLGraphicHelper->getInputStream( aURL );
1055 return m_xXMLGraphicHelper->createOutputStream();
1059 return m_xXMLGraphicHelper->resolveOutputStream( aBinaryStream );
1063 OUString SAL_CALL SvXMLGraphicImportExportHelper::getImplementationName()
1066 return "com.sun.star.comp.Svx.GraphicImportHelper";
1067 return "com.sun.star.comp.Svx.GraphicExportHelper";
1070 sal_Bool SAL_CALL SvXMLGraphicImportExportHelper::supportsService(
const OUString& ServiceName )
1077 return {
"com.sun.star.document.GraphicObjectResolver",
1078 "com.sun.star.document.GraphicStorageHandler",
1079 "com.sun.star.document.BinaryStreamResolver" };
1095 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
1097 css::uno::XComponentContext *,
1098 css::uno::Sequence<css::uno::Any>
const &)
1115 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
1117 css::uno::XComponentContext *,
1118 css::uno::Sequence<css::uno::Any>
const &)
1127 uno::Reference<lang::XMultiServiceFactory>
const xModelFactory(xModel, uno::UNO_QUERY);
1128 assert(xModelFactory.is());
1131 uno::Reference<util::XCancellable>
const xGradient(
1132 xModelFactory->createInstance(
"com.sun.star.drawing.GradientTable"),
1136 xGradient->cancel();
1139 uno::Reference<util::XCancellable>
const xHatch(
1140 xModelFactory->createInstance(
"com.sun.star.drawing.HatchTable"),
1147 uno::Reference<util::XCancellable>
const xBitmap(
1148 xModelFactory->createInstance(
"com.sun.star.drawing.BitmapTable"),
1155 uno::Reference<util::XCancellable>
const xTransGradient(
1156 xModelFactory->createInstance(
"com.sun.star.drawing.TransparencyGradientTable"),
1158 if (xTransGradient.is())
1160 xTransGradient->cancel();
1163 uno::Reference<util::XCancellable>
const xMarker(
1164 xModelFactory->createInstance(
"com.sun.star.drawing.MarkerTable"),
1171 uno::Reference<util::XCancellable>
const xDashes(
1172 xModelFactory->createInstance(
"com.sun.star.drawing.DashTable"),
1181 TOOLS_WARN_EXCEPTION(
"svx",
"dropUnusedNamedItems(): exception during clearing of unused named items");
OUString maOutputMimeType
UNOTOOLS_DLLPUBLIC bool Exists(OUString const &url)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_comp_Svx_GraphicImportHelper_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
Create this with createInstanceWithArguments.
virtual css::uno::Reference< css::graphic::XGraphic > SAL_CALL loadGraphicFromOutputStream(css::uno::Reference< css::io::XOutputStream > const &rxOutputStream) override
ErrCode ImportGraphic(Graphic &rGraphic, const INetURLObject &rPath, sal_uInt16 nFormat=GRFILTER_FORMAT_DONTKNOW, sal_uInt16 *pDeterminedFormat=nullptr, GraphicFilterImportFlags nImportFlags=GraphicFilterImportFlags::NONE)
void SetSynchronMode(bool bTheSync=true)
static void splitObjectURL(const OUString &aURLNoPar, OUString &rContainerStorageName, OUString &rObjectStorageName)
static SVX_DLLPRIVATE bool ImplGetStreamNames(const OUString &rURLStr, OUString &rPictureStorageName, OUString &rPictureStreamName)
std::unique_ptr< sal_Int32[]> pData
css::uno::Reference< css::embed::XStorage > xStorage
#define ZCODEC_DEFAULT_COMPRESSION
constexpr OUStringLiteral XML_GRAPHICOBJECT_URL_BASE
void Init(const css::uno::Reference< css::embed::XStorage > &xXMLStorage, SvXMLGraphicHelperMode eCreateMode, const OUString &rGraphicMimeType=OUString())
css::uno::Sequence< OUString > getSupportedServiceNames()
OUString getImplementationName()
const ContentProperties & rData
sal_uInt64 Seek(sal_uInt64 nPos)
tools::Long Decompress(SvStream &rIStm, SvStream &rOStm)
virtual OUString SAL_CALL resolveGraphicObjectURL(const OUString &aURL) override
const sal_uInt8 * GetData() const
static SVX_DLLPRIVATE OUString ImplGetGraphicMimeType(const OUString &rFileName)
virtual sal_uInt64 TellEnd() override
Graphic ImportUnloadedGraphic(SvStream &rIStream, sal_uInt64 sizeLimit=0, const Size *pSizeHint=nullptr)
SvStream & Write(const GDIMetaFile &rMetaFile)
static std::unique_ptr< SvStream > CreateStream(const OUString &rFileName, StreamMode eOpenMode, css::uno::Reference< css::awt::XWindow > xParentWin=nullptr)
OUString maCurStorageName
OString GetUniqueID() const
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
virtual OUString SAL_CALL resolveOutputStream(const css::uno::Reference< css::io::XOutputStream > &rxBinaryStream) override
const GDIMetaFile & GetGDIMetaFile() const
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
sal_uInt16 GetExportFormatNumberForShortName(std::u16string_view rShortName)
css::uno::Reference< css::embed::XStorage > mxRootStorage
virtual void disposing(std::unique_lock< std::mutex > &)
constexpr OUStringLiteral aData
virtual OUString SAL_CALL saveGraphicByName(css::uno::Reference< css::graphic::XGraphic > const &rxGraphic, OUString &rOutSavedMimeType, OUString const &rRequestName) override
SvtSaveOptions::ODFSaneDefaultVersion GetODFSaneDefaultVersion()
static OUString GetMimeTypeForExtension(std::string_view rExt)
#define TOOLS_WARN_EXCEPTION(area, stream)
GraphicType GetType() const
SVX_DLLPRIVATE Graphic ImplReadGraphic(const OUString &rPictureStorageName, const OUString &rPictureStreamName)
sal_uInt16 GetExportFormatNumberForMediaType(std::u16string_view rShortName)
std::unordered_map< OUString, css::uno::Reference< css::graphic::XGraphic > > maGraphicObjects
void BeginCompression(int nCompressLevel=ZCODEC_DEFAULT_COMPRESSION, bool gzLib=false)
tools::Long EndCompression()
virtual css::uno::Reference< css::io::XOutputStream > SAL_CALL createOutputStream() override
virtual ~SvXMLGraphicHelper() override
#define GRFILTER_FORMAT_DONTKNOW
GfxLink GetGfxLink() const
ErrCode ExportGraphic(const Graphic &rGraphic, const INetURLObject &rPath, sal_uInt16 nFormat, const css::uno::Sequence< css::beans::PropertyValue > *pFilterData=nullptr)
GraphicType GetType() const
SVX_DLLPRIVATE css::uno::Reference< css::embed::XStorage > ImplGetGraphicStorage(const OUString &rPictureStorageName)
SvXMLGraphicHelperMode meCreateMode
std::vector< css::uno::Reference< css::io::XOutputStream > > maGrfStms
virtual OUString SAL_CALL saveGraphic(css::uno::Reference< css::graphic::XGraphic > const &rxGraphic) override
const Graphic & GetGraphic() const
#define SAL_WARN_IF(condition, area, stream)
void DropUnusedNamedItems(css::uno::Reference< css::uno::XInterface > const &xModel)
constexpr OUStringLiteral XML_GRAPHICSTORAGE_NAME
virtual css::uno::Reference< css::graphic::XGraphic > SAL_CALL loadGraphic(OUString const &aURL) override
css::uno::Reference< css::io::XStream > xStream
css::uno::Reference< css::graphic::XGraphic > GetXGraphic() const
static GraphicFilter & GetGraphicFilter()
sal_uInt32 GetDataSize() const
const sal_Unicode *const aMimeType[]
static rtl::Reference< SvXMLGraphicHelper > Create(const css::uno::Reference< css::embed::XStorage > &rXMLStorage, SvXMLGraphicHelperMode eCreateMode)
virtual css::uno::Reference< css::io::XInputStream > SAL_CALL createInputStream(css::uno::Reference< css::graphic::XGraphic > const &rxGraphic) override
SVX_DLLPRIVATE OUString implSaveGraphic(css::uno::Reference< css::graphic::XGraphic > const &rxGraphic, OUString &rOutMimeType, std::u16string_view rRequestName)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_comp_Svx_GraphicExportHelper_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
Create this with createInstanceWithArguments.
SVX_DLLPRIVATE SvxGraphicHelperStream_Impl ImplGetGraphicStream(const OUString &rPictureStorageName, const OUString &rPictureStreamName)
std::unordered_map< Graphic, std::pair< OUString, OUString > > maExportGraphics
virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getInputStream(const OUString &rURL) override