diff options
author | Jan Holesovsky <kendy@collabora.com> | 2019-10-18 11:19:04 +0200 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2020-03-17 22:01:15 +0100 |
commit | 6ac2d66c78d6c080aabfa46157113684c2f3a3b0 (patch) | |
tree | f9f3311931b517eeeca54701aa9dc772ee28698a /svx | |
parent | dc3c59a1d9e9240acfbc1a613115f04f577d1ca4 (diff) |
pdfium: Make Insert -> Image... use VectorGraphicData for PDF.
In principle, the current Svg/Emf/Wmf and PDF handling is trying to
achieve the same thing: Keep the original stream untouched, provide a
replacement graphics, and a kind of rendering.
To hold the data, the Svg/Emf/Wmf and PDF were using different structures
though. This commit consolidatates that, and makes the Insert
-> Image... (for PDF) actually using the VectorGraphicData to hold the
original stream.
This breaks loading the PDF as a document via PDFium - I'll fix it in
the next commit(s).
Change-Id: Iac102f32b757390a03438c165e430283851cc10b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90561
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/svdraw/svdedtv.cxx | 3 | ||||
-rw-r--r-- | svx/source/svdraw/svdedtv2.cxx | 11 | ||||
-rw-r--r-- | svx/source/svdraw/svdograf.cxx | 13 | ||||
-rw-r--r-- | svx/source/xml/xmlgrhlp.cxx | 26 | ||||
-rw-r--r-- | svx/source/xoutdev/_xoutbmp.cxx | 21 |
5 files changed, 5 insertions, 69 deletions
diff --git a/svx/source/svdraw/svdedtv.cxx b/svx/source/svdraw/svdedtv.cxx index b0825c0b4a58..2e63c58d32b4 100644 --- a/svx/source/svdraw/svdedtv.cxx +++ b/svx/source/svdraw/svdedtv.cxx @@ -607,8 +607,7 @@ void SdrEditView::CheckPossibilities() if (pSdrGrafObj != nullptr) { if ((pSdrGrafObj->HasGDIMetaFile() && !pSdrGrafObj->IsEPS()) || - pSdrGrafObj->isEmbeddedVectorGraphicData() || - pSdrGrafObj->isEmbeddedPdfData()) + pSdrGrafObj->isEmbeddedVectorGraphicData()) { m_bImportMtfPossible = true; } diff --git a/svx/source/svdraw/svdedtv2.cxx b/svx/source/svdraw/svdedtv2.cxx index 6672f742d534..9879d6adcee6 100644 --- a/svx/source/svdraw/svdedtv2.cxx +++ b/svx/source/svdraw/svdedtv2.cxx @@ -2106,17 +2106,6 @@ void SdrEditView::DoImportMarkedMtf(SvdProgressInfo *pProgrInfo) nInsCnt = aFilter.DoImport(aMetaFile, *pOL, nInsPos, pProgrInfo); } } - else if (pGraf->isEmbeddedPdfData()) - { -#if HAVE_FEATURE_PDFIUM - aLogicRect = pGraf->GetLogicRect(); - ImpSdrPdfImport aFilter(*mpModel, pObj->GetLayer(), aLogicRect, pGraf->getEmbeddedPdfData()); - if (pGraf->getEmbeddedPageNumber() < aFilter.GetPageCount()) - { - nInsCnt = aFilter.DoImport(*pOL, nInsPos, pGraf->getEmbeddedPageNumber(), pProgrInfo); - } -#endif // HAVE_FEATURE_PDFIUM - } } SdrOle2Obj* pOle2 = dynamic_cast<SdrOle2Obj*>(pObj); diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx index 37246e1c21fa..a924a9694a6e 100644 --- a/svx/source/svdraw/svdograf.cxx +++ b/svx/source/svdraw/svdograf.cxx @@ -282,8 +282,7 @@ const GraphicObject* SdrGrafObj::GetReplacementGraphicObject() const { const_cast< SdrGrafObj* >(this)->mpReplacementGraphicObject.reset(new GraphicObject(rVectorGraphicDataPtr->getReplacement())); } - else if (mpGraphicObject->GetGraphic().hasPdfData() || - mpGraphicObject->GetGraphic().GetType() == GraphicType::GdiMetafile) + else if (mpGraphicObject->GetGraphic().GetType() == GraphicType::GdiMetafile) { // Replacement graphic for PDF and metafiles is just the bitmap. const_cast<SdrGrafObj*>(this)->mpReplacementGraphicObject.reset(new GraphicObject(mpGraphicObject->GetGraphic().GetBitmapEx())); @@ -882,16 +881,6 @@ GDIMetaFile SdrGrafObj::GetMetaFile(GraphicType &rGraphicType) const return GDIMetaFile(); } -bool SdrGrafObj::isEmbeddedPdfData() const -{ - return mpGraphicObject->GetGraphic().hasPdfData(); -} - -const std::shared_ptr<std::vector<sal_Int8>> & SdrGrafObj::getEmbeddedPdfData() const -{ - return mpGraphicObject->GetGraphic().getPdfData(); -} - sal_Int32 SdrGrafObj::getEmbeddedPageNumber() const { return mpGraphicObject->GetGraphic().getPageNumber(); diff --git a/svx/source/xml/xmlgrhlp.cxx b/svx/source/xml/xmlgrhlp.cxx index ed5b97aa15b9..e456900f78cf 100644 --- a/svx/source/xml/xmlgrhlp.cxx +++ b/svx/source/xml/xmlgrhlp.cxx @@ -754,29 +754,7 @@ OUString SvXMLGraphicHelper::implSaveGraphic(css::uno::Reference<css::graphic::X std::unique_ptr<SvStream> pStream(utl::UcbStreamHelper::CreateStream(aStream.xStream)); if (bUseGfxLink && aGfxLink.GetDataSize() && aGfxLink.GetData()) { - const std::shared_ptr<std::vector<sal_Int8>> rPdfData = aGraphic.getPdfData(); - if (rPdfData && !rPdfData->empty()) - { - // See if we have this PDF already, and avoid duplicate storage. - auto aIt = maExportPdf.find(rPdfData.get()); - if (aIt != maExportPdf.end()) - { - auto const& aURLAndMimePair = aIt->second; - rOutSavedMimeType = aURLAndMimePair.second; - return aURLAndMimePair.first; - } - - // The graphic has PDF data attached to it, use that. - // vcl::ImportPDF() possibly downgraded the PDF data from a - // higher PDF version, while aGfxLink still contains the - // original data provided by the user. - pStream->WriteBytes(rPdfData->data(), rPdfData->size()); - } - else - { - pStream->WriteBytes(aGfxLink.GetData(), aGfxLink.GetDataSize()); - } - + pStream->WriteBytes(aGfxLink.GetData(), aGfxLink.GetDataSize()); rOutSavedMimeType = aMimeType; bSuccess = (pStream->GetError() == ERRCODE_NONE); } @@ -842,8 +820,6 @@ OUString SvXMLGraphicHelper::implSaveGraphic(css::uno::Reference<css::graphic::X // put into cache maExportGraphics[aGraphic] = std::make_pair(aStoragePath, rOutSavedMimeType); - if (aGraphic.hasPdfData()) - maExportPdf[aGraphic.getPdfData().get()] = std::make_pair(aStoragePath, rOutSavedMimeType); return aStoragePath; } diff --git a/svx/source/xoutdev/_xoutbmp.cxx b/svx/source/xoutdev/_xoutbmp.cxx index 3b6852467a72..7eadfe7cacc4 100644 --- a/svx/source/xoutdev/_xoutbmp.cxx +++ b/svx/source/xoutdev/_xoutbmp.cxx @@ -138,8 +138,9 @@ ErrCode XOutBitmap::WriteGraphic( const Graphic& rGraphic, OUString& rFileName, const bool bIsSvg(rFilterName.equalsIgnoreAsciiCase("svg") && VectorGraphicDataType::Svg == aVectorGraphicDataPtr->getVectorGraphicDataType()); const bool bIsWmf(rFilterName.equalsIgnoreAsciiCase("wmf") && VectorGraphicDataType::Wmf == aVectorGraphicDataPtr->getVectorGraphicDataType()); const bool bIsEmf(rFilterName.equalsIgnoreAsciiCase("emf") && VectorGraphicDataType::Emf == aVectorGraphicDataPtr->getVectorGraphicDataType()); + const bool bIsPdf(rFilterName.equalsIgnoreAsciiCase("pdf") && VectorGraphicDataType::Pdf == aVectorGraphicDataPtr->getVectorGraphicDataType()); - if (bIsSvg || bIsWmf || bIsEmf) + if (bIsSvg || bIsWmf || bIsEmf || bIsPdf) { if (!(nFlags & XOutFlags::DontAddExtension)) { @@ -163,24 +164,6 @@ ErrCode XOutBitmap::WriteGraphic( const Graphic& rGraphic, OUString& rFileName, } } - // Write PDF data in original form if possible. - if (rGraphic.hasPdfData() && rFilterName.equalsIgnoreAsciiCase("pdf")) - { - if (!(nFlags & XOutFlags::DontAddExtension)) - aURL.setExtension(rFilterName); - - rFileName = aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE); - SfxMedium aMedium(aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE), StreamMode::WRITE|StreamMode::SHARE_DENYNONE|StreamMode::TRUNC); - if (SvStream* pOutStream = aMedium.GetOutStream()) - { - const std::shared_ptr<std::vector<sal_Int8>> rPdfData(rGraphic.getPdfData()); - pOutStream->WriteBytes(rPdfData->data(), rPdfData->size()); - aMedium.Commit(); - if (!aMedium.GetError()) - nErr = ERRCODE_NONE; - } - } - if( ERRCODE_NONE != nErr ) { if( ( nFlags & XOutFlags::UseNativeIfPossible ) && |