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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_xmloff.hxx"
26 #include <rtl/ustrbuf.hxx>
27 #include <com/sun/star/io/XInputStream.hpp>
28 #include <xmloff/xmluconv.hxx>
29 #include <xmloff/xmlexp.hxx>
30 #include "xmloff/xmlnmspe.hxx"
31 #include "XMLBase64Export.hxx"
32
33 using namespace ::com::sun::star::uno;
34 using namespace ::com::sun::star::io;
35 using ::rtl::OUString;
36 using ::rtl::OUStringBuffer;
37
38 #define INPUT_BUFFER_SIZE 54
39 #define OUTPUT_BUFFER_SIZE 72
40
XMLBase64Export(SvXMLExport & rExp)41 XMLBase64Export::XMLBase64Export( SvXMLExport& rExp ) :
42 rExport( rExp ){
43 }
44
exportXML(const Reference<XInputStream> & rIn)45 sal_Bool XMLBase64Export::exportXML( const Reference < XInputStream> & rIn )
46 {
47 sal_Bool bRet = sal_True;
48 try
49 {
50 Sequence < sal_Int8 > aInBuff( INPUT_BUFFER_SIZE );
51 OUStringBuffer aOutBuff( OUTPUT_BUFFER_SIZE );
52 sal_Int32 nRead;
53 do
54 {
55 nRead = rIn->readBytes( aInBuff, INPUT_BUFFER_SIZE );
56 if( nRead > 0 )
57 {
58 GetExport().GetMM100UnitConverter().encodeBase64( aOutBuff,
59 aInBuff );
60 GetExport().Characters( aOutBuff.makeStringAndClear() );
61 if( nRead == INPUT_BUFFER_SIZE )
62 GetExport().IgnorableWhitespace();
63 }
64 }
65 while( nRead == INPUT_BUFFER_SIZE );
66 }
67 catch( ... )
68 {
69 bRet = sal_False;
70 }
71
72 return bRet;
73 }
74
exportElement(const Reference<XInputStream> & rIn,sal_uInt16 nNamespace,enum::xmloff::token::XMLTokenEnum eName)75 sal_Bool XMLBase64Export::exportElement(
76 const Reference < XInputStream > & rIn,
77 sal_uInt16 nNamespace,
78 enum ::xmloff::token::XMLTokenEnum eName )
79 {
80 SvXMLElementExport aElem( GetExport(), nNamespace, eName, sal_True,
81 sal_True );
82 return exportXML( rIn );
83 }
84
exportOfficeBinaryDataElement(const Reference<XInputStream> & rIn)85 sal_Bool XMLBase64Export::exportOfficeBinaryDataElement(
86 const Reference < XInputStream > & rIn )
87 {
88 return exportElement( rIn, XML_NAMESPACE_OFFICE,
89 ::xmloff::token::XML_BINARY_DATA );
90 }
91
92