summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2020-03-27 20:14:39 +0100
committerTomaž Vajngerl <quikee@gmail.com>2020-04-01 12:31:40 +0200
commitbdfc08855324e71168e633fa579aa04add5c0957 (patch)
treea747441c7d111c9d64d15b377a4088bf8d764664
parent8631282f450afad4c112497814a984a75c87884e (diff)
pdfium: make breaking of PDF graphic work again
Changing PDF to use VectorGraphicData deleted the calls which triggered the breaking of the PDF. This change makes breaking work again. Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91234 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com> (cherry picked from commit f265b14d6f8e3e63260b3c8ecce48d4251288fea) Change-Id: I1d817f1556e37fcbcc3d2850b690eb0810676fa5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91446 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
-rw-r--r--svx/source/svdraw/svdedtv2.cxx17
-rw-r--r--svx/source/svdraw/svdpdf.cxx13
-rw-r--r--svx/source/svdraw/svdpdf.hxx8
3 files changed, 29 insertions, 9 deletions
diff --git a/svx/source/svdraw/svdedtv2.cxx b/svx/source/svdraw/svdedtv2.cxx
index d6ef069e9564..cf9746ae93ba 100644
--- a/svx/source/svdraw/svdedtv2.cxx
+++ b/svx/source/svdraw/svdedtv2.cxx
@@ -45,6 +45,7 @@
#include <sal/log.hxx>
#include <memory>
#include <vector>
+#include <vcl/graph.hxx>
using ::std::vector;
using namespace com::sun::star;
@@ -2043,7 +2044,21 @@ void SdrEditView::DoImportMarkedMtf(SvdProgressInfo *pProgrInfo)
SdrGrafObj* pGraf = dynamic_cast<SdrGrafObj*>( pObj );
if (pGraf != nullptr)
{
- if (pGraf->HasGDIMetaFile() || pGraf->isEmbeddedVectorGraphicData())
+ Graphic aGraphic = pGraf->GetGraphic();
+ auto const & pVectorGraphicData = aGraphic.getVectorGraphicData();
+
+ if (pVectorGraphicData && pVectorGraphicData->getVectorGraphicDataType() == VectorGraphicDataType::Pdf)
+ {
+#if HAVE_FEATURE_PDFIUM
+ aLogicRect = pGraf->GetLogicRect();
+ ImpSdrPdfImport aFilter(*mpModel, pObj->GetLayer(), aLogicRect, aGraphic);
+ if (pGraf->getEmbeddedPageNumber() < aFilter.GetPageCount())
+ {
+ nInsAnz = aFilter.DoImport(*pOL, nInsPos, aGraphic.getPageNumber(), pProgrInfo);
+ }
+#endif // HAVE_FEATURE_PDFIUM
+ }
+ else if (pGraf->HasGDIMetaFile() || pGraf->isEmbeddedVectorGraphicData() )
{
GDIMetaFile aMetaFile(GetMetaFile(pGraf));
if (aMetaFile.GetActionSize())
diff --git a/svx/source/svdraw/svdpdf.cxx b/svx/source/svdraw/svdpdf.cxx
index ecf78dbdd3e5..d24d85b2205d 100644
--- a/svx/source/svdraw/svdpdf.cxx
+++ b/svx/source/svdraw/svdpdf.cxx
@@ -29,6 +29,7 @@
#include <vcl/bitmapaccess.hxx>
#include <vcl/graph.hxx>
+#include <vcl/vectorgraphicdata.hxx>
#include <editeng/editdata.hxx>
#include <o3tl/make_unique.hxx>
@@ -115,11 +116,11 @@ struct FPDFBitmapDeleter
using namespace com::sun::star;
ImpSdrPdfImport::ImpSdrPdfImport(SdrModel& rModel, SdrLayerID nLay, const tools::Rectangle& rRect,
- const std::shared_ptr<std::vector<sal_Int8>>& pPdfData)
- : maTmpList()
+ Graphic const& rGraphic)
+ : mrGraphic(rGraphic)
+ , maTmpList()
, mpVD(VclPtr<VirtualDevice>::Create())
, maScaleRect(rRect)
- , mpPdfData(pPdfData)
, mnMapScalingOfs(0)
, mpModel(&rModel)
, mnLayer(nLay)
@@ -163,8 +164,10 @@ ImpSdrPdfImport::ImpSdrPdfImport(SdrModel& rModel, SdrLayerID nLay, const tools:
FPDF_InitLibraryWithConfig(&aConfig);
// Load the buffer using pdfium.
- mpPdfDocument = FPDF_LoadMemDocument(mpPdfData->data(), mpPdfData->size(),
- /*password=*/nullptr);
+ auto const& rVectorGraphicData = mrGraphic.getVectorGraphicData();
+ mpPdfDocument = FPDF_LoadMemDocument(
+ rVectorGraphicData->getVectorGraphicDataArray().getConstArray(),
+ rVectorGraphicData->getVectorGraphicDataArrayLength(), /*password=*/nullptr);
if (!mpPdfDocument)
{
//TODO: Handle failure to load.
diff --git a/svx/source/svdraw/svdpdf.hxx b/svx/source/svdraw/svdpdf.hxx
index 70b5a44e4ddf..1005b081142a 100644
--- a/svx/source/svdraw/svdpdf.hxx
+++ b/svx/source/svdraw/svdpdf.hxx
@@ -32,6 +32,7 @@
#include <tools/fract.hxx>
#include <vcl/metaact.hxx>
#include <vcl/virdev.hxx>
+#include <vcl/graph.hxx>
#include <svx/svdobj.hxx>
#include <svx/xdash.hxx>
#include <com/sun/star/uno/Sequence.hxx>
@@ -158,10 +159,10 @@ class ImpSdrPdfImport final
double ma, mb, mc, md, me, mf;
};
- ::std::vector<SdrObject*> maTmpList;
+ Graphic const& mrGraphic;
+ std::vector<SdrObject*> maTmpList;
ScopedVclPtr<VirtualDevice> mpVD;
tools::Rectangle const maScaleRect;
- const std::shared_ptr<std::vector<sal_Int8>> mpPdfData;
size_t mnMapScalingOfs; // from here on, not edited with MapScaling
std::unique_ptr<SfxItemSet> mpLineAttr;
std::unique_ptr<SfxItemSet> mpFillAttr;
@@ -233,7 +234,8 @@ class ImpSdrPdfImport final
public:
ImpSdrPdfImport(SdrModel& rModel, SdrLayerID nLay, const tools::Rectangle& rRect,
- const std::shared_ptr<std::vector<sal_Int8>>& pPdfData);
+ Graphic const& rGraphic);
+
~ImpSdrPdfImport();
int GetPageCount() const { return mnPageCount; }