xref: /AOO41X/main/sc/source/filter/inc/htmlexp.hxx (revision 38d50f7b14e1cf975d8c6468d9633894cd59b523)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef SC_HTMLEXP_HXX
25 #define SC_HTMLEXP_HXX
26 
27 #include "global.hxx"
28 #include <rtl/textenc.h>
29 #include <tools/gen.hxx>
30 #include <tools/color.hxx>
31 
32 #include "expbase.hxx"
33 
34 
35 class ScDocument;
36 class SfxItemSet;
37 class SdrPage;
38 class Graphic;
39 class SdrObject;
40 class OutputDevice;
41 class ScDrawLayer;
42 class SvStringsSortDtor;
43 class ScEditCell;
44 class SvxBorderLine;
45 
46 struct ScHTMLStyle
47 {   // Defaults aus StyleSheet
48     Color               aBackgroundColor;
49     String              aFontFamilyName;
50     sal_uInt32              nFontHeight;        // Item-Value
51     sal_uInt16              nFontSizeNumber;    // HTML value 1-7
52     sal_uInt8                nDefaultScriptType; // Font values are valid for the default script type
53     sal_Bool                bInitialized;
54 
ScHTMLStyleScHTMLStyle55     ScHTMLStyle() : nFontHeight(0), nFontSizeNumber(2), nDefaultScriptType(0),
56         bInitialized(0) {}
57 
operator =ScHTMLStyle58     const ScHTMLStyle& operator=( const ScHTMLStyle& r )
59         {
60             aBackgroundColor    = r.aBackgroundColor;
61             aFontFamilyName     = r.aFontFamilyName;
62             nFontHeight         = r.nFontHeight;
63             nFontSizeNumber     = r.nFontSizeNumber;
64             nDefaultScriptType  = r.nDefaultScriptType;
65             bInitialized        = r.bInitialized;
66             return *this;
67         }
68 };
69 
70 struct ScHTMLGraphEntry
71 {
72     ScRange             aRange;         // ueberlagerter Zellbereich
73     Size                aSize;          // Groesse in Pixeln
74     Size                aSpace;         // Spacing in Pixeln
75     SdrObject*          pObject;
76     sal_Bool                bInCell;        // ob in Zelle ausgegeben wird
77     sal_Bool                bWritten;
78 
ScHTMLGraphEntryScHTMLGraphEntry79     ScHTMLGraphEntry( SdrObject* pObj, const ScRange& rRange,
80         const Size& rSize,  sal_Bool bIn, const Size& rSpace ) :
81         aRange( rRange ), aSize( rSize ), aSpace( rSpace ),
82         pObject( pObj ), bInCell( bIn ), bWritten( sal_False ) {}
83 };
84 
85 DECLARE_LIST( ScHTMLGraphList, ScHTMLGraphEntry* )
86 
87 #define SC_HTML_FONTSIZES 7
88 const short nIndentMax = 23;
89 
90 class ScHTMLExport : public ScExportBase
91 {
92     // default HtmlFontSz[1-7]
93     static const sal_uInt16 nDefaultFontSize[SC_HTML_FONTSIZES];
94     // HtmlFontSz[1-7] in s*3.ini [user]
95     static sal_uInt16       nFontSize[SC_HTML_FONTSIZES];
96     static const char*  pFontSizeCss[SC_HTML_FONTSIZES];
97     static const sal_uInt16 nCellSpacing;
98     static const sal_Char __FAR_DATA sIndentSource[];
99 
100     ScHTMLGraphList     aGraphList;
101     ScHTMLStyle         aHTMLStyle;
102     String              aBaseURL;
103     String              aStreamPath;
104     String              aCId;           // Content-Id fuer Mail-Export
105     OutputDevice*       pAppWin;        // fuer Pixelei
106     SvStringsSortDtor*  pSrcArr;        // fuer CopyLocalFileToINet
107     SvStringsSortDtor*  pDestArr;
108     String              aNonConvertibleChars;   // collect nonconvertible characters
109     rtl_TextEncoding    eDestEnc;
110     SCTAB               nUsedTables;
111     short               nIndent;
112     sal_Char            sIndent[nIndentMax+1];
113     sal_Bool                bAll;           // ganzes Dokument
114     sal_Bool                bTabHasGraphics;
115     sal_Bool                bTabAlignedLeft;
116     sal_Bool                bCalcAsShown;
117     sal_Bool                bCopyLocalFileToINet;
118     sal_Bool                bTableDataWidth;
119     sal_Bool                bTableDataHeight;
120 
121     const SfxItemSet&   PageDefaults( SCTAB nTab );
122 
123     void                WriteBody();
124     void                WriteHeader();
125     void                WriteOverview();
126     void                WriteTables();
127     void                WriteCell( SCCOL nCol, SCROW nRow, SCTAB nTab );
128     void                WriteGraphEntry( ScHTMLGraphEntry* );
129     void                WriteImage( String& rLinkName,
130                                     const Graphic&, const ByteString& rImgOptions,
131                                     sal_uLong nXOutFlags = 0 );
132                             // nXOutFlags fuer XOutBitmap::WriteGraphic
133 
134                         // write to stream if and only if URL fields in edit cell
135     sal_Bool                WriteFieldText( const ScEditCell* pCell );
136 
137                         // kopiere ggfs. eine lokale Datei ins Internet
138     sal_Bool                CopyLocalFileToINet( String& rFileNm,
139                             const String& rTargetNm, sal_Bool bFileToFile = sal_False );
HasCId()140     sal_Bool                HasCId() { return aCId.Len() > 0; }
141     void                MakeCIdURL( String& rURL );
142 
143     void                PrepareGraphics( ScDrawLayer*, SCTAB nTab,
144                                         SCCOL nStartCol, SCROW nStartRow,
145                                         SCCOL nEndCol, SCROW nEndRow );
146     void                FillGraphList( const SdrPage*, SCTAB nTab,
147                                         SCCOL nStartCol, SCROW nStartRow,
148                                         SCCOL nEndCol, SCROW nEndRow );
149 
150     void                BorderToStyle( ByteString& rOut, const char* pBorderName,
151                                        const SvxBorderLine* pLine, bool& bInsertSemicolon );
152 
153     sal_uInt16              GetFontSizeNumber( sal_uInt16 nHeight );
154     const char*         GetFontSizeCss( sal_uInt16 nHeight );
155     sal_uInt16              ToPixel( sal_uInt16 nTwips );
156     Size                MMToPixel( const Size& r100thMMSize );
157     void                IncIndent( short nVal );
GetIndentStr()158     const sal_Char*         GetIndentStr() { return sIndent; }
159 
160 public:
161                         ScHTMLExport( SvStream&, const String&, ScDocument*, const ScRange&,
162                                         sal_Bool bAll, const String& aStreamPath );
163     virtual             ~ScHTMLExport();
164     sal_uLong               Write();
GetNonConvertibleChars() const165     const String&       GetNonConvertibleChars() const
166                             { return aNonConvertibleChars; }
167 };
168 
169 #endif
170 
171