Kaydet (Commit) 87432aee authored tarafından Armin Le Grand's avatar Armin Le Grand Kaydeden (comit) Caolán McNamara

Resolves: #i123042# corrected reload of linked content...

to have access to its own path

(cherry picked from commit bc89d402)

Conflicts:
	sfx2/source/appl/fileobj.cxx
	svgio/source/svgreader/svgimagenode.cxx
	svx/source/svdraw/svdograf.cxx

Change-Id: I4f3e98588f17b4271465359a7f56f9845029e012
üst ad1390b8
...@@ -324,7 +324,9 @@ sal_Bool SvFileObject::GetGraphic_Impl( Graphic& rGrf, SvStream* pStream ) ...@@ -324,7 +324,9 @@ sal_Bool SvFileObject::GetGraphic_Impl( Graphic& rGrf, SvStream* pStream )
else if( !pDownLoadData ) else if( !pDownLoadData )
{ {
pStream->Seek( STREAM_SEEK_TO_BEGIN ); pStream->Seek( STREAM_SEEK_TO_BEGIN );
nRes = rGF.ImportGraphic( rGrf, aEmptyStr, *pStream, nFilter );
// #i123042# for e.g. SVG the path is needed, see same TaskID in svx for more info
nRes = rGF.ImportGraphic( rGrf, sFileNm, *pStream, nFilter );
} }
else else
{ {
......
...@@ -234,21 +234,32 @@ namespace svgio ...@@ -234,21 +234,32 @@ namespace svgio
else if(!maUrl.isEmpty()) else if(!maUrl.isEmpty())
{ {
const OUString& rPath = getDocument().getAbsolutePath(); const OUString& rPath = getDocument().getAbsolutePath();
const OUString aAbsUrl(rtl::Uri::convertRelToAbs(rPath, maUrl));
if(!aAbsUrl.isEmpty()) if (!rPath.isEmpty())
{ {
SvFileStream aStream(aAbsUrl, STREAM_STD_READ); const OUString aAbsUrl(rtl::Uri::convertRelToAbs(rPath, maUrl));
Graphic aGraphic;
if(GRFILTER_OK == GraphicFilter::GetGraphicFilter().ImportGraphic( if (!aAbsUrl.isEmpty())
aGraphic,
aAbsUrl,
aStream))
{ {
extractFromGraphic(aGraphic, aNewTarget, aViewBox, aBitmapEx); SvFileStream aStream(aAbsUrl, STREAM_STD_READ);
Graphic aGraphic;
if(GRFILTER_OK == GraphicFilter::GetGraphicFilter().ImportGraphic(
aGraphic,
aAbsUrl,
aStream))
{
extractFromGraphic(aGraphic, aNewTarget, aViewBox, aBitmapEx);
}
} }
} }
else
{
// #i123042# detect missing path and assert - content will be missing. The
// absolute path to itself needs to be set to correctly import linked
// content in a SVG file
OSL_ENSURE(false, "SVG graphic with internal links is interpreted, but local AbsolutePath is not set: linked content will be missing (!)");
}
} }
else if(!maXLink.isEmpty()) else if(!maXLink.isEmpty())
{ {
......
...@@ -119,7 +119,6 @@ const Graphic ImpLoadLinkedGraphic( const OUString& aFileName, const OUString& a ...@@ -119,7 +119,6 @@ const Graphic ImpLoadLinkedGraphic( const OUString& aFileName, const OUString& a
? rGF.GetImportFormatNumber( aFilterName ) ? rGF.GetImportFormatNumber( aFilterName )
: GRFILTER_FORMAT_DONTKNOW; : GRFILTER_FORMAT_DONTKNOW;
OUString aEmptyStr;
css::uno::Sequence< css::beans::PropertyValue > aFilterData( 1 ); css::uno::Sequence< css::beans::PropertyValue > aFilterData( 1 );
// TODO: Room for improvement: // TODO: Room for improvement:
...@@ -127,8 +126,15 @@ const Graphic ImpLoadLinkedGraphic( const OUString& aFileName, const OUString& a ...@@ -127,8 +126,15 @@ const Graphic ImpLoadLinkedGraphic( const OUString& aFileName, const OUString& a
// But this link is required by some filters to access the native graphic (PDF export/MS export), // But this link is required by some filters to access the native graphic (PDF export/MS export),
// there we should create a new service to provide this data if needed // there we should create a new service to provide this data if needed
aFilterData[ 0 ].Name = "CreateNativeLink"; aFilterData[ 0 ].Name = "CreateNativeLink";
aFilterData[ 0 ].Value = Any( true ); aFilterData[ 0 ].Value = Any( sal_True );
rGF.ImportGraphic( aGraphic, aEmptyStr, *pInStrm, nFilter, NULL, 0, &aFilterData );
// #i123042# for e.g SVG the path is needed, so hand it over here. I have no real idea
// what consequences this may have; maybe this is not handed over by purpose here. Not
// handing it over means that any GraphicFormat that internallv needs a path as base
// to interpret included links may fail.
// Alternatively the path may be set at the result after this call when it is known
// that it is a SVG graphic, but only because noone yet tried to interpret it.
rGF.ImportGraphic( aGraphic, aFileName, *pInStrm, nFilter, NULL, 0, &aFilterData );
} }
return aGraphic; return aGraphic;
} }
......
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