sw/qa/extras/ooxmlimport/data/tdf109053.docx |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx     |    8 ++++++++
 writerfilter/source/dmapper/PropertyMap.cxx  |   23 +++++++++++++++++------
 3 files changed, 25 insertions(+), 6 deletions(-)

New commits:
commit 92dc49a206dee0c157c57e5458a69365effa981f
Author: Tamás Zolnai <tamas.zol...@collabora.com>
Date:   Thu Jul 13 21:16:03 2017 +0200

    tdf#109053: DOCX: Multipage table is not imported properly
    
    An other use case when converting to a "floating table" is
    not a good idea. In this case we can check whether next to
    the table anything fits in the text area. If not then we
    can avoid floating table conversion.
    
    Reviewed-on: https://gerrit.libreoffice.org/39811
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Tamás Zolnai <tamas.zol...@collabora.com>
    (cherry picked from commit fc55711f01af172eb3a034454405fa941454c781)
    
    Change-Id: I798a2f4c7a9dfe6aecbe4a73e3162b49ea5f0adc
    Reviewed-on: https://gerrit.libreoffice.org/39929
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk>

diff --git a/sw/qa/extras/ooxmlimport/data/tdf109053.docx 
b/sw/qa/extras/ooxmlimport/data/tdf109053.docx
new file mode 100755
index 000000000000..f700c4d6a48d
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf109053.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx 
b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 45ddf31920b4..891ed7e2d61f 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -1348,6 +1348,14 @@ DECLARE_OOXMLIMPORT_TEST(testTdf108350, "tdf108350.docx")
 }
 
 
+
+DECLARE_OOXMLIMPORT_TEST(testTdf109053, "tdf109053.docx")
+{
+    // Table was imported into a text frame which led to a one page document
+    // Originally the table takes two pages, so Writer should import it 
accordingly.
+    CPPUNIT_ASSERT_EQUAL(getPages(), 2);
+}
+
 // tests should only be added to ooxmlIMPORT *if* they fail round-tripping in 
ooxmlEXPORT
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx 
b/writerfilter/source/dmapper/PropertyMap.cxx
index 3df7c864cd55..a4e092973539 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -1063,16 +1063,27 @@ bool SectionPropertyMap::FloatingTableConversion( 
DomainMapper_Impl& rDM_Impl, F
         }
     }
 
-    // If the table is wider than the text area, then don't create a fly
-    // for the table: no wrapping will be performed anyway, but multi-page
-    // tables will be broken.
+    // It seems Word has a limit here, so that in case the table width is quite
+    // close to the text area width, then it won't perform a wrapping, even in
+    // case the content (e.g. an empty paragraph) would fit. The magic constant
+    // here represents this limit.
+    const sal_Int32 nMagicNumber = 469;
+
+    // If the table's with is smaller than the text area width, text might
+    // be next to the table and so it should behave as a floating table.
     if ( nTableWidth < nTextAreaWidth )
         return true;
 
-    // If the position is relative to the edge of the page, then we always
-    // create the fly.
+    // If the position is relative to the edge of the page, then we need to 
check the whole
+    // page width to see whether text can fit next to the table.
     if ( rInfo.getPropertyValue( "HoriOrientRelation" ) == 
text::RelOrientation::PAGE_FRAME )
-        return true;
+    {
+        // If the table is wide enough to that no text fits next to it, then 
don't create a fly
+        // for the table: no wrapping will be performed anyway, but multi-page
+        // tables will be broken.
+        if ((nTableWidth + nMagicNumber) < (nPageWidth - 
std::min(GetLeftMargin(), GetRightMargin())))
+            return true;
+    }
 
     // If there are columns, always create the fly, otherwise the columns would
     // restrict geometry of the table.
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to