[Libreoffice-commits] core.git: sw/qa sw/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Wed Jun 2 08:32:24 UTC 2021


 sw/qa/extras/htmlexport/htmlexport.cxx  |   33 ++++++++++++++++++++++++++++++++
 sw/source/filter/html/htmlflywriter.cxx |   22 +++++++++++++++++----
 2 files changed, 51 insertions(+), 4 deletions(-)

New commits:
commit 4da0de52bbd9a2f53ce0e838f7b22c228e510f97
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Wed Jun 2 08:48:56 2021 +0200
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Wed Jun 2 10:31:45 2021 +0200

    sw XHTML / reqif export: export PNG shapes directly
    
    The old markup was:
    
    <object data="draw-png_xhtml_89305eb5d44b6428.gif">
    
    The new markup is:
    
    <object data="draw-png_xhtml_89305eb5d44b6428.png" type="image/png">
    
    Which now passes the validator.
    
    Change-Id: Ibcdac7aeef0e39c926176bf8852cffe17a137fa2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116565
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
    Tested-by: Jenkins

diff --git a/sw/qa/extras/htmlexport/htmlexport.cxx b/sw/qa/extras/htmlexport/htmlexport.cxx
index 275896ed7ccb..74af62a0a3e9 100644
--- a/sw/qa/extras/htmlexport/htmlexport.cxx
+++ b/sw/qa/extras/htmlexport/htmlexport.cxx
@@ -1590,6 +1590,39 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifEmbedJPGDirectly)
                 "image/png");
 }
 
+CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifEmbedPNGShapeDirectly)
+{
+    // Given a document with an image shape:
+    loadURL("private:factory/swriter", nullptr);
+    OUString aImageURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "ole2.png";
+    uno::Reference<css::lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+    uno::Reference<drawing::XShape> xShape(
+        xFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"), uno::UNO_QUERY);
+    xShape->setSize(awt::Size(10000, 10000));
+    uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
+    xShapeProps->setPropertyValue("GraphicURL", uno::makeAny(aImageURL));
+    uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+    xDrawPageSupplier->getDrawPage()->add(xShape);
+
+    // When exporting to XHTML:
+    uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+    uno::Sequence<beans::PropertyValue> aStoreProperties = {
+        comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")),
+        comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")),
+    };
+    xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties);
+
+    // Then make sure the PNG is embedded directly, without an RTF wrapper:
+    SvMemoryStream aStream;
+    HtmlExportTest::wrapFragment(maTempFile, aStream);
+    xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream);
+    CPPUNIT_ASSERT(pXmlDoc);
+    // Without the accompanying fix in place, this test would have failed with:
+    // - no attribute 'type' exist
+    // i.e. the PNG was exported as GIF, without an explicit type.
+    assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object", "type", "image/png");
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/html/htmlflywriter.cxx b/sw/source/filter/html/htmlflywriter.cxx
index a050c9c2056b..f4ff89c0b2b9 100644
--- a/sw/source/filter/html/htmlflywriter.cxx
+++ b/sw/source/filter/html/htmlflywriter.cxx
@@ -41,6 +41,7 @@
 #include <editeng/brushitem.hxx>
 #include <sal/log.hxx>
 #include <osl/diagnose.h>
+#include <svx/svdograf.hxx>
 
 #include <fmtanchr.hxx>
 #include <fmtornt.hxx>
@@ -1747,15 +1748,27 @@ static Writer & OutHTML_FrameFormatAsImage( Writer& rWrt, const SwFrameFormat& r
     Graphic aGraphic( const_cast<SwFrameFormat &>(rFrameFormat).MakeGraphic( &aIMap ) );
     Size aSz( 0, 0 );
     OUString GraphicURL;
+    OUString aMimeType("image/jpeg");
     if(!rHTMLWrt.mbEmbedImages)
     {
         if( rHTMLWrt.GetOrigFileName() )
             GraphicURL = *rHTMLWrt.GetOrigFileName();
+
+        OUString aFilterName("JPG");
+        XOutFlags nFlags = XOutFlags::UseGifIfPossible | XOutFlags::UseNativeIfPossible;
+
+        if (rHTMLWrt.mbReqIF)
+        {
+            // Writing image without fallback PNG in ReqIF mode: force PNG output.
+            aFilterName = "PNG";
+            nFlags = XOutFlags::NONE;
+            aMimeType = "image/png";
+        }
+
         if( aGraphic.GetType() == GraphicType::NONE ||
             XOutBitmap::WriteGraphic( aGraphic, GraphicURL,
-                                      "JPG",
-                                      (XOutFlags::UseGifIfPossible|
-                                       XOutFlags::UseNativeIfPossible) ) != ERRCODE_NONE )
+                                      aFilterName,
+                                      nFlags ) != ERRCODE_NONE )
         {
             // empty or incorrect, because there is nothing to output
             rHTMLWrt.m_nWarn = WARN_SWG_POOR_LOAD;
@@ -1767,10 +1780,11 @@ static Writer & OutHTML_FrameFormatAsImage( Writer& rWrt, const SwFrameFormat& r
             URIHelper::GetMaybeFileHdl() );
 
     }
+
     HtmlWriter aHtml(rWrt.Strm(), rHTMLWrt.maNamespace);
     OutHTML_ImageStart( aHtml, rWrt, rFrameFormat, GraphicURL, aGraphic, rFrameFormat.GetName(), aSz,
                     HtmlFrmOpts::GenImgMask, "frame",
-                    aIMap.GetIMapObjectCount() ? &aIMap : nullptr );
+                    aIMap.GetIMapObjectCount() ? &aIMap : nullptr, aMimeType );
     OutHTML_ImageEnd(aHtml, rWrt);
 
     return rWrt;


More information about the Libreoffice-commits mailing list