diff options
author | Tor Lillqvist <tml@collabora.com> | 2017-02-15 19:21:06 +0200 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2017-03-10 16:22:40 +0100 |
commit | e0fbf3d67f96636161fae742b02e625ebda6d16d (patch) | |
tree | dd843921f1eb18091baac7c9dadf4207757244e3 /oox | |
parent | 385b0fc6d528434eaf1c21155097dae73d89866f (diff) |
tdf#106304: Fix newline and empty paragraph font size issues in .pptx export
Output <a:br> instead of for hard newlines. This fixes the
problem that the line before the hard newline in the .pptx export is
not centred.
The fix for the sd_export_ooxml1 test is a bit hacky, but then so is
the code in question.
Don't unnecessarily use bogus default char size for a:endParaRPr.
Instead use the size last used for an a:rPr below the same WriteText()
call. I am not exactly sure about how this hangs together, but this
has the desired effect on the exported .pptx.
(cherry picked from commit 1154cda87d518156d1e52dfb81d5e23b32ab23d5)
(cherry picked from commit 6f93eeb0ba8c4af5c96d1db36f184ffbc71c67ba)
Change-Id: Ie23e0c33e6efb303b183d3b2efce6866d0dda4e8
Reviewed-on: https://gerrit.libreoffice.org/34887
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
(cherry picked from commit 31e6b78a196fbf73d61349ad3530cf49ee145186)
Diffstat (limited to 'oox')
-rw-r--r-- | oox/source/export/chartexport.cxx | 11 | ||||
-rw-r--r-- | oox/source/export/drawingml.cxx | 75 |
2 files changed, 57 insertions, 29 deletions
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index ccfc244126a3..41faecacdbdb 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -1102,13 +1102,16 @@ void ChartExport::exportTitle( const Reference< XShape >& xShape ) pFS->startElement( FSNS( XML_a, XML_pPr ), FSEND ); - WriteRunProperties(xPropSet, false, XML_defRPr); + bool bDummy = false; + sal_Int32 nDummy; + WriteRunProperties(xPropSet, false, XML_defRPr, true, bDummy, nDummy ); pFS->endElement( FSNS( XML_a, XML_pPr ) ); pFS->startElement( FSNS( XML_a, XML_r ), FSEND ); - WriteRunProperties( xPropSet, false ); + bDummy = false; + WriteRunProperties( xPropSet, false, XML_rPr, true, bDummy, nDummy ); pFS->startElement( FSNS( XML_a, XML_t ), FSEND ); pFS->writeEscaped( sText ); @@ -2390,7 +2393,9 @@ void ChartExport::exportTextProps(const Reference<XPropertySet>& xPropSet) pFS->startElement(FSNS(XML_a, XML_p), FSEND); pFS->startElement(FSNS(XML_a, XML_pPr), FSEND); - WriteRunProperties(xPropSet, false, XML_defRPr); + bool bDummy = false; + sal_Int32 nDummy; + WriteRunProperties(xPropSet, false, XML_defRPr, true, bDummy, nDummy); pFS->endElement(FSNS(XML_a, XML_pPr)); pFS->endElement(FSNS(XML_a, XML_p)); diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index bd4c0c1eb644..d9bc62d5f8f0 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -1205,7 +1205,8 @@ void DrawingML::WriteShapeTransformation( const Reference< XShape >& rXShape, sa WriteTransformation( Rectangle( Point( aPos.X, aPos.Y ), Size( aSize.Width, aSize.Height ) ), nXmlNamespace, bFlipH, bFlipV, OOX_DRAWINGML_EXPORT_ROTATE_CLOCKWISIFY(nRotation) ); } -void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool bIsField, sal_Int32 nElement /*= XML_rPr*/, bool bCheckDirect/* = true */) +void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool bIsField, sal_Int32 nElement, bool bCheckDirect, + bool& rbOverridingCharHeight, sal_Int32& rnCharHeight ) { Reference< XPropertySet > rXPropSet( rRun, UNO_QUERY ); Reference< XPropertyState > rXPropState( rRun, UNO_QUERY ); @@ -1222,8 +1223,19 @@ void DrawingML::WriteRunProperties( const Reference< XPropertySet >& rRun, bool sal_Int32 nCharEscapement = 0; sal_Int32 nCharKerning = 0; - if( GETA( CharHeight ) ) + if ( nElement == XML_endParaRPr && rbOverridingCharHeight ) + { + nSize = rnCharHeight; + } + else if( GETA( CharHeight ) ) + { nSize = (sal_Int32) (100*(*o3tl::doAccess<float>(mAny))); + if ( nElement == XML_rPr ) + { + rbOverridingCharHeight = true; + rnCharHeight = nSize; + } + } if( GETA( CharKerning ) ) nCharKerning = (sal_Int32)(*o3tl::doAccess<sal_Int16>(mAny)); @@ -1580,7 +1592,8 @@ OString DrawingML::GetUUID() return OString(str, SAL_N_ELEMENTS(str)); } -void DrawingML::WriteRun( const Reference< XTextRange >& rRun ) +void DrawingML::WriteRun( const Reference< XTextRange >& rRun, + bool& rbOverridingCharHeight, sal_Int32& rnCharHeight) { Reference< XPropertySet > rXPropSet( rRun, UNO_QUERY ); sal_Int16 nLevel = -1; @@ -1619,29 +1632,37 @@ void DrawingML::WriteRun( const Reference< XTextRange >& rRun ) } } - if( ( bWriteField ) ) + if (sText == "\n") { - OString sUUID(GetUUID()); - mpFS->startElementNS( XML_a, XML_fld, - XML_id, sUUID.getStr(), - XML_type, OUStringToOString( sFieldValue, RTL_TEXTENCODING_UTF8 ).getStr(), - FSEND ); + mpFS->singleElementNS( XML_a, XML_br, + FSEND ); } else { - mpFS->startElementNS( XML_a, XML_r, FSEND ); - } + if( ( bWriteField ) ) + { + OString sUUID(GetUUID()); + mpFS->startElementNS( XML_a, XML_fld, + XML_id, sUUID.getStr(), + XML_type, OUStringToOString( sFieldValue, RTL_TEXTENCODING_UTF8 ).getStr(), + FSEND ); + } + else + { + mpFS->startElementNS( XML_a, XML_r, FSEND ); + } - Reference< XPropertySet > xPropSet( rRun, uno::UNO_QUERY ); - WriteRunProperties( xPropSet, bIsURLField ); - mpFS->startElementNS( XML_a, XML_t, FSEND ); - mpFS->writeEscaped( sText ); - mpFS->endElementNS( XML_a, XML_t ); + Reference< XPropertySet > xPropSet( rRun, uno::UNO_QUERY ); + WriteRunProperties( xPropSet, bIsURLField, XML_rPr, true, rbOverridingCharHeight, rnCharHeight ); + mpFS->startElementNS( XML_a, XML_t, FSEND ); + mpFS->writeEscaped( sText ); + mpFS->endElementNS( XML_a, XML_t ); - if( bWriteField ) - mpFS->endElementNS( XML_a, XML_fld ); - else - mpFS->endElementNS( XML_a, XML_r ); + if( bWriteField ) + mpFS->endElementNS( XML_a, XML_fld ); + else + mpFS->endElementNS( XML_a, XML_r ); + } } OUString GetAutoNumType(sal_Int16 nNumberingType, bool bSDot, bool bPBehind, bool bPBoth) @@ -2014,7 +2035,8 @@ void DrawingML::WriteParagraphProperties( const Reference< XTextContent >& rPara } } -void DrawingML::WriteParagraph( const Reference< XTextContent >& rParagraph ) +void DrawingML::WriteParagraph( const Reference< XTextContent >& rParagraph, + bool& rbOverridingCharHeight, sal_Int32& rnCharHeight ) { Reference< XEnumerationAccess > access( rParagraph, UNO_QUERY ); if( !access.is() ) @@ -2026,7 +2048,6 @@ void DrawingML::WriteParagraph( const Reference< XTextContent >& rParagraph ) mpFS->startElementNS( XML_a, XML_p, FSEND ); - bool bPropertiesWritten = false; while( enumeration->hasMoreElements() ) { @@ -2040,11 +2061,11 @@ void DrawingML::WriteParagraph( const Reference< XTextContent >& rParagraph ) WriteParagraphProperties( rParagraph ); bPropertiesWritten = true; } - WriteRun( run ); + WriteRun( run, rbOverridingCharHeight, rnCharHeight ); } } Reference< XPropertySet > rXPropSet( rParagraph, UNO_QUERY ); - WriteRunProperties( rXPropSet , false, XML_endParaRPr, false ); + WriteRunProperties( rXPropSet, false, XML_endParaRPr, false, rbOverridingCharHeight, rnCharHeight ); mpFS->endElementNS( XML_a, XML_p ); } @@ -2215,15 +2236,17 @@ void DrawingML::WriteText( const Reference< XInterface >& rXIface, const OUStrin return; } + bool bOverridingCharHeight = false; + sal_Int32 nCharHeight; + while( enumeration->hasMoreElements() ) { Reference< XTextContent > paragraph; Any any ( enumeration->nextElement() ); if( any >>= paragraph) - WriteParagraph( paragraph ); + WriteParagraph( paragraph, bOverridingCharHeight, nCharHeight ); } - } void DrawingML::WritePresetShape( const char* pShape , std::vector< std::pair<sal_Int32,sal_Int32>> & rAvList ) |