blob: 17e47290c887c2c64fd3229b3e61444817188283 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef SC_HTMLEXP_HXX
#define SC_HTMLEXP_HXX
#include "global.hxx"
#include <rtl/textenc.h>
#include <tools/gen.hxx>
#include <tools/color.hxx>
#include "expbase.hxx"
class ScDocument;
class SfxItemSet;
class SdrPage;
class Graphic;
class SdrObject;
class OutputDevice;
class ScDrawLayer;
class SvStringsSortDtor;
class ScEditCell;
class SvxBorderLine;
struct ScHTMLStyle
{ // Defaults aus StyleSheet
Color aBackgroundColor;
String aFontFamilyName;
sal_uInt32 nFontHeight; // Item-Value
sal_uInt16 nFontSizeNumber; // HTML value 1-7
sal_uInt8 nDefaultScriptType; // Font values are valid for the default script type
sal_Bool bInitialized;
ScHTMLStyle() : nFontHeight(0), nFontSizeNumber(2), nDefaultScriptType(0),
bInitialized(0) {}
const ScHTMLStyle& operator=( const ScHTMLStyle& r )
{
aBackgroundColor = r.aBackgroundColor;
aFontFamilyName = r.aFontFamilyName;
nFontHeight = r.nFontHeight;
nFontSizeNumber = r.nFontSizeNumber;
nDefaultScriptType = r.nDefaultScriptType;
bInitialized = r.bInitialized;
return *this;
}
};
struct ScHTMLGraphEntry
{
ScRange aRange; // ueberlagerter Zellbereich
Size aSize; // Groesse in Pixeln
Size aSpace; // Spacing in Pixeln
SdrObject* pObject;
sal_Bool bInCell; // ob in Zelle ausgegeben wird
sal_Bool bWritten;
ScHTMLGraphEntry( SdrObject* pObj, const ScRange& rRange,
const Size& rSize, sal_Bool bIn, const Size& rSpace ) :
aRange( rRange ), aSize( rSize ), aSpace( rSpace ),
pObject( pObj ), bInCell( bIn ), bWritten( sal_False ) {}
};
DECLARE_LIST( ScHTMLGraphList, ScHTMLGraphEntry* )
#define SC_HTML_FONTSIZES 7
const short nIndentMax = 23;
class ScHTMLExport : public ScExportBase
{
// default HtmlFontSz[1-7]
static const sal_uInt16 nDefaultFontSize[SC_HTML_FONTSIZES];
// HtmlFontSz[1-7] in s*3.ini [user]
static sal_uInt16 nFontSize[SC_HTML_FONTSIZES];
static const char* pFontSizeCss[SC_HTML_FONTSIZES];
static const sal_uInt16 nCellSpacing;
static const sal_Char __FAR_DATA sIndentSource[];
ScHTMLGraphList aGraphList;
ScHTMLStyle aHTMLStyle;
String aBaseURL;
String aStreamPath;
String aCId; // Content-Id fuer Mail-Export
OutputDevice* pAppWin; // fuer Pixelei
SvStringsSortDtor* pSrcArr; // fuer CopyLocalFileToINet
SvStringsSortDtor* pDestArr;
String aNonConvertibleChars; // collect nonconvertible characters
rtl_TextEncoding eDestEnc;
SCTAB nUsedTables;
short nIndent;
sal_Char sIndent[nIndentMax+1];
sal_Bool bAll; // ganzes Dokument
sal_Bool bTabHasGraphics;
sal_Bool bTabAlignedLeft;
sal_Bool bCalcAsShown;
sal_Bool bCopyLocalFileToINet;
sal_Bool bTableDataWidth;
sal_Bool bTableDataHeight;
const SfxItemSet& PageDefaults( SCTAB nTab );
void WriteBody();
void WriteHeader();
void WriteOverview();
void WriteTables();
void WriteCell( SCCOL nCol, SCROW nRow, SCTAB nTab );
void WriteGraphEntry( ScHTMLGraphEntry* );
void WriteImage( String& rLinkName,
const Graphic&, const ByteString& rImgOptions,
sal_uLong nXOutFlags = 0 );
// nXOutFlags fuer XOutBitmap::WriteGraphic
// write to stream if and only if URL fields in edit cell
sal_Bool WriteFieldText( const ScEditCell* pCell );
// kopiere ggfs. eine lokale Datei ins Internet
sal_Bool CopyLocalFileToINet( String& rFileNm,
const String& rTargetNm, sal_Bool bFileToFile = sal_False );
sal_Bool HasCId() { return aCId.Len() > 0; }
void MakeCIdURL( String& rURL );
void PrepareGraphics( ScDrawLayer*, SCTAB nTab,
SCCOL nStartCol, SCROW nStartRow,
SCCOL nEndCol, SCROW nEndRow );
void FillGraphList( const SdrPage*, SCTAB nTab,
SCCOL nStartCol, SCROW nStartRow,
SCCOL nEndCol, SCROW nEndRow );
void BorderToStyle( ByteString& rOut, const char* pBorderName,
const SvxBorderLine* pLine, bool& bInsertSemicolon );
sal_uInt16 GetFontSizeNumber( sal_uInt16 nHeight );
const char* GetFontSizeCss( sal_uInt16 nHeight );
sal_uInt16 ToPixel( sal_uInt16 nTwips );
Size MMToPixel( const Size& r100thMMSize );
void IncIndent( short nVal );
const sal_Char* GetIndentStr() { return sIndent; }
public:
ScHTMLExport( SvStream&, const String&, ScDocument*, const ScRange&,
sal_Bool bAll, const String& aStreamPath );
virtual ~ScHTMLExport();
sal_uLong Write();
const String& GetNonConvertibleChars() const
{ return aNonConvertibleChars; }
};
#endif