summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/svtools/htmlout.hxx4
-rw-r--r--svtools/source/svhtml/htmlout.cxx15
-rw-r--r--sw/inc/shellio.hxx7
-rw-r--r--sw/source/filter/html/css1atr.cxx77
-rw-r--r--sw/source/filter/html/htmlatr.cxx3
-rw-r--r--sw/source/filter/html/htmlflywriter.cxx156
-rw-r--r--sw/source/filter/html/htmlnumwriter.cxx3
-rw-r--r--sw/source/filter/html/htmlplug.cxx23
-rw-r--r--sw/source/filter/html/wrthtml.cxx39
-rw-r--r--sw/source/filter/html/wrthtml.hxx11
-rw-r--r--sw/source/filter/writer/writer.cxx63
-rw-r--r--sw/source/ui/dbui/mmresultdialogs.cxx9
12 files changed, 344 insertions, 66 deletions
diff --git a/include/svtools/htmlout.hxx b/include/svtools/htmlout.hxx
index 1547550b5bb8..715f0ba7534b 100644
--- a/include/svtools/htmlout.hxx
+++ b/include/svtools/htmlout.hxx
@@ -66,7 +66,8 @@ struct HTMLOutFuncs
SVT_DLLPUBLIC static SvStream& Out_String( SvStream&, const OUString&,
rtl_TextEncoding eDestEnc = RTL_TEXTENCODING_MS_1252,
OUString *pNonConvertableChars = nullptr );
- SVT_DLLPUBLIC static SvStream& Out_Hex( SvStream&, sal_uLong nHex, sal_uInt8 nLen );
+ SVT_DLLPUBLIC static SvStream& Out_Hex( SvStream&, sal_uLong nHex, sal_uInt8 nLen,
+ rtl_TextEncoding eDestEnc = RTL_TEXTENCODING_MS_1252 );
SVT_DLLPUBLIC static SvStream& Out_Color( SvStream&, const Color&,
rtl_TextEncoding eDestEnc = RTL_TEXTENCODING_MS_1252 );
SVT_DLLPUBLIC static SvStream& Out_ImageMap( SvStream&, const OUString&, const ImageMap&, const OUString&,
@@ -103,6 +104,7 @@ struct HTMLOutFuncs
SvNumberFormatter& rFormatter,
rtl_TextEncoding eDestEnc = RTL_TEXTENCODING_MS_1252,
OUString *pNonConvertableChars = nullptr);
+ SVT_DLLPUBLIC static bool PrivateURLToInternalImg( OUString& rURL );
};
struct HtmlWriterHelper
diff --git a/svtools/source/svhtml/htmlout.cxx b/svtools/source/svhtml/htmlout.cxx
index 477c24d45108..99d9e38d5e84 100644
--- a/svtools/source/svhtml/htmlout.cxx
+++ b/svtools/source/svhtml/htmlout.cxx
@@ -558,7 +558,8 @@ SvStream& HTMLOutFuncs::FlushToAscii( SvStream& rStream,
return rStream;
}
-SvStream& HTMLOutFuncs::Out_Hex( SvStream& rStream, sal_uLong nHex, sal_uInt8 nLen )
+SvStream& HTMLOutFuncs::Out_Hex( SvStream& rStream, sal_uLong nHex, sal_uInt8 nLen,
+ rtl_TextEncoding )
{ // in einen Stream aus
sal_Char aNToABuf[] = "0000000000000000";
@@ -977,6 +978,18 @@ OString HTMLOutFuncs::CreateTableDataOptionsValNum(
return aStrTD.makeStringAndClear();
}
+bool HTMLOutFuncs::PrivateURLToInternalImg( OUString& rURL )
+{
+ if( rURL.getLength() > 14 &&
+ rURL.compareTo( OOO_STRING_SVTOOLS_HTML_private_image, 14 ) == 0 )
+ {
+ rURL = rURL.copy( 14 );
+ return true;
+ }
+
+ return false;
+}
+
void HtmlWriterHelper::applyColor(HtmlWriter& rHtmlWriter, const OString &aAttributeName, const Color& rColor)
{
OStringBuffer sBuffer;
diff --git a/sw/inc/shellio.hxx b/sw/inc/shellio.hxx
index b23e1beb5e1f..9d492b38a322 100644
--- a/sw/inc/shellio.hxx
+++ b/sw/inc/shellio.hxx
@@ -374,7 +374,7 @@ protected:
bool CopyNextPam( SwPaM ** );
void PutNumFormatFontsInAttrPool();
- void PutEditEngFontsInAttrPool();
+ void PutEditEngFontsInAttrPool( bool bIncl_CJK_CTL = true );
virtual sal_uLong WriteStream() = 0;
void SetBaseURL( const OUString& rURL ) { sBaseURL = rURL; }
@@ -415,6 +415,8 @@ public:
void SetShowProgress( bool bFlag ) { bShowProgress = bFlag; }
+ const OUString* GetOrigFileName() const { return pOrigFileName; }
+
const SwAsciiOptions& GetAsciiOptions() const { return aAscOpts; }
void SetAsciiOptions( const SwAsciiOptions& rOpt ) { aAscOpts = rOpt; }
@@ -434,6 +436,9 @@ public:
static SwPaM * NewSwPaM(SwDoc & rDoc,
sal_uLong const nStartIdx, sal_uLong const nEndIdx);
+ // If applicable copy a local file into internet.
+ bool CopyLocalFileToINet( OUString& rFileNm );
+
// Stream-specific routines. Do not use in storage-writer!
// Optimizing output on stream.
diff --git a/sw/source/filter/html/css1atr.cxx b/sw/source/filter/html/css1atr.cxx
index 547f28de197e..35f486187ed6 100644
--- a/sw/source/filter/html/css1atr.cxx
+++ b/sw/source/filter/html/css1atr.cxx
@@ -143,7 +143,8 @@ static Writer& OutCSS1_SvxULSpace_SvxLRSpace( Writer& rWrt,
const SfxItemSet& rItemSet,
bool bDeep );
static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt,
- sal_uInt16 nMode );
+ sal_uInt16 nMode,
+ const OUString *pGraphicName );
static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt );
static Writer& OutCSS1_SwFormatFrameSize( Writer& rWrt, const SfxPoolItem& rHt,
sal_uInt16 nMode );
@@ -534,7 +535,7 @@ void SwHTMLWriter::OutCSS1_SfxItemSet( const SfxItemSet& rItemSet,
}
}
-void SwHTMLWriter::OutStyleSheet( const SwPageDesc& rPageDesc )
+void SwHTMLWriter::OutStyleSheet( const SwPageDesc& rPageDesc, bool bUsed )
{
m_bFirstCSS1Rule = true;
@@ -603,7 +604,7 @@ void SwHTMLWriter::OutStyleSheet( const SwPageDesc& rPageDesc )
{
const SwTextFormatColl* pColl = (*pDoc->GetTextFormatColls())[i];
sal_uInt16 nPoolId = pColl->GetPoolFormatId();
- if( nPoolId == RES_POOLCOLL_TEXT ||
+ if( !bUsed || nPoolId == RES_POOLCOLL_TEXT ||
pDoc->IsUsed( *pColl ) )
OutCSS1_SwFormat( *this, *pColl, &pDoc->getIDocumentStylePoolAccess(), m_pTemplate );
}
@@ -614,7 +615,7 @@ void SwHTMLWriter::OutStyleSheet( const SwPageDesc& rPageDesc )
{
const SwCharFormat *pCFormat = (*pDoc->GetCharFormats())[i];
sal_uInt16 nPoolId = pCFormat->GetPoolFormatId();
- if( nPoolId == RES_POOLCHR_INET_NORMAL ||
+ if( !bUsed || nPoolId == RES_POOLCHR_INET_NORMAL ||
nPoolId == RES_POOLCHR_INET_VISIT ||
pDoc->IsUsed( *pCFormat ) )
OutCSS1_SwFormat( *this, *pCFormat, &pDoc->getIDocumentStylePoolAccess(), m_pTemplate );
@@ -1832,7 +1833,8 @@ static Writer& OutCSS1_SwFootnoteInfo( Writer& rWrt, const SwEndNoteInfo& rInfo,
return rWrt;
}
-Writer& OutCSS1_BodyTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet )
+Writer& OutCSS1_BodyTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet,
+ const OUString& rEmbeddedGraphicName )
{
SwHTMLWriter& rHTMLWrt = static_cast<SwHTMLWriter&>(rWrt);
@@ -1847,7 +1849,7 @@ Writer& OutCSS1_BodyTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet )
if( SfxItemState::SET == rItemSet.GetItemState( RES_BACKGROUND, false,
&pItem ) )
{
- OutCSS1_SvxBrush( rWrt, *pItem, CSS1_BACKGROUND_PAGE );
+ OutCSS1_SvxBrush( rWrt, *pItem, CSS1_BACKGROUND_PAGE, &rEmbeddedGraphicName );
}
if( SfxItemState::SET == rItemSet.GetItemState( RES_BOX, false,
@@ -1916,7 +1918,7 @@ Writer& OutCSS1_TableBGStyleOpt( Writer& rWrt, const SfxPoolItem& rHt )
SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_STYLE_OPT_ON |
CSS1_OUTMODE_ENCODE|
CSS1_OUTMODE_TABLEBOX, nullptr );
- OutCSS1_SvxBrush( rWrt, rHt, CSS1_BACKGROUND_TABLE );
+ OutCSS1_SvxBrush( rWrt, rHt, CSS1_BACKGROUND_TABLE, 0 );
if( !rHTMLWrt.m_bFirstCSS1Property )
rWrt.Strm().WriteChar( '\"' );
@@ -2163,7 +2165,7 @@ void SwHTMLWriter::OutCSS1_TableFrameFormatOptions( const SwFrameFormat& rFrameF
const SfxPoolItem *pItem;
const SfxItemSet& rItemSet = rFrameFormat.GetAttrSet();
if( SfxItemState::SET==rItemSet.GetItemState( RES_BACKGROUND, false, &pItem ) )
- OutCSS1_SvxBrush( *this, *pItem, CSS1_BACKGROUND_TABLE );
+ OutCSS1_SvxBrush( *this, *pItem, CSS1_BACKGROUND_TABLE, 0 );
if( IsHTMLMode( HTMLMODE_PRINT_EXT ) )
OutCSS1_SvxFormatBreak_SwFormatPDesc_SvxFormatKeep( *this, rItemSet, false );
@@ -2195,7 +2197,7 @@ void SwHTMLWriter::OutCSS1_SectionFormatOptions( const SwFrameFormat& rFrameForm
const SfxPoolItem *pItem;
const SfxItemSet& rItemSet = rFrameFormat.GetAttrSet();
if( SfxItemState::SET==rItemSet.GetItemState( RES_BACKGROUND, false, &pItem ) )
- OutCSS1_SvxBrush( *this, *pItem, CSS1_BACKGROUND_SECTION );
+ OutCSS1_SvxBrush( *this, *pItem, CSS1_BACKGROUND_SECTION, 0 );
if (pCol)
{
@@ -2217,7 +2219,7 @@ static bool OutCSS1_FrameFormatBrush( SwHTMLWriter& rWrt,
nullptr != rBrushItem.GetGraphicLink() ||
0 != rBrushItem.GetGraphicPos() )
{
- OutCSS1_SvxBrush( rWrt, rBrushItem, CSS1_BACKGROUND_FLY );
+ OutCSS1_SvxBrush( rWrt, rBrushItem, CSS1_BACKGROUND_FLY, 0 );
bWritten = true;
}
return bWritten;
@@ -3195,12 +3197,13 @@ static Writer& OutCSS1_SvxFormatBreak_SwFormatPDesc_SvxFormatKeep( Writer& rWrt,
// Wrapper for OutCSS1_SfxItemSet etc.
static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt )
{
- OutCSS1_SvxBrush( rWrt, rHt, CSS1_BACKGROUND_ATTR );
+ OutCSS1_SvxBrush( rWrt, rHt, CSS1_BACKGROUND_ATTR, 0 );
return rWrt;
}
static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt,
- sal_uInt16 nMode)
+ sal_uInt16 nMode,
+ const OUString* pGraphicName)
{
SwHTMLWriter& rHTMLWrt = static_cast<SwHTMLWriter&>(rWrt);
@@ -3213,7 +3216,15 @@ static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt,
// start getting a few values
// const Brush &rBrush = static_cast<const SvxBrushItem &>(rHt).GetBrush();
const Color & rColor = static_cast<const SvxBrushItem &>(rHt).GetColor();
+ OUString aLink = pGraphicName ? *pGraphicName
+ : ((const SvxBrushItem &)rHt).GetGraphicLink();
SvxGraphicPosition ePos = static_cast<const SvxBrushItem &>(rHt).GetGraphicPos();
+ if( CSS1_BACKGROUND_PAGE==nMode && !rHTMLWrt.mbEmbedImages )
+ {
+ // page style images are exported if not tiled
+ if( aLink.isEmpty() || GPOS_TILED==ePos )
+ return rWrt;
+ }
// get the color
bool bColor = false;
@@ -3228,24 +3239,35 @@ static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt,
// and now the Graphic
OUString aGraphicInBase64;
+ OUString aGraphicAsLink;
// Embedded Grafic -> export WriteEmbedded
- const Graphic* pGrf = static_cast<const SvxBrushItem &>(rHt).GetGraphic();
- if( pGrf )
+ const Graphic* pGrf = 0;
+ if( rHTMLWrt.mbEmbedImages || aLink.isEmpty())
{
- if( !XOutBitmap::GraphicToBase64(*pGrf, aGraphicInBase64) )
+ pGrf = static_cast<const SvxBrushItem &>(rHt).GetGraphic();
+ if( pGrf )
{
- rHTMLWrt.m_nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE;
+ if( !XOutBitmap::GraphicToBase64(*pGrf, aGraphicInBase64) )
+ {
+ rHTMLWrt.m_nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE;
+ }
}
+ aLink.clear();
+ }
+ else if( !pGraphicName && rHTMLWrt.m_bCfgCpyLinkedGrfs )
+ {
+ aGraphicAsLink = aLink;
+ rWrt.CopyLocalFileToINet( aGraphicAsLink );
+ aLink = aGraphicAsLink;
}
-
// In tables we only export something if there is a Graphic
- if( CSS1_BACKGROUND_TABLE==nMode && !pGrf )
+ if( CSS1_BACKGROUND_TABLE==nMode && !pGrf && !aLink.isEmpty())
return rWrt;
// if necessary, add the orientation of the Graphic
const sal_Char *pRepeat = nullptr, *pHori = nullptr, *pVert = nullptr;
- if( pGrf )
+ if( pGrf || !aLink.isEmpty() )
{
if( GPOS_TILED==ePos )
{
@@ -3308,7 +3330,7 @@ static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt,
// now build the string
OUString sOut;
- if( !pGrf && !bColor )
+ if( !pGrf && aLink.isEmpty() && !bColor )
{
// no color and no Link, but a transparent Brush
if( bTransparent && CSS1_BACKGROUND_FLY != nMode )
@@ -3322,13 +3344,22 @@ static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt,
sOut += OStringToOUString(sTmp, RTL_TEXTENCODING_ASCII_US);
}
- if( pGrf )
+ if( pGrf || !aLink.isEmpty() )
{
if( bColor )
sOut += " ";
- sOut += OStringToOUString(sCSS1_url, RTL_TEXTENCODING_ASCII_US) +
- "(\'" OOO_STRING_SVTOOLS_HTML_O_data ":" + aGraphicInBase64 + "\')";
+ if(pGrf)
+ {
+ sOut += OStringToOUString(sCSS1_url, RTL_TEXTENCODING_ASCII_US) +
+ "(\'" OOO_STRING_SVTOOLS_HTML_O_data ":" + aGraphicInBase64 + "\')";
+ }
+ else
+ {
+ sOut += OStringToOUString(sCSS1_url, RTL_TEXTENCODING_ASCII_US)+
+ "(" + URIHelper::simpleNormalizedMakeRelative(rWrt.GetBaseURL(),
+ aLink) + ")";
+ }
if( pRepeat )
{
diff --git a/sw/source/filter/html/htmlatr.cxx b/sw/source/filter/html/htmlatr.cxx
index b285c9015b7a..fe8597ea5979 100644
--- a/sw/source/filter/html/htmlatr.cxx
+++ b/sw/source/filter/html/htmlatr.cxx
@@ -953,7 +953,8 @@ void OutHTML_SwFormat( Writer& rWrt, const SwFormat& rFormat,
OSL_ENSURE( aNumInfo.GetNumRule(), "Wo ist die Numerierung geblieben???" );
OSL_ENSURE( nBulletGrfLvl < MAXLEVEL, "So viele Ebenen gibt's nicht" );
const SwNumFormat& rNumFormat = aNumInfo.GetNumRule()->Get(nBulletGrfLvl);
- OutHTML_BulletImage( rWrt, OOO_STRING_SVTOOLS_HTML_image, rNumFormat.GetBrush() );
+ OutHTML_BulletImage( rWrt, OOO_STRING_SVTOOLS_HTML_image, rNumFormat.GetBrush(),
+ rHWrt.m_aBulletGrfs[nBulletGrfLvl]);
}
rHWrt.GetNumInfo() = aNumInfo;
diff --git a/sw/source/filter/html/htmlflywriter.cxx b/sw/source/filter/html/htmlflywriter.cxx
index 1eacca53d60a..5b27c3b9defd 100644
--- a/sw/source/filter/html/htmlflywriter.cxx
+++ b/sw/source/filter/html/htmlflywriter.cxx
@@ -520,9 +520,10 @@ void SwHTMLWriter::OutFrameFormat( sal_uInt8 nMode, const SwFrameFormat& rFrameF
OString SwHTMLWriter::OutFrameFormatOptions( const SwFrameFormat &rFrameFormat,
const OUString& rAlternateText,
- sal_uInt32 nFrameOpts )
+ sal_uInt32 nFrameOpts,
+ const OString &rEndTags )
{
- OString sRetEndTags;
+ OString sRetEndTags(rEndTags);
OStringBuffer sOut;
const SfxPoolItem* pItem;
const SfxItemSet& rItemSet = rFrameFormat.GetAttrSet();
@@ -795,10 +796,11 @@ OString SwHTMLWriter::OutFrameFormatOptions( const SwFrameFormat &rFrameFormat,
{
sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_linebreak).
append(' ').append(OOO_STRING_SVTOOLS_HTML_O_clear).
- append("=\"").append(pStr).append("\">");
+ append("=\"").append(pStr).append("\">").append(rEndTags);
sRetEndTags = sOut.makeStringAndClear();
}
}
+ assert(sRetEndTags.endsWith(rEndTags)); // fdo#58286
return sRetEndTags;
}
@@ -1200,6 +1202,7 @@ OUString lclWriteOutImap(SwHTMLWriter& rHTMLWrt, const SfxItemSet& rItemSet, con
}
Writer& OutHTML_Image( Writer& rWrt, const SwFrameFormat &rFrameFormat,
+ const OUString& rGraphicURL,
Graphic& rGraphic, const OUString& rAlternateText,
const Size &rRealSize, sal_uInt32 nFrameOpts,
const sal_Char *pMarkType,
@@ -1217,6 +1220,10 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrameFormat &rFrameFormat,
OutHTML_INetFormat( rWrt, *pINetFormat, false );
}
+ OUString aGraphicURL( rGraphicURL );
+ if( !rHTMLWrt.mbEmbedImages && !HTMLOutFuncs::PrivateURLToInternalImg(aGraphicURL) )
+ aGraphicURL = URIHelper::simpleNormalizedMakeRelative( rWrt.GetBaseURL(), aGraphicURL);
+
const SfxPoolItem* pItem;
const SfxItemSet& rItemSet = rFrameFormat.GetAttrSet();
@@ -1362,10 +1369,18 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrameFormat &rFrameFormat,
}
OStringBuffer sBuffer;
- sBuffer.append(OOO_STRING_SVTOOLS_HTML_O_data);
- sBuffer.append(":");
- sBuffer.append(OUStringToOString(aGraphicInBase64, RTL_TEXTENCODING_UTF8));
- aHtml.attribute(OOO_STRING_SVTOOLS_HTML_O_src, sBuffer.makeStringAndClear().getStr());
+ if(rHTMLWrt.mbEmbedImages)
+ {
+ sBuffer.append(OOO_STRING_SVTOOLS_HTML_O_data);
+ sBuffer.append(":");
+ sBuffer.append(OUStringToOString(aGraphicInBase64, RTL_TEXTENCODING_UTF8));
+ aHtml.attribute(OOO_STRING_SVTOOLS_HTML_O_src, sBuffer.makeStringAndClear().getStr());
+ }
+ else
+ {
+ sBuffer.append(OUStringToOString(aGraphicURL, RTL_TEXTENCODING_UTF8));
+ aHtml.attribute(OOO_STRING_SVTOOLS_HTML_O_src, sBuffer.makeStringAndClear().getStr());
+ }
// Events
if (SfxItemState::SET == rItemSet.GetItemState(RES_FRMMACRO, true, &pItem))
@@ -1412,21 +1427,44 @@ Writer& OutHTML_Image( Writer& rWrt, const SwFrameFormat &rFrameFormat,
Writer& OutHTML_BulletImage( Writer& rWrt,
const sal_Char *pTag,
- const SvxBrushItem* pBrush )
+ const SvxBrushItem* pBrush,
+ const OUString &rGraphicURL)
{
SwHTMLWriter & rHTMLWrt = static_cast<SwHTMLWriter&>(rWrt);
OUString aGraphicInBase64;
+ OUString aLink;
if( pBrush )
{
- const Graphic* pGrf = pBrush->GetGraphic();
- if( pGrf )
+ aLink = pBrush->GetGraphicLink();
+ if(rHTMLWrt.mbEmbedImages || aLink.isEmpty())
{
- if( !XOutBitmap::GraphicToBase64(*pGrf, aGraphicInBase64) )
+ const Graphic* pGrf = pBrush->GetGraphic();
+ if( pGrf )
{
- rHTMLWrt.m_nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE;
+ if( !XOutBitmap::GraphicToBase64(*pGrf, aGraphicInBase64) )
+ {
+ rHTMLWrt.m_nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE;
+ }
}
}
+ else if(!aLink.isEmpty())
+ {
+ if( rHTMLWrt.m_bCfgCpyLinkedGrfs )
+ {
+ rHTMLWrt.CopyLocalFileToINet( aLink );
+ }
+
+ }
+ }
+ else if(!rHTMLWrt.mbEmbedImages)
+ {
+ aLink = rGraphicURL;
+ }
+ if(!aLink.isEmpty())
+ {
+ if( !HTMLOutFuncs::PrivateURLToInternalImg(aLink) )
+ aLink = URIHelper::simpleNormalizedMakeRelative( rWrt.GetBaseURL(), aLink);
}
OStringBuffer sOut;
@@ -1434,12 +1472,22 @@ Writer& OutHTML_BulletImage( Writer& rWrt,
sOut.append('<').append(pTag);
sOut.append(' ');
- sOut.append(OOO_STRING_SVTOOLS_HTML_O_style).append("=\"").
- append("list-style-image: ").append("url(").
- append(OOO_STRING_SVTOOLS_HTML_O_data).append(":");
- rWrt.Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
- HTMLOutFuncs::Out_String( rWrt.Strm(), aGraphicInBase64, rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters );
- sOut.append(");").append('\"');
+ sOut.append(OOO_STRING_SVTOOLS_HTML_O_style).append("=\"");
+ if(!aLink.isEmpty())
+ {
+ sOut.append(OOO_STRING_SVTOOLS_HTML_O_src).append("=\"");
+ rWrt.Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
+ HTMLOutFuncs::Out_String( rWrt.Strm(), aLink, rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters );
+ }
+ else
+ {
+ sOut.append("list-style-image: ").append("url(").
+ append(OOO_STRING_SVTOOLS_HTML_O_data).append(":");
+ rWrt.Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
+ HTMLOutFuncs::Out_String( rWrt.Strm(), aGraphicInBase64, rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters );
+ sOut.append(");");
+ }
+ sOut.append('\"');
if (pTag)
sOut.append('>');
@@ -1678,7 +1726,28 @@ static Writer & OutHTML_FrameFormatAsImage( Writer& rWrt, const SwFrameFormat& r
ImageMap aIMap;
Graphic aGraphic( ((SwFrameFormat &)rFrameFormat).MakeGraphic( &aIMap ) );
Size aSz( 0, 0 );
- OutHTML_Image( rWrt, rFrameFormat, aGraphic, rFrameFormat.GetName(), aSz,
+ OUString GraphicURL;
+ if(!rHTMLWrt.mbEmbedImages)
+ {
+ if( rHTMLWrt.GetOrigFileName() )
+ GraphicURL = *rHTMLWrt.GetOrigFileName();
+ if( aGraphic.GetType() == GRAPHIC_NONE ||
+ XOutBitmap::WriteGraphic( aGraphic, GraphicURL,
+ OUString("JPG"),
+ (XOUTBMP_USE_GIF_IF_POSSIBLE|
+ XOUTBMP_USE_NATIVE_IF_POSSIBLE) ) != 0 )
+ {
+ // leer oder fehlerhaft, da ist nichts auszugeben
+ rHTMLWrt.m_nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE;
+ return rWrt;
+ }
+
+ GraphicURL = URIHelper::SmartRel2Abs(
+ INetURLObject(rWrt.GetBaseURL()), GraphicURL,
+ URIHelper::GetMaybeFileHdl() );
+
+ }
+ OutHTML_Image( rWrt, rFrameFormat, GraphicURL, aGraphic, rFrameFormat.GetName(), aSz,
HTML_FRMOPTS_GENIMG, "frame",
aIMap.GetIMapObjectCount() ? &aIMap : nullptr );
@@ -1705,7 +1774,54 @@ static Writer& OutHTML_FrameFormatGrfNode( Writer& rWrt, const SwFrameFormat& rF
nFrameFlags |= HTML_FRMOPTS_IMG_CSS1;
Graphic aGraphic = pGrfNd->GetGraphic();
- OutHTML_Image( rWrt, rFrameFormat, aGraphic, pGrfNd->GetTitle(),
+ OUString aGraphicURL;
+ if(!rHTMLWrt.mbEmbedImages)
+ {
+ const SwMirrorGrf& rMirror = pGrfNd->GetSwAttrSet().GetMirrorGrf();
+
+ if( !pGrfNd->IsLinkedFile() || RES_MIRROR_GRAPH_DONT != rMirror.GetValue() )
+ {
+ // create a (mirrored) jpeg file
+ if( rHTMLWrt.GetOrigFileName() )
+ aGraphicURL = *rHTMLWrt.GetOrigFileName();
+ pGrfNd->GetGrf( 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 SwFormatFrameSize& rSize = rFrameFormat.GetFrameSize();
+ aMM100Size = OutputDevice::LogicToLogic( rSize.GetSize(),
+ MapMode( MAP_TWIP ), MapMode( MAP_100TH_MM ));
+
+ sal_uInt16 nErr = XOutBitmap::WriteGraphic( pGrfNd->GetGrf(), aGraphicURL,
+ OUString("JPG"), nFlags, &aMM100Size );
+ if( nErr )
+ {
+ rHTMLWrt.m_nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE;
+ return rWrt;
+ }
+ aGraphicURL = URIHelper::SmartRel2Abs(
+ INetURLObject(rWrt.GetBaseURL()), aGraphicURL,
+ URIHelper::GetMaybeFileHdl() );
+ }
+ else
+ {
+ pGrfNd->GetFileFilterNms( &aGraphicURL, 0 );
+ if( rHTMLWrt.m_bCfgCpyLinkedGrfs )
+ rWrt.CopyLocalFileToINet( aGraphicURL );
+ }
+
+ }
+ OutHTML_Image( rWrt, rFrameFormat, aGraphicURL, aGraphic, pGrfNd->GetTitle(),
pGrfNd->GetTwipSize(), nFrameFlags, "graphic" );
return rWrt;
diff --git a/sw/source/filter/html/htmlnumwriter.cxx b/sw/source/filter/html/htmlnumwriter.cxx
index 5afc06a333bc..9042b5aa1556 100644
--- a/sw/source/filter/html/htmlnumwriter.cxx
+++ b/sw/source/filter/html/htmlnumwriter.cxx
@@ -219,7 +219,8 @@ Writer& OutHTML_NumBulListStart( SwHTMLWriter& rWrt,
rWrt.Strm().WriteOString( sOut );
OutHTML_BulletImage( rWrt,
nullptr,
- rNumFormat.GetBrush() );
+ rNumFormat.GetBrush(),
+ rWrt.m_aBulletGrfs[i]);
}
else
{
diff --git a/sw/source/filter/html/htmlplug.cxx b/sw/source/filter/html/htmlplug.cxx
index 1ecfa949a72a..f85ab2e61736 100644
--- a/sw/source/filter/html/htmlplug.cxx
+++ b/sw/source/filter/html/htmlplug.cxx
@@ -1315,9 +1315,30 @@ Writer& OutHTML_FrameFormatOLENodeGrf( Writer& rWrt, const SwFrameFormat& rFrame
}
Graphic aGraphic( *pOLENd->GetGraphic() );
+ OUString aGraphicURL;
+ if(!rHTMLWrt.mbEmbedImages)
+ {
+ const OUString* pTempFileName = rHTMLWrt.GetOrigFileName();
+ if(pTempFileName)
+ aGraphicURL = *pTempFileName;
+
+ sal_uInt16 nErr = XOutBitmap::WriteGraphic( aGraphic, aGraphicURL,
+ OUString("JPG"),
+ (XOUTBMP_USE_GIF_IF_POSSIBLE |
+ XOUTBMP_USE_NATIVE_IF_POSSIBLE) );
+ if( nErr ) // fehlerhaft, da ist nichts auszugeben
+ {
+ rHTMLWrt.m_nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE;
+ return rWrt;
+ }
+ aGraphicURL = URIHelper::SmartRel2Abs(
+ INetURLObject(rWrt.GetBaseURL()), aGraphicURL,
+ URIHelper::GetMaybeFileHdl() );
+
+ }
sal_uLong nFlags = bInCntnr ? HTML_FRMOPTS_GENIMG_CNTNR
: HTML_FRMOPTS_GENIMG;
- OutHTML_Image( rWrt, rFrameFormat, aGraphic,
+ OutHTML_Image( rWrt, rFrameFormat, aGraphicURL, aGraphic,
pOLENd->GetTitle(), pOLENd->GetTwipSize(),
nFlags, "ole" );
diff --git a/sw/source/filter/html/wrthtml.cxx b/sw/source/filter/html/wrthtml.cxx
index 57978fbe53d8..1bb9512046bd 100644
--- a/sw/source/filter/html/wrthtml.cxx
+++ b/sw/source/filter/html/wrthtml.cxx
@@ -155,6 +155,7 @@ SwHTMLWriter::SwHTMLWriter( const OUString& rBaseURL )
, m_bCfgNetscape4( false )
, mbSkipImages(false)
, mbSkipHeaderFooter(false)
+ , mbEmbedImages(false)
, m_bCfgPrintLayout( false )
, m_bParaDotLeaders( false )
{
@@ -186,6 +187,10 @@ void SwHTMLWriter::SetupFilterOptions(SfxMedium& rMedium)
{
mbSkipHeaderFooter = true;
}
+ else if (sFilterOptions == "EmbedImages" )
+ {
+ mbEmbedImages = true;
+ }
}
sal_uLong SwHTMLWriter::WriteStream()
@@ -1057,8 +1062,10 @@ const SwPageDesc *SwHTMLWriter::MakeHeader( sal_uInt16 &rHeaderAttrs )
OutDirection( m_nDirection );
if( m_bCfgOutStyles )
- OutCSS1_BodyTagStyleOpt( *this, rItemSet );
-
+ {
+ OUString dummy;
+ OutCSS1_BodyTagStyleOpt( *this, rItemSet, dummy );
+ }
// Events anhaengen
if( pDoc->GetDocShell() ) // nur mit DocShell ist Basic moeglich
OutBasicBodyEvents();
@@ -1230,15 +1237,31 @@ void SwHTMLWriter::OutBackground( const SvxBrushItem *pBrushItem, bool bGraphic
OUString aGraphicInBase64;
const Graphic* pGrf = pBrushItem->GetGraphic();
- if( pGrf )
+ OUString GraphicURL = pBrushItem->GetGraphicLink();
+ if( mbEmbedImages || GraphicURL.isEmpty())
{
- if( !XOutBitmap::GraphicToBase64(*pGrf, aGraphicInBase64) )
+ if( pGrf )
{
- m_nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE;
+ if( !XOutBitmap::GraphicToBase64(*pGrf, aGraphicInBase64) )
+ {
+ m_nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE;
+ }
+ Strm().WriteCharPtr( " " OOO_STRING_SVTOOLS_HTML_O_background "=\"" );
+ Strm().WriteCharPtr( OOO_STRING_SVTOOLS_HTML_O_data ":" );
+ HTMLOutFuncs::Out_String( Strm(), aGraphicInBase64, m_eDestEnc, &m_aNonConvertableCharacters ).WriteChar( '\"' );
}
- Strm().WriteCharPtr( " " OOO_STRING_SVTOOLS_HTML_O_background "=\"" );
- Strm().WriteCharPtr( OOO_STRING_SVTOOLS_HTML_O_data ":" );
- HTMLOutFuncs::Out_String( Strm(), aGraphicInBase64, m_eDestEnc, &m_aNonConvertableCharacters ).WriteChar( '\"' );
+ }
+ else
+ {
+ if( m_bCfgCpyLinkedGrfs )
+ {
+ CopyLocalFileToINet( GraphicURL );
+ }
+ OUString s( URIHelper::simpleNormalizedMakeRelative( GetBaseURL(), GraphicURL));
+ Strm().WriteCharPtr(" " OOO_STRING_SVTOOLS_HTML_O_background "=\"" );
+ HTMLOutFuncs::Out_String( Strm(), s, m_eDestEnc, &m_aNonConvertableCharacters );
+ Strm().WriteCharPtr("\"");
+
}
}
diff --git a/sw/source/filter/html/wrthtml.hxx b/sw/source/filter/html/wrthtml.hxx
index 09eab5f13944..70e6be45cd3b 100644
--- a/sw/source/filter/html/wrthtml.hxx
+++ b/sw/source/filter/html/wrthtml.hxx
@@ -387,6 +387,7 @@ public:
bool mbSkipImages : 1;
/// If HTML header and footer should be written as well, or just the content itself.
bool mbSkipHeaderFooter : 1;
+ bool mbEmbedImages : 1;
#define sCSS2_P_CLASS_leaders "leaders"
bool m_bCfgPrintLayout : 1; // PrintLayout option for TOC dot leaders
@@ -433,7 +434,7 @@ public:
void OutAndSetDefList( sal_uInt16 nNewLvl );
- void OutStyleSheet( const SwPageDesc& rPageDesc );
+ void OutStyleSheet( const SwPageDesc& rPageDesc, bool bUsed=true );
inline void OutCSS1_PropertyAscii( const sal_Char *pProp,
const sal_Char *pVal );
@@ -463,7 +464,7 @@ public:
// Frame-Formats ausgeben und ggf. ein <BR CLEAR=...> vorne an
// rEndTags anhaengen
OString OutFrameFormatOptions( const SwFrameFormat& rFrameFormat, const OUString& rAltText,
- sal_uInt32 nFrameOpts );
+ sal_uInt32 nFrameOpts, const OString& rEndTags = OString() );
void writeFrameFormatOptions(HtmlWriter& aHtml, const SwFrameFormat& rFrameFormat, const OUString& rAltText, sal_uInt32 nFrameOpts);
@@ -643,19 +644,21 @@ Writer& OutHTML_HeaderFooter( Writer& rWrt, const SwFrameFormat& rFrameFormat,
bool bHeader );
Writer& OutHTML_Image( Writer&, const SwFrameFormat& rFormat,
+ const OUString& rGraphicURL,
Graphic& rGraphic, const OUString& rAlternateText,
const Size& rRealSize, sal_uInt32 nFrameOpts,
const sal_Char *pMarkType = nullptr,
const ImageMap *pGenImgMap = nullptr );
Writer& OutHTML_BulletImage( Writer& rWrt, const sal_Char *pTag,
- const SvxBrushItem* pBrush );
+ const SvxBrushItem* pBrush,
+ const OUString& rGraphicURL);
Writer& OutHTML_SwFormatField( Writer& rWrt, const SfxPoolItem& rHt );
Writer& OutHTML_SwFormatFootnote( Writer& rWrt, const SfxPoolItem& rHt );
Writer& OutHTML_INetFormat( Writer&, const SwFormatINetFormat& rINetFormat, bool bOn );
-Writer& OutCSS1_BodyTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet );
+Writer& OutCSS1_BodyTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet, const OUString& rGraphicURL );
Writer& OutCSS1_ParaTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet );
Writer& OutCSS1_HintSpanTag( Writer& rWrt, const SfxPoolItem& rHt );
diff --git a/sw/source/filter/writer/writer.cxx b/sw/source/filter/writer/writer.cxx
index fb22f18b742f..caae537b17c0 100644
--- a/sw/source/filter/writer/writer.cxx
+++ b/sw/source/filter/writer/writer.cxx
@@ -63,6 +63,7 @@ struct Writer_Impl
{
SvStream * m_pStream;
+ std::auto_ptr< std::map<OUString, OUString> > pFileNameMap;
std::vector<const SvxFontItem*> aFontRemoveLst;
SwBookmarkNodeTable aBkmkNodePos;
@@ -301,6 +302,59 @@ sal_uLong Writer::Write( SwPaM&, const uno::Reference < embed::XStorage >&, cons
return ERR_SWG_WRITE_ERROR;
}
+bool Writer::CopyLocalFileToINet( OUString& rFileNm )
+{
+ if( !pOrigFileName ) // can be happen, by example if we
+ return false; // write into the clipboard
+
+ bool bRet = false;
+ INetURLObject aFileUrl( rFileNm ), aTargetUrl( *pOrigFileName );
+
+// this is our old without the Mail-Export
+ if( ! ( INetProtocol::File == aFileUrl.GetProtocol() &&
+ INetProtocol::File != aTargetUrl.GetProtocol() &&
+ INetProtocol::Ftp <= aTargetUrl.GetProtocol() &&
+ INetProtocol::VndSunStarWebdav >= aTargetUrl.GetProtocol() ) )
+ return bRet;
+
+ if (m_pImpl->pFileNameMap.get())
+ {
+ // has the file been moved?
+ std::map<OUString, OUString>::iterator it = m_pImpl->pFileNameMap->find( rFileNm );
+ if ( it != m_pImpl->pFileNameMap->end() )
+ {
+ rFileNm = it->second;
+ return true;
+ }
+ }
+ else
+ {
+ m_pImpl->pFileNameMap.reset( new std::map<OUString, OUString>() );
+ }
+
+ OUString aSrc = rFileNm;
+ OUString aDest = aTargetUrl.GetPartBeforeLastName();
+ aDest += OUString(aFileUrl.GetName());
+
+ SfxMedium aSrcFile( aSrc, StreamMode::READ );
+ SfxMedium aDstFile( aDest, StreamMode::WRITE | StreamMode::SHARE_DENYNONE );
+
+ aDstFile.GetOutStream()->WriteStream( *aSrcFile.GetInStream() );
+
+ aSrcFile.Close();
+ aDstFile.Commit();
+
+ bRet = 0 == aDstFile.GetError();
+
+ if( bRet )
+ {
+ m_pImpl->pFileNameMap->insert( std::make_pair( aSrc, aDest ) );
+ rFileNm = aDest;
+ }
+
+ return bRet;
+}
+
void Writer::PutNumFormatFontsInAttrPool()
{
// then there are a few fonts in the NumRules
@@ -337,14 +391,17 @@ void Writer::PutNumFormatFontsInAttrPool()
}
}
-void Writer::PutEditEngFontsInAttrPool()
+void Writer::PutEditEngFontsInAttrPool( bool bIncl_CJK_CTL )
{
SfxItemPool& rPool = pDoc->GetAttrPool();
if( rPool.GetSecondaryPool() )
{
_AddFontItems( rPool, EE_CHAR_FONTINFO );
- _AddFontItems( rPool, EE_CHAR_FONTINFO_CJK );
- _AddFontItems( rPool, EE_CHAR_FONTINFO_CTL );
+ if( bIncl_CJK_CTL )
+ {
+ _AddFontItems( rPool, EE_CHAR_FONTINFO_CJK );
+ _AddFontItems( rPool, EE_CHAR_FONTINFO_CTL );
+ }
}
}
diff --git a/sw/source/ui/dbui/mmresultdialogs.cxx b/sw/source/ui/dbui/mmresultdialogs.cxx
index bb9990259dff..fd8f128d865d 100644
--- a/sw/source/ui/dbui/mmresultdialogs.cxx
+++ b/sw/source/ui/dbui/mmresultdialogs.cxx
@@ -1049,6 +1049,10 @@ IMPL_LINK_TYPED(SwMMResultEmailDialog, SendDocumentsHdl_Impl, Button*, pButton,
aOpt.SetParaFlags( LINEEND_CR );
aOpt.WriteUserData( sFilterOptions );
}
+ else if(MM_DOCTYPE_HTML == nDocType)
+ {
+ sFilterOptions = "EmbedImages";
+ }
OUString sTargetTempURL = URIHelper::SmartRel2Abs(
INetURLObject(), utl::TempFile::CreateTempName(),
URIHelper::GetMaybeFileHdl());
@@ -1106,11 +1110,12 @@ IMPL_LINK_TYPED(SwMMResultEmailDialog, SendDocumentsHdl_Impl, Button*, pButton,
URIHelper::GetMaybeFileHdl()) );
{
- uno::Sequence< beans::PropertyValue > aFilterValues(MM_DOCTYPE_TEXT == nDocType ? 2 : 1);
+ bool withFilterOptions = MM_DOCTYPE_TEXT == nDocType || MM_DOCTYPE_HTML == nDocType;
+ uno::Sequence< beans::PropertyValue > aFilterValues(withFilterOptions ? 2 : 1);
beans::PropertyValue* pFilterValues = aFilterValues.getArray();
pFilterValues[0].Name = "FilterName";
pFilterValues[0].Value <<= OUString(pSfxFlt->GetFilterName());
- if(MM_DOCTYPE_TEXT == nDocType)
+ if(withFilterOptions)
{
pFilterValues[1].Name = "FilterOptions";
pFilterValues[1].Value <<= sFilterOptions;