From 5dd1b3da57862a6577717544dde56482add89170 Mon Sep 17 00:00:00 2001 From: Ciorba Edmond Date: Wed, 3 Jul 2013 16:14:45 +0300 Subject: fdo#63211 - embed images in HTML export. Change-Id: I585c85d2cee13ee8954623bd981cb372d78b7952 --- include/svtools/htmlout.hxx | 2 +- include/svx/xoutbmp.hxx | 1 + svtools/source/svhtml/htmlout.cxx | 8 +- svx/source/xoutdev/_xoutbmp.cxx | 43 ++++++++++ sw/source/filter/html/css1atr.cxx | 107 +++++++----------------- sw/source/filter/html/htmlatr.cxx | 5 +- sw/source/filter/html/htmlfly.cxx | 161 +++++++++---------------------------- sw/source/filter/html/htmlnum.cxx | 5 +- sw/source/filter/html/htmlplug.cxx | 23 +----- sw/source/filter/html/htmltabw.cxx | 9 +-- sw/source/filter/html/wrthtml.cxx | 60 +++----------- sw/source/filter/html/wrthtml.hxx | 12 ++- 12 files changed, 149 insertions(+), 287 deletions(-) diff --git a/include/svtools/htmlout.hxx b/include/svtools/htmlout.hxx index 33c76fed1876..90c32088ac93 100644 --- a/include/svtools/htmlout.hxx +++ b/include/svtools/htmlout.hxx @@ -68,7 +68,7 @@ struct HTMLOutFuncs SVT_DLLPUBLIC static SvStream& Out_Char( SvStream&, sal_Unicode cChar, HTMLOutContext& rContext, String *pNonConvertableChars = 0 ); - SVT_DLLPUBLIC static SvStream& Out_String( SvStream&, const String&, + SVT_DLLPUBLIC static SvStream& Out_String( SvStream&, const OUString&, rtl_TextEncoding eDestEnc = RTL_TEXTENCODING_MS_1252, String *pNonConvertableChars = 0 ); SVT_DLLPUBLIC static SvStream& Out_Hex( SvStream&, sal_uLong nHex, sal_uInt8 nLen, diff --git a/include/svx/xoutbmp.hxx b/include/svx/xoutbmp.hxx index 0c614b93c356..3bb51cff44ca 100644 --- a/include/svx/xoutbmp.hxx +++ b/include/svx/xoutbmp.hxx @@ -54,6 +54,7 @@ public: static sal_uInt16 WriteGraphic( const Graphic& rGraphic, String& rFileName, const String& rFilterName, const sal_uIntPtr nFlags = 0L, const Size* pMtfSize_100TH_MM = NULL ); + static sal_uLong GraphicToBase64(const Graphic& rGraphic,OUString& rOUString); static sal_uInt16 ExportGraphic( const Graphic& rGraphic, const INetURLObject& rURL, GraphicFilter& rFilter, const sal_uInt16 nFormat, diff --git a/svtools/source/svhtml/htmlout.cxx b/svtools/source/svhtml/htmlout.cxx index a23638f122da..f384c4be5ad6 100644 --- a/svtools/source/svhtml/htmlout.cxx +++ b/svtools/source/svhtml/htmlout.cxx @@ -532,14 +532,14 @@ SvStream& HTMLOutFuncs::Out_Char( SvStream& rStream, sal_Unicode c, return rStream; } -SvStream& HTMLOutFuncs::Out_String( SvStream& rStream, const String& rStr, +SvStream& HTMLOutFuncs::Out_String( SvStream& rStream, const OUString& rOUStr, rtl_TextEncoding eDestEnc, String *pNonConvertableChars ) { HTMLOutContext aContext( eDestEnc ); - xub_StrLen nLen = rStr.Len(); - for( xub_StrLen n = 0; n < nLen; n++ ) - HTMLOutFuncs::Out_Char( rStream, rStr.GetChar( (xub_StrLen)n ), + sal_Int32 nLen = rOUStr.getLength(); + for( sal_Int32 n = 0; n < nLen; n++ ) + HTMLOutFuncs::Out_Char( rStream, rOUStr[n], aContext, pNonConvertableChars ); HTMLOutFuncs::FlushToAscii( rStream, aContext ); return rStream; diff --git a/svx/source/xoutdev/_xoutbmp.cxx b/svx/source/xoutdev/_xoutbmp.cxx index 535d6b3299dc..40f9f7f1bdd0 100644 --- a/svx/source/xoutdev/_xoutbmp.cxx +++ b/svx/source/xoutdev/_xoutbmp.cxx @@ -29,6 +29,9 @@ #include #include #include +#include +#include +#include #define FORMAT_BMP OUString("bmp") #define FORMAT_GIF OUString("gif") @@ -314,6 +317,46 @@ sal_uInt16 XOutBitmap::WriteGraphic( const Graphic& rGraphic, String& rFileName, } } +sal_uLong XOutBitmap::GraphicToBase64(const Graphic& rGraphic, OUString& rOUString) +{ + SvMemoryStream aOStm; + OUString aMimeType; + GfxLink aLink = rGraphic.GetLink(); + sal_uLong aCvtType; + switch( aLink.GetType() ) + { + case( GFX_LINK_TYPE_NATIVE_JPG ): + aCvtType = CVT_JPG; + aMimeType = "image/jpeg"; + break; + case( GFX_LINK_TYPE_NATIVE_PNG ): + aCvtType = CVT_PNG; + aMimeType = "image/png"; + break; + case( GFX_LINK_TYPE_NATIVE_SVG ): + aCvtType = CVT_SVG; + aMimeType = "image/svg+xml"; + break; + default: + // save everything else (including gif) into png + aCvtType = CVT_PNG; + aMimeType = "image/png"; + break; + } + sal_uLong nErr = GraphicConverter::Export(aOStm,rGraphic,aCvtType); + if ( nErr ) + { + SAL_WARN("svx", "XOutBitmap::GraphicToBase64() invalid Graphic? error: " << nErr ); + return nErr; + } + aOStm.Seek(STREAM_SEEK_TO_END); + css::uno::Sequence aOStmSeq( (sal_Int8*) aOStm.GetData(),aOStm.Tell() ); + OUStringBuffer aStrBuffer; + ::sax::Converter::encodeBase64(aStrBuffer,aOStmSeq); + rOUString = aMimeType + ";base64," + aStrBuffer.makeStringAndClear(); + return 0; +} + sal_uInt16 XOutBitmap::ExportGraphic( const Graphic& rGraphic, const INetURLObject& rURL, GraphicFilter& rFilter, const sal_uInt16 nFormat, const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >* pFilterData ) diff --git a/sw/source/filter/html/css1atr.cxx b/sw/source/filter/html/css1atr.cxx index db343f0c26f3..effb4a80112b 100644 --- a/sw/source/filter/html/css1atr.cxx +++ b/sw/source/filter/html/css1atr.cxx @@ -147,7 +147,7 @@ static Writer& OutCSS1_SvxULSpace_SvxLRSpace( Writer& rWrt, const SfxItemSet& rItemSet, sal_Bool bDeep ); static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt, - sal_uInt16 nMode, const String *pGrfName ); + sal_uInt16 nMode ); static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt ); static Writer& OutCSS1_SwFmtFrmSize( Writer& rWrt, const SfxPoolItem& rHt, sal_uInt16 nMode ); @@ -1909,8 +1909,7 @@ static Writer& OutCSS1_SwFtnInfo( Writer& rWrt, const SwEndNoteInfo& rInfo, return rWrt; } -Writer& OutCSS1_BodyTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet, - String aEmbBGGrfName ) +Writer& OutCSS1_BodyTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet ) { SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt; @@ -1926,8 +1925,7 @@ Writer& OutCSS1_BodyTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet, if( SFX_ITEM_SET == rItemSet.GetItemState( RES_BACKGROUND, sal_False, &pItem ) ) { - OutCSS1_SvxBrush( rWrt, *pItem, CSS1_BACKGROUND_PAGE, - &aEmbBGGrfName ); + OutCSS1_SvxBrush( rWrt, *pItem, CSS1_BACKGROUND_PAGE ); } if( SFX_ITEM_SET == rItemSet.GetItemState( RES_BOX, sal_False, @@ -1996,7 +1994,7 @@ Writer& OutCSS1_TableBGStyleOpt( Writer& rWrt, const SfxPoolItem& rHt ) SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_STYLE_OPT_ON | CSS1_OUTMODE_ENCODE| CSS1_OUTMODE_TABLEBOX ); - OutCSS1_SvxBrush( rWrt, rHt, CSS1_BACKGROUND_TABLE, 0 ); + OutCSS1_SvxBrush( rWrt, rHt, CSS1_BACKGROUND_TABLE ); if( !rHTMLWrt.bFirstCSS1Property ) rWrt.Strm() << '\"'; @@ -2248,7 +2246,7 @@ void SwHTMLWriter::OutCSS1_TableFrmFmtOptions( const SwFrmFmt& rFrmFmt ) const SfxPoolItem *pItem; const SfxItemSet& rItemSet = rFrmFmt.GetAttrSet(); if( SFX_ITEM_SET==rItemSet.GetItemState( RES_BACKGROUND, sal_False, &pItem ) ) - OutCSS1_SvxBrush( *this, *pItem, CSS1_BACKGROUND_TABLE, 0 ); + OutCSS1_SvxBrush( *this, *pItem, CSS1_BACKGROUND_TABLE ); if( IsHTMLMode( HTMLMODE_PRINT_EXT ) ) OutCSS1_SvxFmtBreak_SwFmtPDesc_SvxFmtKeep( *this, rItemSet, sal_False ); @@ -2281,7 +2279,7 @@ void SwHTMLWriter::OutCSS1_SectionFmtOptions( const SwFrmFmt& rFrmFmt, const SwF const SfxPoolItem *pItem; const SfxItemSet& rItemSet = rFrmFmt.GetAttrSet(); if( SFX_ITEM_SET==rItemSet.GetItemState( RES_BACKGROUND, sal_False, &pItem ) ) - OutCSS1_SvxBrush( *this, *pItem, CSS1_BACKGROUND_SECTION, 0 ); + OutCSS1_SvxBrush( *this, *pItem, CSS1_BACKGROUND_SECTION ); if (pCol) { @@ -2303,7 +2301,7 @@ static bool OutCSS1_FrmFmtBrush( SwHTMLWriter& rWrt, 0 != rBrushItem.GetGraphicLink() || 0 != rBrushItem.GetGraphicPos() ) { - OutCSS1_SvxBrush( rWrt, rBrushItem, CSS1_BACKGROUND_FLY, 0 ); + OutCSS1_SvxBrush( rWrt, rBrushItem, CSS1_BACKGROUND_FLY ); bWritten = true; } return bWritten; @@ -3304,13 +3302,12 @@ static Writer& OutCSS1_SvxFmtBreak_SwFmtPDesc_SvxFmtKeep( Writer& rWrt, // Wrapper fuer OutCSS1_SfxItemSet etc. static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt ) { - OutCSS1_SvxBrush( rWrt, rHt, CSS1_BACKGROUND_ATTR, 0 ); + OutCSS1_SvxBrush( rWrt, rHt, CSS1_BACKGROUND_ATTR ); return rWrt; } - static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt, - sal_uInt16 nMode, const String *pGrfName ) + sal_uInt16 nMode) { SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt; @@ -3323,19 +3320,8 @@ static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt, // Erstmal ein par Werte holen // const Brush &rBrush = ((const SvxBrushItem &)rHt).GetBrush(); const Color & rColor = ((const SvxBrushItem &)rHt).GetColor(); - const String *pLink = pGrfName ? pGrfName - : ((const SvxBrushItem &)rHt).GetGraphicLink(); SvxGraphicPosition ePos = ((const SvxBrushItem &)rHt).GetGraphicPos(); - if( CSS1_BACKGROUND_PAGE==nMode ) - { - // Fuer Seitenvorlagen wurde der Grafik-Name uebergeben. Es wird - // nur ein Attribut ausgegeben, wenn die Grafik nicht gekachelt ist. - OSL_ENSURE( pLink, "Wo ist der Grafik-Name der Seitenvorlage?" ); - if( !pLink || !pLink->Len() || GPOS_TILED==ePos ) - return rWrt; - } - // Erstmal die Farbe holen bool bColor = false; /// set to sal_True, if color is "no fill"/"auto fill" @@ -3348,49 +3334,27 @@ static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt, } // und jetzt eine Grafik - String sGrfNm; + OUString aGraphicInBase64; - if( !pLink ) + // embeddete Grafik -> WriteEmbedded schreiben + const Graphic* pGrf = ((const SvxBrushItem &)rHt).GetGraphic(); + if( pGrf ) { - // embeddete Grafik -> WriteEmbedded schreiben - const Graphic* pGrf = ((const SvxBrushItem &)rHt).GetGraphic(); - if( pGrf ) + sal_uLong nErr = XOutBitmap::GraphicToBase64(*pGrf, aGraphicInBase64); + if( nErr ) { - // Grafik als (JPG-)File speichern - const String* pTempFileName = rHTMLWrt.GetOrigFileName(); - if( pTempFileName ) - sGrfNm = *pTempFileName; - sal_uInt16 nErr = XOutBitmap::WriteGraphic( *pGrf, sGrfNm, - OUString("JPG"), - XOUTBMP_USE_NATIVE_IF_POSSIBLE ); - if( !nErr ) // fehlerhaft, da ist nichts auszugeben - { - sGrfNm = URIHelper::SmartRel2Abs( - INetURLObject(rWrt.GetBaseURL()), sGrfNm, - URIHelper::GetMaybeFileHdl() ); - pLink = &sGrfNm; - } - else - { - rHTMLWrt.nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE; - } + rHTMLWrt.nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE; } } - else if( !pGrfName && rHTMLWrt.bCfgCpyLinkedGrfs ) - { - sGrfNm = *pLink; - rWrt.CopyLocalFileToINet( sGrfNm ); - pLink = &sGrfNm; - } // In Tabellen wird nur dann etwas exportiert, wenn eine Grafik // existiert. - if( CSS1_BACKGROUND_TABLE==nMode && !pLink ) + if( CSS1_BACKGROUND_TABLE==nMode && !pGrf ) return rWrt; // ggf. noch die Ausrichtung der Grafik const sal_Char *pRepeat = 0, *pHori = 0, *pVert = 0; - if( pLink ) + if( pGrf ) { if( GPOS_TILED==ePos ) { @@ -3452,57 +3416,48 @@ static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt, } // jetzt den String zusammen bauen - String sOut; - if( !pLink && !bColor ) + OUString sOut; + if( !pGrf && !bColor ) { // keine Farbe und kein Link, aber ein transparenter Brush if( bTransparent && CSS1_BACKGROUND_FLY != nMode ) - sOut.AssignAscii( sCSS1_PV_transparent ); + sOut += OStringToOUString(sCSS1_PV_transparent, RTL_TEXTENCODING_ASCII_US); } else { if( bColor ) { OString sTmp(GetCSS1Color(aColor)); - sOut += String(OStringToOUString(sTmp, - RTL_TEXTENCODING_ASCII_US)); + sOut += OStringToOUString(sTmp, RTL_TEXTENCODING_ASCII_US); } - if( pLink ) + if( pGrf ) { if( bColor ) - sOut += ' '; - - sOut.AppendAscii( sCSS1_url ); - sOut.Append( '(' ); - sOut.Append( String(URIHelper::simpleNormalizedMakeRelative(rWrt.GetBaseURL(), - *pLink))); + sOut += " "; - sOut.Append( ')' ); + sOut += OStringToOUString(sCSS1_url, RTL_TEXTENCODING_ASCII_US) + + "(\'" + OOO_STRING_SVTOOLS_HTML_O_data + ":" + aGraphicInBase64 + "\')"; if( pRepeat ) { - sOut.Append( ' ' ); - sOut.AppendAscii( pRepeat ); + sOut += " " + OStringToOUString(pRepeat, RTL_TEXTENCODING_ASCII_US); } if( pHori ) { - sOut.Append( ' ' ); - sOut.AppendAscii( pHori ); + sOut += " " + OStringToOUString(pHori, RTL_TEXTENCODING_ASCII_US); } if( pVert ) { - sOut.Append( ' ' ); - sOut.AppendAscii( pVert ); + sOut += " " + OStringToOUString(pVert, RTL_TEXTENCODING_ASCII_US); } - sOut.Append( ' ' ); - sOut.AppendAscii( sCSS1_PV_scroll ); + sOut += " " + OStringToOUString(sCSS1_PV_scroll, RTL_TEXTENCODING_ASCII_US) + " "; } } - if( sOut.Len() ) + if( !sOut.isEmpty() ) rHTMLWrt.OutCSS1_Property( sCSS1_P_background, sOut ); return rWrt; diff --git a/sw/source/filter/html/htmlatr.cxx b/sw/source/filter/html/htmlatr.cxx index 2ce7beb49046..57f9be726dfd 100644 --- a/sw/source/filter/html/htmlatr.cxx +++ b/sw/source/filter/html/htmlatr.cxx @@ -977,8 +977,7 @@ void OutHTML_SwFmt( Writer& rWrt, const SwFmt& rFmt, OSL_ENSURE( aNumInfo.GetNumRule(), "Wo ist die Numerierung geblieben???" ); OSL_ENSURE( nBulletGrfLvl < MAXLEVEL, "So viele Ebenen gibt's nicht" ); const SwNumFmt& rNumFmt = aNumInfo.GetNumRule()->Get(nBulletGrfLvl); - - OutHTML_BulletImage( rWrt, OOO_STRING_SVTOOLS_HTML_image, 0, + OutHTML_BulletImage( rWrt, OOO_STRING_SVTOOLS_HTML_image, rNumFmt.GetBrush(), rHWrt.aBulletGrfs[nBulletGrfLvl], rNumFmt.GetGraphicSize(), rNumFmt.GetGraphicOrientation() ); } @@ -2592,7 +2591,7 @@ Writer& OutHTML_SwTxtNode( Writer& rWrt, const SwCntntNode& rNode ) else pStr = OOO_STRING_SVTOOLS_HTML_AL_right; - OStringBuffer sOut(RTL_CONSTASCII_STRINGPARAM(OOO_STRING_SVTOOLS_HTML_linebreak)); + OStringBuffer sOut(OOO_STRING_SVTOOLS_HTML_linebreak); sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_clear).append('=').append(pStr); HTMLOutFuncs::Out_AsciiTag( rHTMLWrt.Strm(), sOut.getStr() ); diff --git a/sw/source/filter/html/htmlfly.cxx b/sw/source/filter/html/htmlfly.cxx index f17643b4e988..0bac1d75d41e 100644 --- a/sw/source/filter/html/htmlfly.cxx +++ b/sw/source/filter/html/htmlfly.cxx @@ -39,7 +39,6 @@ #include #include - #include #include #include @@ -54,6 +53,8 @@ #include #include #include +#include +#include #include "doc.hxx" #include "ndtxt.hxx" @@ -65,7 +66,6 @@ #include "htmlfly.hxx" using namespace ::com::sun::star; - //////////////////////////////////////////////////////////// const sal_uLong HTML_FRMOPTS_IMG_ALL = @@ -144,6 +144,7 @@ static Writer& OutHTML_FrmFmtGrfNode( Writer& rWrt, const SwFrmFmt& rFmt, static Writer& OutHTML_FrmFmtAsMarquee( Writer& rWrt, const SwFrmFmt& rFrmFmt, const SdrObject& rSdrObj ); + //----------------------------------------------------------------------- extern HTMLOutEvent aAnchorEventTable[]; @@ -544,7 +545,7 @@ OString SwHTMLWriter::OutFrmFmtOptions( const SwFrmFmt &rFrmFmt, const sal_Char *pStr = (nFrmOpts & HTML_FRMOPT_ID) ? OOO_STRING_SVTOOLS_HTML_O_id : OOO_STRING_SVTOOLS_HTML_O_name; sOut.append(' ').append(pStr). - append(RTL_CONSTASCII_STRINGPARAM("=\"")); + append("=\""); Strm() << sOut.makeStringAndClear().getStr(); HTMLOutFuncs::Out_String( Strm(), rFrmFmt.GetName(), eDestEnc, &aNonConvertableCharacters ); sOut.append('\"'); @@ -563,7 +564,7 @@ OString SwHTMLWriter::OutFrmFmtOptions( const SwFrmFmt &rFrmFmt, if( (nFrmOpts & HTML_FRMOPT_ALT) && rAlternateTxt.Len() ) { sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_alt). - append(RTL_CONSTASCII_STRINGPARAM("=\"")); + append("=\""); Strm() << sOut.makeStringAndClear().getStr(); HTMLOutFuncs::Out_String( Strm(), rAlternateTxt, eDestEnc, &aNonConvertableCharacters ); sOut.append('\"'); @@ -813,9 +814,8 @@ OString SwHTMLWriter::OutFrmFmtOptions( const SwFrmFmt &rFrmFmt, return sRetEndTags; } - Writer& OutHTML_Image( Writer& rWrt, const SwFrmFmt &rFrmFmt, - const String &rGrfName, const String& rAlternateTxt, + Graphic& rGraphic, const String& rAlternateTxt, const Size &rRealSize, sal_uInt32 nFrmOpts, const sal_Char *pMarkType, const ImageMap *pAltImgMap ) @@ -829,10 +829,6 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrmFmt &rFrmFmt, OutHTML_INetFmt( rWrt, *pINetFmt, sal_False ); } - String aGrfNm( rGrfName ); - if( !HTMLOutFuncs::PrivateURLToInternalImg(aGrfNm) ) - aGrfNm = URIHelper::simpleNormalizedMakeRelative( rWrt.GetBaseURL(), aGrfNm); - const SfxPoolItem* pItem; const SfxItemSet& rItemSet = rFrmFmt.GetAttrSet(); @@ -1022,7 +1018,7 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrmFmt &rFrmFmt, if( aName.Len() ) { sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_name). - append(RTL_CONSTASCII_STRINGPARAM("=\"")); + append("=\""); rWrt.Strm() << sOut.makeStringAndClear().getStr(); HTMLOutFuncs::Out_String( rWrt.Strm(), aName, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters ); @@ -1032,7 +1028,7 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrmFmt &rFrmFmt, if( aTarget.Len() ) { sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_target). - append(RTL_CONSTASCII_STRINGPARAM("=\"")); + append("=\""); rWrt.Strm() << sOut.makeStringAndClear().getStr(); HTMLOutFuncs::Out_String( rWrt.Strm(), aTarget, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters ); @@ -1056,7 +1052,7 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrmFmt &rFrmFmt, rWrt.Strm() << ">"; aEndTags = OStringBuffer().append("")).append(aEndTags). + append(">").append(aEndTags). makeStringAndClear(); } } @@ -1129,7 +1125,7 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrmFmt &rFrmFmt, pColBorderLine->GetColor(), rHTMLWrt.eDestEnc ) << '>'; aEndTags = OStringBuffer(). - append(RTL_CONSTASCII_STRINGPARAM("').append(aEndTags).makeStringAndClear(); } @@ -1138,9 +1134,16 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrmFmt &rFrmFmt, sOut.append('<'); sOut.append(OOO_STRING_SVTOOLS_HTML_image).append(' '). append(OOO_STRING_SVTOOLS_HTML_O_src). - append(RTL_CONSTASCII_STRINGPARAM("=\"")); + append("=\"").append(OOO_STRING_SVTOOLS_HTML_O_data).append(":"); rWrt.Strm() << sOut.makeStringAndClear().getStr(); - HTMLOutFuncs::Out_String( rWrt.Strm(), aGrfNm, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters ) << '\"'; + + OUString aGraphicInBase64; + sal_uLong nErr = XOutBitmap::GraphicToBase64(rGraphic, aGraphicInBase64); + if( nErr ) + { + rHTMLWrt.nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE; + } + HTMLOutFuncs::Out_String( rWrt.Strm(), aGraphicInBase64, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters ) << '\"'; // Events if( SFX_ITEM_SET == rItemSet.GetItemState( RES_FRMMACRO, sal_True, &pItem )) @@ -1174,7 +1177,7 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrmFmt &rFrmFmt, if( aIMapName.Len() ) { sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_usemap). - append(RTL_CONSTASCII_STRINGPARAM("=\"#")); + append("=\"#"); rWrt.Strm() << sOut.makeStringAndClear().getStr(); HTMLOutFuncs::Out_String( rWrt.Strm(), aIMapName, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters ) << '\"'; } @@ -1204,51 +1207,31 @@ Writer& OutHTML_BulletImage( Writer& rWrt, { SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt; - // Wenn es ein BrushItem gibt, muss die Grafiknoch exportiert werden + //Wenn es ein BrushItem gibt, muss die Grafiknoch exportiert werden const String *pLink = 0; + OUString aGraphicInBase64; if( pBrush ) { pLink = pBrush->GetGraphicLink(); - // embeddete Grafik -> WriteEmbedded schreiben + //embeddete Grafik -> WriteEmbedded schreiben if( !pLink ) { const Graphic* pGrf = pBrush->GetGraphic(); if( pGrf ) { + const Graphic* aGraphic = pBrush->GetGraphic(); + sal_uLong nErr = XOutBitmap::GraphicToBase64(*aGraphic, aGraphicInBase64); + if( nErr ) + { + rHTMLWrt.nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE; + } // Grafik als (JPG-)File speichern if( rHTMLWrt.GetOrigFileName() ) rGrfName = *rHTMLWrt.GetOrigFileName(); - sal_uInt16 nErr = XOutBitmap::WriteGraphic( *pGrf, rGrfName, - OUString("JPG"), - (XOUTBMP_USE_GIF_IF_SENSIBLE | - XOUTBMP_USE_NATIVE_IF_POSSIBLE)); - if( !nErr ) - { - rGrfName = URIHelper::SmartRel2Abs( - INetURLObject( rWrt.GetBaseURL() ), rGrfName, - URIHelper::GetMaybeFileHdl() ); pLink = &rGrfName; - } - else - { - rHTMLWrt.nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE; - } } } - else - { - rGrfName = *pLink; - if( rHTMLWrt.bCfgCpyLinkedGrfs ) - { - rHTMLWrt.CopyLocalFileToINet( rGrfName ); - pLink = &rGrfName; - } - } - } - else - { - pLink = &rGrfName; } OStringBuffer sOut; @@ -1258,13 +1241,10 @@ Writer& OutHTML_BulletImage( Writer& rWrt, if( pLink ) { sOut.append(' '); - String s( *pLink ); - if( !HTMLOutFuncs::PrivateURLToInternalImg(s) ) - s = URIHelper::simpleNormalizedMakeRelative( rWrt.GetBaseURL(), s); - sOut.append(OOO_STRING_SVTOOLS_HTML_O_src). - append(RTL_CONSTASCII_STRINGPARAM("=\"")); + sOut.append(OOO_STRING_SVTOOLS_HTML_O_src).append("=\""). + append(OOO_STRING_SVTOOLS_HTML_O_data).append(":"); rWrt.Strm() << sOut.makeStringAndClear().getStr(); - HTMLOutFuncs::Out_String( rWrt.Strm(), s, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters ); + HTMLOutFuncs::Out_String( rWrt.Strm(), aGraphicInBase64, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters ); sOut.append('\"'); // Groesse des Objekts Twips ohne Raender @@ -1547,32 +1527,13 @@ static Writer& OutHTML_FrmFmtAsDivOrSpan( Writer& rWrt, static Writer & OutHTML_FrmFmtAsImage( Writer& rWrt, const SwFrmFmt& rFrmFmt, sal_Bool /*bInCntnr*/ ) { - SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt; - ImageMap aIMap; - Graphic aGrf( ((SwFrmFmt &)rFrmFmt).MakeGraphic( &aIMap ) ); - - String aGrfNm; - if( rHTMLWrt.GetOrigFileName() ) - aGrfNm = *rHTMLWrt.GetOrigFileName(); - if( aGrf.GetType() == GRAPHIC_NONE || - XOutBitmap::WriteGraphic( aGrf, aGrfNm, - OUString("JPG"), - (XOUTBMP_USE_GIF_IF_POSSIBLE| - XOUTBMP_USE_NATIVE_IF_POSSIBLE) ) != 0 ) - { - // leer oder fehlerhaft, da ist nichts auszugeben - rHTMLWrt.nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE; - return rWrt; - } - - aGrfNm = URIHelper::SmartRel2Abs( - INetURLObject(rWrt.GetBaseURL()), aGrfNm, - URIHelper::GetMaybeFileHdl() ); + Graphic aGraphic( ((SwFrmFmt &)rFrmFmt).MakeGraphic( &aIMap ) ); Size aSz( 0, 0 ); - OutHTML_Image( rWrt, rFrmFmt, aGrfNm, rFrmFmt.GetName(), aSz, + OutHTML_Image( rWrt, rFrmFmt, aGraphic, rFrmFmt.GetName(), aSz, HTML_FRMOPTS_GENIMG, pMarkToFrame, aIMap.GetIMapObjectCount() ? &aIMap : 0 ); + return rWrt; } @@ -1589,55 +1550,13 @@ static Writer& OutHTML_FrmFmtGrfNode( Writer& rWrt, const SwFrmFmt& rFrmFmt, if( !pGrfNd ) return rWrt; - const SwMirrorGrf& rMirror = pGrfNd->GetSwAttrSet().GetMirrorGrf(); - - String aGrfNm; - if( !pGrfNd->IsLinkedFile() || RES_MIRROR_GRAPH_DONT != rMirror.GetValue() ) - { - // Grafik als File-Referenz speichern (als JPEG-Grafik speichern) - if( rHTMLWrt.GetOrigFileName() ) - aGrfNm = *rHTMLWrt.GetOrigFileName(); - pGrfNd->SwapIn( sal_True ); - - sal_uLong nFlags = XOUTBMP_USE_GIF_IF_SENSIBLE | - XOUTBMP_USE_NATIVE_IF_POSSIBLE; - switch( rMirror.GetValue() ) - { - case RES_MIRROR_GRAPH_VERT: nFlags = XOUTBMP_MIRROR_HORZ; break; - case RES_MIRROR_GRAPH_HOR: nFlags = XOUTBMP_MIRROR_VERT; break; - case RES_MIRROR_GRAPH_BOTH: - nFlags = XOUTBMP_MIRROR_VERT | XOUTBMP_MIRROR_HORZ; - break; - } - - Size aMM100Size; - const SwFmtFrmSize& rSize = rFrmFmt.GetFrmSize(); - aMM100Size = OutputDevice::LogicToLogic( rSize.GetSize(), - MapMode( MAP_TWIP ), MapMode( MAP_100TH_MM )); - - sal_uInt16 nErr = XOutBitmap::WriteGraphic( pGrfNd->GetGrf(), aGrfNm, - OUString("JPG"), nFlags, &aMM100Size ); - if( nErr ) // fehlerhaft, da ist nichts auszugeben - { - rHTMLWrt.nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE; - return rWrt; - } - aGrfNm = URIHelper::SmartRel2Abs( - INetURLObject(rWrt.GetBaseURL()), aGrfNm, - URIHelper::GetMaybeFileHdl() ); - } - else - { - pGrfNd->GetFileFilterNms( &aGrfNm, 0 ); - if( rHTMLWrt.bCfgCpyLinkedGrfs ) - rWrt.CopyLocalFileToINet( aGrfNm ); - } - sal_uLong nFrmFlags = bInCntnr ? HTML_FRMOPTS_IMG_CNTNR : HTML_FRMOPTS_IMG; if( rHTMLWrt.IsHTMLMode( HTMLMODE_ABS_POS_FLY ) && !bInCntnr ) - nFrmFlags |= HTML_FRMOPTS_IMG_CSS1; - OutHTML_Image( rWrt, rFrmFmt, aGrfNm, pGrfNd->GetTitle(), - pGrfNd->GetTwipSize(), nFrmFlags, pMarkToGraphic ); + nFrmFlags |= HTML_FRMOPTS_IMG_CSS1; + + Graphic aGraphic = pGrfNd->GetGraphic(); + OutHTML_Image( rWrt, rFrmFmt, aGraphic, pGrfNd->GetTitle(), + pGrfNd->GetTwipSize(), nFrmFlags, pMarkToGraphic ); return rWrt; } diff --git a/sw/source/filter/html/htmlnum.cxx b/sw/source/filter/html/htmlnum.cxx index 9d1620a7e3b3..be594f2cb6e7 100644 --- a/sw/source/filter/html/htmlnum.cxx +++ b/sw/source/filter/html/htmlnum.cxx @@ -821,10 +821,9 @@ Writer& OutHTML_NumBulListStart( SwHTMLWriter& rWrt, } else if( SVX_NUM_BITMAP == eType ) { - // Aufzaehlungs-Liste:
    + // Unordered list:
      sOut.append(OOO_STRING_SVTOOLS_HTML_unorderlist); rWrt.Strm() << sOut.makeStringAndClear().getStr(); - OutHTML_BulletImage( rWrt, 0, rNumFmt.GetBrush(), @@ -834,7 +833,7 @@ Writer& OutHTML_NumBulListStart( SwHTMLWriter& rWrt, } else { - // Numerierungs-Liste:
        + // Ordered list:
          sOut.append(OOO_STRING_SVTOOLS_HTML_orderlist); // den Typ ueber das Format bestimmen diff --git a/sw/source/filter/html/htmlplug.cxx b/sw/source/filter/html/htmlplug.cxx index d6f1a3a7df9f..90007cc301fd 100644 --- a/sw/source/filter/html/htmlplug.cxx +++ b/sw/source/filter/html/htmlplug.cxx @@ -56,6 +56,8 @@ #include #include +#include +#include using namespace com::sun::star; @@ -1258,27 +1260,10 @@ Writer& OutHTML_FrmFmtOLENodeGrf( Writer& rWrt, const SwFrmFmt& rFrmFmt, return rWrt; { - Graphic aGrf( *pOLENd->GetGraphic() ); - String aGrfNm; - const String* pTempFileName = rHTMLWrt.GetOrigFileName(); - if(pTempFileName) - aGrfNm = *pTempFileName; - - sal_uInt16 nErr = XOutBitmap::WriteGraphic( aGrf, aGrfNm, - OUString("JPG"), - (XOUTBMP_USE_GIF_IF_POSSIBLE | - XOUTBMP_USE_NATIVE_IF_POSSIBLE) ); - if( nErr ) // fehlerhaft, da ist nichts auszugeben - { - rHTMLWrt.nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE; - return rWrt; - } - aGrfNm = URIHelper::SmartRel2Abs( - INetURLObject(rWrt.GetBaseURL()), aGrfNm, - URIHelper::GetMaybeFileHdl() ); + Graphic aGraphic( *pOLENd->GetGraphic() ); sal_uLong nFlags = bInCntnr ? HTML_FRMOPTS_GENIMG_CNTNR : HTML_FRMOPTS_GENIMG; - OutHTML_Image( rWrt, rFrmFmt, aGrfNm, + OutHTML_Image( rWrt, rFrmFmt, aGraphic, pOLENd->GetTitle(), pOLENd->GetTwipSize(), nFlags, pMarkToOLE ); } diff --git a/sw/source/filter/html/htmltabw.cxx b/sw/source/filter/html/htmltabw.cxx index 3438ab32702a..1e940b8bd3a7 100644 --- a/sw/source/filter/html/htmltabw.cxx +++ b/sw/source/filter/html/htmltabw.cxx @@ -429,8 +429,7 @@ void SwHTMLWrtTable::OutTableCell( SwHTMLWriter& rWrt, if( pBrushItem ) { // Hintergrund ausgeben - String aDummy; - rWrt.OutBackground( pBrushItem, aDummy, sal_False ); + rWrt.OutBackground( pBrushItem, sal_False ); if( rWrt.bCfgOutStyles ) OutCSS1_TableBGStyleOpt( rWrt, *pBrushItem ); @@ -538,8 +537,7 @@ void SwHTMLWrtTable::OutTableCells( SwHTMLWriter& rWrt, rWrt.Strm() << '<' << OOO_STRING_SVTOOLS_HTML_tablerow; if( pBrushItem ) { - String aDummy; - rWrt.OutBackground( pBrushItem, aDummy, sal_False ); + rWrt.OutBackground( pBrushItem, sal_False ); rWrt.bTxtAttr = sal_False; rWrt.bOutOpts = sal_True; @@ -729,8 +727,7 @@ void SwHTMLWrtTable::Write( SwHTMLWriter& rWrt, sal_Int16 eAlign, // Hintergrund ausgeben if( pFrmFmt ) { - String aDummy; - rWrt.OutBackground( pFrmFmt->GetAttrSet(), aDummy, sal_False ); + rWrt.OutBackground( pFrmFmt->GetAttrSet(), sal_False ); if( rWrt.bCfgOutStyles && pFrmFmt ) rWrt.OutCSS1_TableFrmFmtOptions( *pFrmFmt ); diff --git a/sw/source/filter/html/wrthtml.cxx b/sw/source/filter/html/wrthtml.cxx index 58b747897507..124e79f5cf9a 100644 --- a/sw/source/filter/html/wrthtml.cxx +++ b/sw/source/filter/html/wrthtml.cxx @@ -1001,14 +1001,13 @@ const SwPageDesc *SwHTMLWriter::MakeHeader( sal_uInt16 &rHeaderAttrs ) const SfxItemSet& rItemSet = pPageDesc->GetMaster().GetAttrSet(); - String aEmbGrfName; - OutBackground( rItemSet, aEmbGrfName, sal_True ); + OutBackground( rItemSet, sal_True ); nDirection = GetHTMLDirection( rItemSet ); OutDirection( nDirection ); if( bCfgOutStyles ) - OutCSS1_BodyTagStyleOpt( *this, rItemSet, aEmbGrfName ); + OutCSS1_BodyTagStyleOpt( *this, rItemSet ); // Events anhaengen if( pDoc->GetDocShell() ) // nur mit DocShell ist Basic moeglich @@ -1114,8 +1113,7 @@ void SwHTMLWriter::OutHyperlinkHRefValue( const String& rURL ) &aNonConvertableCharacters ); } -void SwHTMLWriter::OutBackground( const SvxBrushItem *pBrushItem, - String& rEmbGrfNm, sal_Bool bGraphic ) +void SwHTMLWriter::OutBackground( const SvxBrushItem *pBrushItem, sal_Bool bGraphic ) { const Color &rBackColor = pBrushItem->GetColor(); /// check, if background color is not "no fill"/"auto fill", instead of @@ -1131,60 +1129,28 @@ void SwHTMLWriter::OutBackground( const SvxBrushItem *pBrushItem, if( !bGraphic ) return; - const String *pLink = pBrushItem->GetGraphicLink(); - - // embeddete Grafik -> WriteEmbedded schreiben - if( !pLink ) - { - const Graphic* pGrf = pBrushItem->GetGraphic(); - if( pGrf ) - { - // Grafik als (JPG-)File speichern - const String* pTempFileName = GetOrigFileName(); - if(pTempFileName) - rEmbGrfNm = *pTempFileName; - sal_uInt16 nErr = XOutBitmap::WriteGraphic( *pGrf, rEmbGrfNm, - OUString("JPG"), - XOUTBMP_USE_NATIVE_IF_POSSIBLE ); - if( !nErr ) // fehlerhaft, da ist nichts auszugeben - { - rEmbGrfNm = URIHelper::SmartRel2Abs( - INetURLObject( GetBaseURL() ), rEmbGrfNm, - URIHelper::GetMaybeFileHdl() ); - pLink = &rEmbGrfNm; - } - else - { - nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE; - } - } - } - else + OUString aGraphicInBase64; + const Graphic* pGrf = pBrushItem->GetGraphic(); + if( pGrf ) { - rEmbGrfNm = *pLink; - if( bCfgCpyLinkedGrfs ) + sal_uLong nErr = XOutBitmap::GraphicToBase64(*pGrf, aGraphicInBase64); + if( nErr ) { - CopyLocalFileToINet( rEmbGrfNm ); - pLink = &rEmbGrfNm; + nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE; } - } - - if( pLink ) - { - String s( URIHelper::simpleNormalizedMakeRelative( GetBaseURL(), *pLink)); Strm() << " " OOO_STRING_SVTOOLS_HTML_O_background "=\""; - HTMLOutFuncs::Out_String( Strm(), s, eDestEnc, &aNonConvertableCharacters ) << '\"'; + Strm() << OOO_STRING_SVTOOLS_HTML_O_data ":"; + HTMLOutFuncs::Out_String( Strm(), aGraphicInBase64, eDestEnc, &aNonConvertableCharacters ) << '\"'; } } -void SwHTMLWriter::OutBackground( const SfxItemSet& rItemSet, - String& rEmbGrfNm, sal_Bool bGraphic ) +void SwHTMLWriter::OutBackground( const SfxItemSet& rItemSet, sal_Bool bGraphic ) { const SfxPoolItem* pItem; if( SFX_ITEM_SET == rItemSet.GetItemState( RES_BACKGROUND, sal_False, &pItem )) { - OutBackground( ((const SvxBrushItem*)pItem), rEmbGrfNm, bGraphic ); + OutBackground( ((const SvxBrushItem*)pItem), bGraphic ); } } diff --git a/sw/source/filter/html/wrthtml.hxx b/sw/source/filter/html/wrthtml.hxx index fa14c746ab2f..a3fbb09bb795 100644 --- a/sw/source/filter/html/wrthtml.hxx +++ b/sw/source/filter/html/wrthtml.hxx @@ -456,10 +456,8 @@ public: void OutBasicBodyEvents(); // BACKGROUND/BGCOLOR-Option - void OutBackground( const SvxBrushItem *pBrushItem, String& rEmbGrfNm, - sal_Bool bGraphic ); - void OutBackground( const SfxItemSet& rItemSet, String &rEmbGrfName, - sal_Bool bGraphic ); + void OutBackground( const SvxBrushItem *pBrushItem, sal_Bool bGraphic ); + void OutBackground( const SfxItemSet& rItemSet, sal_Bool bGraphic ); void OutLanguage( LanguageType eLang ); sal_uInt16 GetHTMLDirection( sal_uInt16 nDir ) const; @@ -632,10 +630,11 @@ Writer& OutHTML_HeaderFooter( Writer& rWrt, const SwFrmFmt& rFrmFmt, sal_Bool bHeader ); Writer& OutHTML_Image( Writer&, const SwFrmFmt& rFmt, - const String& rGrfName, const String& rAlternateTxt, + Graphic& rGraphic, const String& rAlternateTxt, const Size& rRealSize, sal_uInt32 nFrmOpts, const sal_Char *pMarkType = 0, const ImageMap *pGenImgMap = 0 ); + Writer& OutHTML_BulletImage( Writer& rWrt, const sal_Char *pTag, const SvxBrushItem* pBrush, String &rGrfName, const Size &rSize, @@ -645,8 +644,7 @@ Writer& OutHTML_SwFmtFld( Writer& rWrt, const SfxPoolItem& rHt ); Writer& OutHTML_SwFmtFtn( Writer& rWrt, const SfxPoolItem& rHt ); Writer& OutHTML_INetFmt( Writer&, const SwFmtINetFmt& rINetFmt, sal_Bool bOn ); -Writer& OutCSS1_BodyTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet, - String aEmbBGGrfName ); +Writer& OutCSS1_BodyTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet ); Writer& OutCSS1_ParaTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet ); Writer& OutCSS1_HintSpanTag( Writer& rWrt, const SfxPoolItem& rHt ); -- cgit v1.2.3