Kaydet (Commit) fda68426 authored tarafından Miklos Vajna's avatar Miklos Vajna

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/26695Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
Tested-by: 's avatarJenkins <ci@libreoffice.org>
üst f474952b
......@@ -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";
......
......@@ -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;
......
......@@ -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;
}
}
......
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