summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-06-27 11:26:57 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-06-27 10:39:00 +0000
commitfda68426374ed915783fd306c2f56463c757774a (patch)
treeb8e61da4bb9d7ebe770ab7b61e9c3aa09fa3dfb6
parentf474952b9e0e85ea71d26c18351d27b00711ff84 (diff)
ODT export: add embedded pdf support
Once a .pdf file is inserted in Writer using Insert -> Image, Writer now advertises a replacement metafile for it (to make LO <= 5.2 and other ODF readers still be able to read the graphic, where the replacement is the same as the original metafile, but without .pdf data), and the ODF export writes the .pdf data with the correct extension / mime type. Also extend the checksum logic to take care of the pdf data, so on export xmloff won't think that the full and the replacement graphic are the same. The import side is still missing, so no testcase yet. Change-Id: I5c5b7c80ca4024ecbcb5b2d4442d21ca33755546 Reviewed-on: https://gerrit.libreoffice.org/26695 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
-rw-r--r--svx/source/xml/xmlgrhlp.cxx2
-rw-r--r--sw/source/core/graphic/ndgrf.cxx3
-rw-r--r--vcl/source/gdi/impgraph.cxx4
3 files changed, 9 insertions, 0 deletions
diff --git a/svx/source/xml/xmlgrhlp.cxx b/svx/source/xml/xmlgrhlp.cxx
index 6422c161319e..66f2a1866c41 100644
--- a/svx/source/xml/xmlgrhlp.cxx
+++ b/svx/source/xml/xmlgrhlp.cxx
@@ -473,6 +473,7 @@ OUString SvXMLGraphicHelper::ImplGetGraphicMimeType( const OUString& rFileName )
{ "jpg", "image/jpeg" },
{ "tif", "image/tiff" },
{ "svg", "image/svg+xml" },
+ { "pdf", "application/pdf" },
{ "wmf", "image/x-wmf" },
{ "eps", "image/x-eps" },
{ "bmp", "image/bmp" },
@@ -691,6 +692,7 @@ void SvXMLGraphicHelper::ImplInsertGraphicURL( const OUString& rURLStr, sal_uInt
else
aExtension = ".svg";
break;
+ case GfxLinkType::NativePdf: aExtension = ".pdf"; break;
default:
aExtension = ".grf";
diff --git a/sw/source/core/graphic/ndgrf.cxx b/sw/source/core/graphic/ndgrf.cxx
index 7b513136c254..97e1b6c49dc6 100644
--- a/sw/source/core/graphic/ndgrf.cxx
+++ b/sw/source/core/graphic/ndgrf.cxx
@@ -402,6 +402,9 @@ const GraphicObject* SwGrfNode::GetReplacementGrfObj() const
{
const_cast< SwGrfNode* >(this)->mpReplacementGraphic = new GraphicObject(rSvgDataPtr->getReplacement());
}
+ else if (GetGrfObj().GetGraphic().getPdfData().hasElements())
+ // This returns the metafile, without the pdf data.
+ const_cast<SwGrfNode*>(this)->mpReplacementGraphic = new GraphicObject(GetGrfObj().GetGraphic().GetGDIMetaFile());
}
return mpReplacementGraphic;
diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx
index 933a0a60ffe9..25d82d8fc8ac 100644
--- a/vcl/source/gdi/impgraph.cxx
+++ b/vcl/source/gdi/impgraph.cxx
@@ -1406,6 +1406,10 @@ BitmapChecksum ImpGraphic::ImplGetChecksum() const
default:
nRet = maMetaFile.GetChecksum();
+ if (maPdfData.hasElements())
+ // Include the PDF data in the checksum, so a metafile with
+ // and without PDF data is considered to be different.
+ nRet = vcl_get_checksum(nRet, maPdfData.getConstArray(), maPdfData.getLength());
break;
}
}