desktop/source/lib/init.cxx | 40 +++++++++++++++--- sc/source/filter/html/htmlexp.cxx | 81 +++++++++++++++++++------------------- sd/source/filter/html/htmlex.cxx | 52 ++++++++++++++++++++++-- sd/source/filter/html/htmlex.hxx | 4 + vcl/source/filter/wmf/winmtf.cxx | 22 ++-------- vcl/source/filter/wmf/winmtf.hxx | 2 vcl/source/filter/wmf/winwmf.cxx | 14 ++++++ 7 files changed, 145 insertions(+), 70 deletions(-)
New commits: commit 6e793fdb9f349e650cf3bed47cd900119147c442 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.com> Date: Mon Apr 28 17:37:43 2014 +0200 sd html: Support export of any text objects (draw) and groups Change-Id: Ied2de0a076db722df8366e866ae66846f3fb2854 diff --git a/sd/source/filter/html/htmlex.cxx b/sd/source/filter/html/htmlex.cxx index dd69ce4..e6f163d 100644 --- a/sd/source/filter/html/htmlex.cxx +++ b/sd/source/filter/html/htmlex.cxx @@ -62,13 +62,16 @@ #include <svl/style.hxx> #include <editeng/frmdiritem.hxx> #include <svx/svdoutl.hxx> +#include <svx/svdogrp.hxx> #include <tools/urlobj.hxx> #include <vcl/bmpacc.hxx> #include <svtools/sfxecode.hxx> #include <com/sun/star/beans/PropertyState.hpp> #include <tools/resmgr.hxx> -#include "comphelper/anytostring.hxx" -#include "cppuhelper/exc_hlp.hxx" +#include <comphelper/anytostring.hxx> +#include <cppuhelper/exc_hlp.hxx> +#include <basegfx/polygon/b2dpolygon.hxx> +#include <svx/svdotable.hxx> #include "drawdoc.hxx" #include "htmlpublishmode.hxx" @@ -80,9 +83,6 @@ #include "imapinfo.hxx" #include "sdresid.hxx" #include "buttonset.hxx" -#include <basegfx/polygon/b2dpolygon.hxx> - -#include <svx/svdotable.hxx> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -1218,6 +1218,23 @@ OUString HtmlExport::CreateTextForPage(SdrOutliner* pOutliner, SdPage* pPage, switch (eKind) { + case PRESOBJ_NONE: + { + if (pObject->GetObjIdentifier() == OBJ_GRUP) + { + SdrObjGroup* pObjectGroup = (SdrObjGroup*) pObject; + WriteObjectGroup(aStr, pObjectGroup, pOutliner, rBackgroundColor, false); + } + else + { + if (pObject->GetOutlinerParaObject()) + { + WriteOutlinerParagraph(aStr, pOutliner, pObject->GetOutlinerParaObject(), rBackgroundColor, false); + } + } + } + break; + case PRESOBJ_TABLE: { SdrTableObj* pTableObject = (SdrTableObj*) pObject; @@ -1248,6 +1265,7 @@ OUString HtmlExport::CreateTextForPage(SdrOutliner* pOutliner, SdPage* pPage, aStr.append("</table>\r\n"); } break; + case PRESOBJ_TEXT: case PRESOBJ_OUTLINE: { @@ -1257,6 +1275,7 @@ OUString HtmlExport::CreateTextForPage(SdrOutliner* pOutliner, SdPage* pPage, WriteOutlinerParagraph(aStr, pOutliner, pTextObject->GetOutlinerParaObject(), rBackgroundColor, bHeadLine); } break; + default: break; } @@ -1264,6 +1283,29 @@ OUString HtmlExport::CreateTextForPage(SdrOutliner* pOutliner, SdPage* pPage, return aStr.makeStringAndClear(); } +void HtmlExport::WriteObjectGroup(OUStringBuffer& aStr, SdrObjGroup* pObjectGroup, SdrOutliner* pOutliner, + const Color& rBackgroundColor, bool bHeadLine) +{ + SdrObjListIter aGroupIterator(*pObjectGroup->GetSubList(), IM_DEEPNOGROUPS); + while (aGroupIterator.IsMore()) + { + SdrObject* pCurrentObject = aGroupIterator.Next(); + if (pCurrentObject->GetObjIdentifier() == OBJ_GRUP) + { + SdrObjGroup* pCurrentGroupObject = (SdrObjGroup*) pCurrentObject; + WriteObjectGroup(aStr, pCurrentGroupObject, pOutliner, rBackgroundColor, bHeadLine); + } + else + { + OutlinerParaObject* pOutlinerParagraphObject = pCurrentObject->GetOutlinerParaObject(); + if (pOutlinerParagraphObject != NULL) + { + WriteOutlinerParagraph(aStr, pOutliner, pOutlinerParagraphObject, rBackgroundColor, bHeadLine); + } + } + } +} + void HtmlExport::WriteOutlinerParagraph(OUStringBuffer& aStr, SdrOutliner* pOutliner, OutlinerParaObject* pOutlinerParagraphObject, const Color& rBackgroundColor, bool bHeadLine) diff --git a/sd/source/filter/html/htmlex.hxx b/sd/source/filter/html/htmlex.hxx index 58e0086..51d3359 100644 --- a/sd/source/filter/html/htmlex.hxx +++ b/sd/source/filter/html/htmlex.hxx @@ -55,6 +55,7 @@ class SdrOutliner; class SdPage; class HtmlState; class SdrTextObj; +class SdrObjGroup; class SdrPage; class SdDrawDocument; class ButtonSet; @@ -215,6 +216,9 @@ class HtmlExport OutlinerParaObject* pOutlinerParagraphObject, const Color& rBackgroundColor, bool bHeadLine); + void WriteObjectGroup(OUStringBuffer& aStr, SdrObjGroup* pObjectGroup, SdrOutliner* pOutliner, + const Color& rBackgroundColor, bool bHeadLine); + public: HtmlExport(const OUString& aPath, const css::uno::Sequence<css::beans::PropertyValue>& rParams, commit 306b29a62f7735fb0d80b7e6e987c7921ebf2c82 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.com> Date: Mon Apr 28 17:36:30 2014 +0200 libLO: add extension map for draw's formats Change-Id: Ie447f334e3fca606323870f0ce21e85d4fc0978f diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index da4b854..3b04559 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -100,6 +100,24 @@ static const ExtensionMap aImpressExtensionMap[] = { NULL, NULL } }; +static const ExtensionMap aDrawExtensionMap[] = +{ + { "odg", "draw8" }, + { "fodg", "draw_ODG_FlatXML" }, + { "html", "draw_html_Export" }, + { "svg", "draw_svg_Export" }, + { "swf", "draw_flash_Export" }, + { "xhtml", "XHTML Draw File" }, + { "vdx", "draw_Visio_Document" }, + { "vsd", "draw_Visio_Document" }, + { "vsdm", "draw_Visio_Document" }, + { "vsdx", "draw_Visio_Document" }, + { "pub", "draw_Publisher_Document" }, + { "cdr", "draw_CorelDraw_Document" }, + { "wpg", "draw_WordPerfect_Graphics" }, + { NULL, NULL } +}; + static OUString getUString(const char* pString) { if (pString == NULL) @@ -230,18 +248,24 @@ static int doc_saveAsWithOptions(LibreOfficeDocument* pThis, const char* sUrl, c if (aDocumentService.isEmpty()) { - gImpl->maLastExceptionMsg = "Unknown document type"; + gImpl->maLastExceptionMsg = "unknown document type"; return false; } const ExtensionMap* pMap; - - if( aDocumentService == "com.sun.star.sheet.SpreadsheetDocument" ) - pMap = (const ExtensionMap *)aCalcExtensionMap; - else if( aDocumentService == "com.sun.star.presentation.PresentationDocument" ) - pMap = (const ExtensionMap *)aImpressExtensionMap; - else // for the sake of argument only writer documents ... - pMap = (const ExtensionMap *)aWriterExtensionMap; + if (aDocumentService == "com.sun.star.sheet.SpreadsheetDocument") + pMap = (const ExtensionMap*) aCalcExtensionMap; + else if (aDocumentService == "com.sun.star.presentation.PresentationDocument") + pMap = (const ExtensionMap*) aImpressExtensionMap; + else if (aDocumentService == "com.sun.star.drawing.DrawingDocument") + pMap = (const ExtensionMap*) aDrawExtensionMap; + else if (aDocumentService == "com.sun.star.text.TextDocument") + pMap = (const ExtensionMap*) aWriterExtensionMap; + else + { + gImpl->maLastExceptionMsg = "unknown document mapping"; + return false; + } if (pFormat == NULL) { commit 2c72660137baf08e1b4611e30750970a688cbacb Author: Tomaž Vajngerl <tomaz.vajng...@collabora.com> Date: Mon Apr 28 15:23:12 2014 +0200 sc html export: some more places to skip images Change-Id: I1d3deb96688ea29e674b7be2fda034a75d5b92a3 diff --git a/sc/source/filter/html/htmlexp.cxx b/sc/source/filter/html/htmlexp.cxx index eb93bc6..db08610 100644 --- a/sc/source/filter/html/htmlexp.cxx +++ b/sc/source/filter/html/htmlexp.cxx @@ -564,53 +564,56 @@ void ScHTMLExport::WriteBody() // default text color black rStrm.WriteChar( '<' ).WriteCharPtr( OOO_STRING_SVTOOLS_HTML_body ); - if ( bAll && GPOS_NONE != pBrushItem->GetGraphicPos() ) + if (!mbSkipImages) { - OUString aLink = pBrushItem->GetGraphicLink(); - OUString aGrfNm; - - // Embedded graphic -> write using WriteGraphic - if( aLink.isEmpty() ) + if ( bAll && GPOS_NONE != pBrushItem->GetGraphicPos() ) { - const Graphic* pGrf = pBrushItem->GetGraphic(); - if( pGrf ) + OUString aLink = pBrushItem->GetGraphicLink(); + OUString aGrfNm; + + // Embedded graphic -> write using WriteGraphic + if( aLink.isEmpty() ) { - // Save graphic as (JPG) file - aGrfNm = aStreamPath; - sal_uInt16 nErr = XOutBitmap::WriteGraphic( *pGrf, aGrfNm, - "JPG", XOUTBMP_USE_NATIVE_IF_POSSIBLE ); - if( !nErr ) // Contains errors, as we have nothing to output + const Graphic* pGrf = pBrushItem->GetGraphic(); + if( pGrf ) { - aGrfNm = URIHelper::SmartRel2Abs( - INetURLObject(aBaseURL), - aGrfNm, URIHelper::GetMaybeFileHdl(), true, false); + // Save graphic as (JPG) file + aGrfNm = aStreamPath; + sal_uInt16 nErr = XOutBitmap::WriteGraphic( *pGrf, aGrfNm, + "JPG", XOUTBMP_USE_NATIVE_IF_POSSIBLE ); + if( !nErr ) // Contains errors, as we have nothing to output + { + aGrfNm = URIHelper::SmartRel2Abs( + INetURLObject(aBaseURL), + aGrfNm, URIHelper::GetMaybeFileHdl(), true, false); + if ( HasCId() ) + MakeCIdURL( aGrfNm ); + aLink = aGrfNm; + } + } + } + else + { + aGrfNm = aLink; + if( bCopyLocalFileToINet || HasCId() ) + { + CopyLocalFileToINet( aGrfNm, aStreamPath ); if ( HasCId() ) MakeCIdURL( aGrfNm ); - aLink = aGrfNm; } + else + aGrfNm = URIHelper::SmartRel2Abs( + INetURLObject(aBaseURL), + aGrfNm, URIHelper::GetMaybeFileHdl(), true, false); + aLink = aGrfNm; } - } - else - { - aGrfNm = aLink; - if( bCopyLocalFileToINet || HasCId() ) + if( !aLink.isEmpty() ) { - CopyLocalFileToINet( aGrfNm, aStreamPath ); - if ( HasCId() ) - MakeCIdURL( aGrfNm ); + rStrm.WriteChar( ' ' ).WriteCharPtr( OOO_STRING_SVTOOLS_HTML_O_background ).WriteCharPtr( "=\"" ); + OUT_STR( URIHelper::simpleNormalizedMakeRelative( + aBaseURL, + aLink ) ).WriteChar( '\"' ); } - else - aGrfNm = URIHelper::SmartRel2Abs( - INetURLObject(aBaseURL), - aGrfNm, URIHelper::GetMaybeFileHdl(), true, false); - aLink = aGrfNm; - } - if( !aLink.isEmpty() ) - { - rStrm.WriteChar( ' ' ).WriteCharPtr( OOO_STRING_SVTOOLS_HTML_O_background ).WriteCharPtr( "=\"" ); - OUT_STR( URIHelper::simpleNormalizedMakeRelative( - aBaseURL, - aLink ) ).WriteChar( '\"' ); } } if ( !aHTMLStyle.aBackgroundColor.GetTransparency() ) @@ -805,7 +808,7 @@ void ScHTMLExport::WriteTables() IncIndent(-1); TAG_OFF_LF( OOO_STRING_SVTOOLS_HTML_table ); - if ( bTabHasGraphics && mbSkipImages ) + if ( bTabHasGraphics && !mbSkipImages ) { // the rest that is not in a cell size_t ListSize = aGraphList.size(); @@ -844,7 +847,7 @@ void ScHTMLExport::WriteCell( SCCOL nCol, SCROW nRow, SCTAB nTab ) ScAddress aPos( nCol, nRow, nTab ); ScHTMLGraphEntry* pGraphEntry = NULL; - if ( bTabHasGraphics ) + if ( bTabHasGraphics && !mbSkipImages ) { size_t ListSize = aGraphList.size(); for ( size_t i = 0; i < ListSize; ++i ) commit a9020e461803964a206d5551884b70717eed165c Author: Tomaž Vajngerl <tomaz.vajng...@collabora.com> Date: Mon Apr 28 15:16:53 2014 +0200 fdo#74336 limit the size of the non-placeable WMF image For a non-placable WMF image the size is unknown and needs to be calculated by using a bounding box over all elements. Sometimes this results in a very big image which is not drawn correctly when using dashes and dots. This change normalizes the size to reasonable values. Change-Id: I0e5b71fb011c5a9dff1c5cb13e29d5578570ca65 diff --git a/vcl/source/filter/wmf/winwmf.cxx b/vcl/source/filter/wmf/winwmf.cxx index 47f48c3..22940dd 100644 --- a/vcl/source/filter/wmf/winwmf.cxx +++ b/vcl/source/filter/wmf/winwmf.cxx @@ -1141,6 +1141,20 @@ bool WMFReader::ReadHeader() { pWMF->Seek( nStrmPos + 18 ); // set the streampos to the start of the metaactions GetPlaceableBound( aPlaceableBound, pWMF ); + + // The image size is not known so normalize the calculated bounds so that the + // resulting image is not too big + const long aMaxWidth = 1024; + const double fMaxWidth = static_cast<double>(aMaxWidth); + if (aPlaceableBound.GetWidth() > aMaxWidth) + { + double fRatio = aPlaceableBound.GetWidth() / fMaxWidth; + aPlaceableBound = Rectangle( + aPlaceableBound.Top() / fRatio, + aPlaceableBound.Left() / fRatio, + aPlaceableBound.Bottom() / fRatio, + aPlaceableBound.Right() / fRatio); + } } pWMF->Seek( nStrmPos ); commit 2ac96e52b05e9b9072788b80688a13436359b439 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.com> Date: Mon Apr 28 15:10:08 2014 +0200 Revert "fdo#74336 need to transform dash length / dot length / distance" This reverts commit 17ca93a6e592d3109e47c756fcfe8ac975acae5f. diff --git a/vcl/source/filter/wmf/winmtf.cxx b/vcl/source/filter/wmf/winmtf.cxx index 7c4b01d..7aa7337 100644 --- a/vcl/source/filter/wmf/winmtf.cxx +++ b/vcl/source/filter/wmf/winmtf.cxx @@ -473,20 +473,6 @@ void WinMtfOutput::ImplMap( Font& rFont ) rFont.SetOrientation( 3600 - rFont.GetOrientation() ); } -sal_Int32 WinMtfOutput::ImplConvertWidth(const sal_Int32 aWidth) -{ - Size aSize(aWidth, 0); - return ImplMap(aSize).Width(); -} - -void WinMtfOutput::ImplMap(LineInfo& rLineInfo) -{ - rLineInfo.SetWidth(ImplConvertWidth(rLineInfo.GetWidth())); - rLineInfo.SetDashLen(ImplConvertWidth(rLineInfo.GetDashLen())); - rLineInfo.SetDotLen(ImplConvertWidth(rLineInfo.GetDotLen())); - rLineInfo.SetDistance(ImplConvertWidth(rLineInfo.GetDistance())); -} - Polygon& WinMtfOutput::ImplMap( Polygon& rPolygon ) { sal_uInt16 nPoints = rPolygon.GetSize(); @@ -696,7 +682,9 @@ void WinMtfOutput::CreateObject( GDIObjectType eType, void* pStyle ) else if ( eType == GDI_PEN ) { WinMtfLineStyle* pLineStyle = (WinMtfLineStyle*) pStyle; - ImplMap(pLineStyle->aLineInfo); + Size aSize(pLineStyle->aLineInfo.GetWidth(), 0); + aSize = ImplMap(aSize); + pLineStyle->aLineInfo.SetWidth(aSize.Width()); } } sal_uInt32 nIndex; @@ -728,7 +716,9 @@ void WinMtfOutput::CreateObject( sal_Int32 nIndex, GDIObjectType eType, void* pS else if ( eType == GDI_PEN ) { WinMtfLineStyle* pLineStyle = (WinMtfLineStyle*) pStyle; - ImplMap(pLineStyle->aLineInfo); + Size aSize(pLineStyle->aLineInfo.GetWidth(), 0); + aSize = ImplMap(aSize); + pLineStyle->aLineInfo.SetWidth(aSize.Width()); } } if ( (sal_uInt32)nIndex >= vGDIObj.size() ) diff --git a/vcl/source/filter/wmf/winmtf.hxx b/vcl/source/filter/wmf/winmtf.hxx index dfda459..bfa7a90 100644 --- a/vcl/source/filter/wmf/winmtf.hxx +++ b/vcl/source/filter/wmf/winmtf.hxx @@ -619,8 +619,6 @@ class WinMtfOutput Size ImplMap( const Size& rSz ); Rectangle ImplMap( const Rectangle& rRectangle ); void ImplMap( Font& rFont ); - sal_Int32 ImplConvertWidth(const sal_Int32 aWidth); - void ImplMap(LineInfo& rLineInfo); Polygon& ImplMap( Polygon& rPolygon ); PolyPolygon& ImplMap( PolyPolygon& rPolyPolygon ); Polygon& ImplScale( Polygon& rPolygon );
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits