Kaydet (Commit) 15174177 authored tarafından Markus Mohrhard's avatar Markus Mohrhard

detect MSO 2007 OOXML documents

Change-Id: I4052c6f1e5dde71ce4cede1ec9a313f461861d71
üst 180e1de3
......@@ -234,6 +234,8 @@ public:
FastParser* createParser() const;
bool isMSO2007Document() const;
protected:
virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >
implGetInputStream( utl::MediaDescriptor& rMediaDesc ) const SAL_OVERRIDE;
......
......@@ -206,7 +206,8 @@ XmlFilterBase::XmlFilterBase( const Reference< XComponentContext >& rxContext )
FilterBase( rxContext ),
mxImpl( new XmlFilterBaseImpl( rxContext ) ),
mnRelId( 1 ),
mnMaxDocId( 0 )
mnMaxDocId( 0 ),
mbMSO2007(false)
{
}
......@@ -222,6 +223,35 @@ XmlFilterBase::~XmlFilterBase()
mxImpl->maFastParser.setDocumentHandler( 0 );
}
namespace {
bool is2007MSODocument(Reference<XDocumentProperties> xDocProps)
{
if (!xDocProps->getGenerator().startsWithIgnoreAsciiCase("Microsoft"))
return false;
uno::Reference<beans::XPropertyAccess> xUserDefProps(xDocProps->getUserDefinedProperties(), uno::UNO_QUERY);
if (!xUserDefProps.is())
return false;
comphelper::SequenceAsHashMap aUserDefinedProperties(xUserDefProps->getPropertyValues());
comphelper::SequenceAsHashMap::iterator it = aUserDefinedProperties.find("AppVersion");
if (it == aUserDefinedProperties.end())
return false;
OUString aValue;
if (!(it->second >>= aValue))
return false;
if (!aValue.startsWithIgnoreAsciiCase("12."))
return false;
SAL_WARN("oox", "a MSO 2007 document");
return true;
}
}
void XmlFilterBase::importDocumentProperties()
{
Reference< XMultiServiceFactory > xFactory( getComponentContext()->getServiceManager(), UNO_QUERY );
......@@ -238,7 +268,9 @@ void XmlFilterBase::importDocumentProperties()
xContext);
Reference< XOOXMLDocumentPropertiesImporter > xImporter( xTemp, UNO_QUERY );
Reference< XDocumentPropertiesSupplier > xPropSupplier( xModel, UNO_QUERY);
xImporter->importProperties( xDocumentStorage, xPropSupplier->getDocumentProperties() );
Reference< XDocumentProperties > xDocProps = xPropSupplier->getDocumentProperties();
xImporter->importProperties( xDocumentStorage, xDocProps );
mbMSO2007 = is2007MSODocument(xDocProps);
}
FastParser* XmlFilterBase::createParser() const
......@@ -880,6 +912,11 @@ StorageRef XmlFilterBase::implCreateStorage( const Reference< XStream >& rxOutSt
return StorageRef( new ZipStorage( getComponentContext(), rxOutStream ) );
}
bool XmlFilterBase::isMSO2007Document() const
{
return mbMSO2007;
}
} // namespace core
} // namespace oox
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment