sc/qa/extras/scpdfexport.cxx | 18 +++++++++ sc/qa/extras/testdocuments/tdf159066.ods |binary svx/source/sdr/contact/viewcontactofsdrole2obj.cxx | 38 ++++++++++++++------- 3 files changed, 44 insertions(+), 12 deletions(-)
New commits: commit 37eb62c995a72fcd01d5f79e8b04fa0578cb822b Author: Tibor Nagy <tibor.nagy.ext...@allotropia.de> AuthorDate: Thu Jan 11 02:45:05 2024 +0100 Commit: Nagy Tibor <tibor.nagy.ext...@allotropia.de> CommitDate: Thu Jan 11 14:14:20 2024 +0100 tdf#159066 sc: fix OLE object alternative text (PDF/UA export) Change-Id: I0af9cf61cafbe7ba93d08ed22fc11bb173612bfe Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161904 Tested-by: Jenkins Reviewed-by: Nagy Tibor <tibor.nagy.ext...@allotropia.de> diff --git a/sc/qa/extras/scpdfexport.cxx b/sc/qa/extras/scpdfexport.cxx index ae85dbb9b442..de888c083387 100644 --- a/sc/qa/extras/scpdfexport.cxx +++ b/sc/qa/extras/scpdfexport.cxx @@ -65,6 +65,7 @@ public: void testExportFitToPage_Tdf103516(); void testUnoCommands_Tdf120161(); void testTdf64703_hiddenPageBreak(); + void testTdf159066(); void testTdf159065(); void testTdf123870(); void testTdf143978(); @@ -78,6 +79,7 @@ public: CPPUNIT_TEST(testExportFitToPage_Tdf103516); CPPUNIT_TEST(testUnoCommands_Tdf120161); CPPUNIT_TEST(testTdf64703_hiddenPageBreak); + CPPUNIT_TEST(testTdf159066); CPPUNIT_TEST(testTdf159065); CPPUNIT_TEST(testTdf123870); CPPUNIT_TEST(testTdf143978); @@ -396,6 +398,22 @@ void ScPDFExportTest::testTdf64703_hiddenPageBreak() } } +void ScPDFExportTest::testTdf159066() +{ + loadFromFile(u"tdf159066.ods"); + uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY); + + // A1:E5 + ScRange range1(0, 0, 0, 4, 4, 0); + exportToPDF(xModel, range1); + + bool bFound = false; + CPPUNIT_ASSERT(hasTextInPdf("/Alt<", bFound)); + + // The OLE object contains alternative text description + CPPUNIT_ASSERT_EQUAL(true, bFound); +} + void ScPDFExportTest::testTdf159065() { loadFromFile(u"tdf159065.ods"); diff --git a/sc/qa/extras/testdocuments/tdf159066.ods b/sc/qa/extras/testdocuments/tdf159066.ods new file mode 100644 index 000000000000..c8dafee209c3 Binary files /dev/null and b/sc/qa/extras/testdocuments/tdf159066.ods differ diff --git a/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx b/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx index ab76225e5713..6899bb5407e2 100644 --- a/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx +++ b/svx/source/sdr/contact/viewcontactofsdrole2obj.cxx @@ -29,6 +29,7 @@ #include <sdr/primitive2d/sdrolecontentprimitive2d.hxx> #include <basegfx/matrix/b2dhommatrixtools.hxx> #include <drawinglayer/primitive2d/transformprimitive2d.hxx> +#include <drawinglayer/primitive2d/objectinfoprimitive2d.hxx> #include <svx/charthelper.hxx> #include <svtools/embedhlp.hxx> @@ -85,7 +86,7 @@ void ViewContactOfSdrOle2Obj::createPrimitive2DSequenceWithParameters(drawinglay rItemSet, GetOle2Obj().getText(0), true)); - drawinglayer::primitive2d::Primitive2DReference xContent; + drawinglayer::primitive2d::Primitive2DContainer xContent; if(GetOle2Obj().IsChart()) { @@ -110,25 +111,38 @@ void ViewContactOfSdrOle2Obj::createPrimitive2DSequenceWithParameters(drawinglay aEmbed.scale(1.0 / fWidth, 1.0 / fHeight); aEmbed = aObjectMatrix * aEmbed; - xContent = new drawinglayer::primitive2d::TransformPrimitive2D( - aEmbed, - std::move(aChartSequence)); + xContent = drawinglayer::primitive2d::Primitive2DContainer{ + new drawinglayer::primitive2d::TransformPrimitive2D(aEmbed, + std::move(aChartSequence)) + }; } } - if(!xContent.is()) + if(xContent.empty()) { // #i102063# embed OLE content in an own primitive; this will be able to decompose accessing // the weak SdrOle2 reference and will also implement getB2DRange() for fast BoundRect // calculations without OLE Graphic access (which may trigger e.g. chart recalculation). // It will also take care of HighContrast and ScaleContent - xContent = new drawinglayer::primitive2d::SdrOleContentPrimitive2D( - GetOle2Obj(), - aObjectMatrix, + xContent = drawinglayer::primitive2d::Primitive2DContainer{ + new drawinglayer::primitive2d::SdrOleContentPrimitive2D( + GetOle2Obj(), aObjectMatrix, + + // #i104867# add GraphicVersion number to be able to check for + // content change in the primitive later + GetOle2Obj().getEmbeddedObjectRef().getGraphicVersion()) + }; + } - // #i104867# add GraphicVersion number to be able to check for - // content change in the primitive later - GetOle2Obj().getEmbeddedObjectRef().getGraphicVersion() ); + if (!GetOle2Obj().GetName().isEmpty() || !GetOle2Obj().GetTitle().isEmpty() + || !GetOle2Obj().GetDescription().isEmpty()) + { + xContent = drawinglayer::primitive2d::Primitive2DContainer{ + drawinglayer::primitive2d::Primitive2DReference( + new drawinglayer::primitive2d::ObjectInfoPrimitive2D( + std::move(xContent), GetOle2Obj().GetName(), GetOle2Obj().GetTitle(), + GetOle2Obj().GetDescription())) + }; } // create primitive. Use Ole2 primitive here. Prepare attribute settings, will @@ -136,7 +150,7 @@ void ViewContactOfSdrOle2Obj::createPrimitive2DSequenceWithParameters(drawinglay // SdrOle2Primitive2D to create needed invisible elements for HitTest and/or BoundRect const drawinglayer::primitive2d::Primitive2DReference xReference( new drawinglayer::primitive2d::SdrOle2Primitive2D( - drawinglayer::primitive2d::Primitive2DContainer { xContent }, + std::move(xContent), aObjectMatrix, aAttribute));