Hi Alona, On Mon, Oct 24, 2011 at 04:41:50PM -0400, Alona Rossen wrote: > metadata listed under File->Properties->Statistics in OpenOffice (number > of pages, paragraph count, word count, etc).
I see I didn't include those in the example. See the version I attach now. Regards -- Ariel Constenla-Haile La Plata, Argentina
#define C2U( constAsciiStr ) \ ( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( constAsciiStr ) ) ) #define U2C( ouString ) \ ( ::rtl::OUStringToOString( ouString, RTL_TEXTENCODING_UTF8 ).getStr() ) // ------------------------------------------------------------------------------------- #include <vector> #include <iostream> #include <cstdio> #include <osl/file.hxx> #include <cppuhelper/bootstrap.hxx> #include <com/sun/star/beans/PropertyValue.hpp> #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> #include <com/sun/star/frame/XComponentLoader.hpp> #include <com/sun/star/frame/FrameSearchFlag.hpp> #include <com/sun/star/uno/Reference.h> #include <com/sun/star/uno/XComponentContext.hpp> using namespace ::com::sun::star; int SAL_CALL main ( const int argc, const char* argv[] ) { int ret = 0; if ( argc != 2 ) { std::cerr << "Usage: " << std::endl << " " << argv[0] << " DOC_TO_LOAD" << std::endl << "where " << std::endl << " DOC_TO_LOAD is the system path of the document to load" << std::endl; return 1; } rtl::OUString path = rtl::OUString::createFromAscii( argv[1] ); rtl::OUString path_url; if ( osl_File_E_None != osl_getFileURLFromSystemPath( path.pData, &path_url.pData ) ) { std::cerr << "Can not convert " << argv[1] << " to URL." << std::endl; return 1; } try { uno::Reference< uno::XComponentContext > rxContext ( ::cppu::bootstrap() ); uno::Reference< frame::XComponentLoader > rxComponentLoader( rxContext->getServiceManager()->createInstanceWithContext( C2U( "com.sun.star.frame.Desktop" ), rxContext ), uno::UNO_QUERY ); uno::Reference< lang::XComponent > xComponent = rxComponentLoader->loadComponentFromURL( path_url, C2U( "_default" ), frame::FrameSearchFlag::ALL, uno::Sequence< beans::PropertyValue >() ); uno::Reference< document::XDocumentPropertiesSupplier> xDocPropsSup( xComponent, uno::UNO_QUERY ); if ( !xDocPropsSup.is() ) { std::cerr << "No Document Props. Supplier!" << std::endl; return 1; } uno::Reference< document::XDocumentProperties > xDocProps = xDocPropsSup->getDocumentProperties(); if ( !xDocProps.is() ) { std::cerr << "No Document Properties!" << std::endl; return 1; } // Attributes rtl::OUString Title = xDocProps->getTitle(); rtl::OUString Subject = xDocProps->getSubject(); rtl::OUString Description = xDocProps->getDescription(); rtl::OUString Generator = xDocProps->getGenerator(); rtl::OUString Author = xDocProps->getAuthor(); util::DateTime CreationDate = xDocProps->getCreationDate(); rtl::OUString ModifiedBy = xDocProps->getModifiedBy(); util::DateTime ModificationDate = xDocProps->getModificationDate(); uno::Sequence< ::rtl::OUString > Keywords = xDocProps->getKeywords(); lang::Locale Language = xDocProps->getLanguage(); rtl::OUString PrintedBy = xDocProps->getPrintedBy(); util::DateTime PrintDate = xDocProps->getPrintDate(); rtl::OUString TemplateName = xDocProps->getTemplateName(); rtl::OUString TemplateURL = xDocProps->getTemplateURL(); util::DateTime TemplateDate = xDocProps->getTemplateDate(); rtl::OUString AutoloadURL = xDocProps->getAutoloadURL(); sal_Int32 AutoloadSecs = xDocProps->getAutoloadSecs(); rtl::OUString DefaultTarget = xDocProps->getDefaultTarget(); uno::Sequence< beans::NamedValue > DocumentStatistics = xDocProps->getDocumentStatistics(); sal_Int32 nPageCount, nTableCount, nImageCount, nObjectCount, nParagraphCount, nWordCount, nCharacterCount; nPageCount = nTableCount = nImageCount = nObjectCount = nParagraphCount = nWordCount = nCharacterCount = 0; for ( sal_Int32 n = 0; n < DocumentStatistics.getLength(); n++ ) { rtl::OUString sName = DocumentStatistics[n].Name; uno::Any aValue = DocumentStatistics[n].Value; if ( sName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "PageCount" ) ) ) aValue >>= nPageCount; else if ( sName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "TableCount" ) ) ) aValue >>= nTableCount; else if ( sName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "ImageCount" ) ) ) aValue >>= nImageCount; else if ( sName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "ObjectCount" ) ) ) aValue >>= nObjectCount; else if ( sName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "ParagraphCount" ) ) ) aValue >>= nParagraphCount; else if ( sName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "WordCount" ) ) ) aValue >>= nWordCount; else if ( sName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "CharacterCount" ) ) ) aValue >>= nCharacterCount; } std::cout << "PageCount " << nPageCount << std::endl; std::cout << "TableCount " << nTableCount << std::endl; std::cout << "ImageCount " << nImageCount << std::endl; std::cout << "ObjectCount " << nObjectCount << std::endl; std::cout << "ParagraphCount " << nParagraphCount << std::endl; std::cout << "WordCount " << nWordCount << std::endl; std::cout << "CharacterCount " << nCharacterCount << std::endl; sal_Int16 EditingCycles = xDocProps->getEditingCycles(); sal_Int32 EditingDuration = xDocProps->getEditingDuration(); std::cout << "Title : " << U2C( Title ) << std::endl; std::cout << "Subject : " << U2C( Subject ) << std::endl; std::cout << "Description : " << U2C( Description ) << std::endl; std::cout << "Generator : " << U2C( Generator ) << std::endl; std::cout << "Author : " << U2C( Author ) << std::endl; std::cout << "ModifiedBy : " << U2C( ModifiedBy ) << std::endl; std::cout << "PrintedBy : " << U2C( PrintedBy ) << std::endl; std::cout << "TemplateName : " << U2C( TemplateName ) << std::endl; std::cout << "TemplateURL : " << U2C( TemplateURL ) << std::endl; std::cout << "AutoloadURL : " << U2C( AutoloadURL ) << std::endl; } catch ( uno::RuntimeException& e ) { ret = 1; OSL_ASSERT ( false ); } catch ( uno::Exception& e ) { ret = 1; OSL_ASSERT ( false ); } return ret; } // kate: indent-mode cstyle; space-indent on; indent-width 4;
pgpvD6TnZrLgh.pgp
Description: PGP signature