sw/source/filter/ww8/docxexport.cxx | 62 ++++++++++++++++++++++++++++++++++++ sw/source/filter/ww8/docxexport.hxx | 3 + 2 files changed, 65 insertions(+)
New commits: commit a37043b8d1508b3a3a2844e9092e4af05d726f28 Author: sushil_shinde <sushil.shi...@synerzip.com> Date: Fri Dec 27 14:34:03 2013 +0530 fdo#72520 : Exporting embedding data folder from grab bag. Change-Id: I3eeff18f0f39f97c2d0fc95eba427b478c95e80d Reviewed-on: https://gerrit.libreoffice.org/7213 Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk> Tested-by: Miklos Vajna <vmik...@collabora.co.uk> diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx index ece1c41..e67b538 100644 --- a/sw/source/filter/ww8/docxexport.cxx +++ b/sw/source/filter/ww8/docxexport.cxx @@ -400,6 +400,8 @@ void DocxExport::ExportDocument_Impl() WriteActiveX(); + WriteEmbeddings(); + delete pStyles, pStyles = NULL; delete m_pSections, m_pSections = NULL; } @@ -1105,6 +1107,66 @@ void DocxExport::WriteActiveX() } } +void DocxExport::WriteEmbeddings() +{ + uno::Reference< beans::XPropertySet > xPropSet( pDoc->GetDocShell()->GetBaseModel(), uno::UNO_QUERY_THROW ); + + uno::Reference< beans::XPropertySetInfo > xPropSetInfo = xPropSet->getPropertySetInfo(); + OUString pName = UNO_NAME_MISC_OBJ_INTEROPGRABBAG; + if ( !xPropSetInfo->hasPropertyByName( pName ) ) + return; + + uno::Sequence< beans::PropertyValue > embeddingsList; + uno::Sequence< beans::PropertyValue > propList; + xPropSet->getPropertyValue( pName ) >>= propList; + for ( sal_Int32 nProp=0; nProp < propList.getLength(); ++nProp ) + { + OUString propName = propList[nProp].Name; + if ( propName == "OOXEmbeddings" ) + { + propList[nProp].Value >>= embeddingsList; + break; + } + } + for (sal_Int32 j = 0; j < embeddingsList.getLength(); j++) + { + OUString embeddingPath = embeddingsList[j].Name; + uno::Reference<io::XInputStream> embeddingsStream; + embeddingsList[j].Value >>= embeddingsStream; + if ( embeddingsStream.is() ) + { + uno::Reference< io::XOutputStream > xOutStream = GetFilter().openFragmentStream(embeddingPath, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + try + { + sal_Int32 nBufferSize = 512; + uno::Sequence< sal_Int8 > aDataBuffer(nBufferSize); + sal_Int32 nRead; + do + { + nRead = embeddingsStream->readBytes( aDataBuffer, nBufferSize ); + if( nRead ) + { + if( nRead < nBufferSize ) + { + nBufferSize = nRead; + aDataBuffer.realloc(nRead); + } + xOutStream->writeBytes( aDataBuffer ); + } + } + while( nRead ); + xOutStream->flush(); + } + catch(const uno::Exception&) + { + SAL_WARN("sw.ww8", "WriteEmbeddings() ::Failed to copy Inputstream to outputstream exception catched!"); + } + xOutStream->closeOutput(); + } + } +} + VMLExport& DocxExport::VMLExporter() { return *m_pVMLExport; diff --git a/sw/source/filter/ww8/docxexport.hxx b/sw/source/filter/ww8/docxexport.hxx index abf22eb..d371fa1 100644 --- a/sw/source/filter/ww8/docxexport.hxx +++ b/sw/source/filter/ww8/docxexport.hxx @@ -227,6 +227,9 @@ private: /// Write word/activeX/activeX[n].xml void WriteActiveX(); + /// Write word/embeddings/Worksheet[n].xlsx + void WriteEmbeddings(); + /// All xml namespaces to be used at the top of any text .xml file (main doc, headers, footers,...) sax_fastparser::XFastAttributeListRef MainXmlNamespaces( sax_fastparser::FSHelperPtr serializer ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits