11#include <osl/diagnose.h>
13#include <com/sun/star/awt/XWindow.hpp>
14#include <com/sun/star/io/XInputStream.hpp>
15#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp>
16#include <com/sun/star/uno/Reference.h>
27#include <libwpd/libwpd.h>
28#include <libwpg/libwpg.h>
34using com::sun::star::awt::XWindow;
35using com::sun::star::document::XImporter;
36using com::sun::star::io::XInputStream;
37using com::sun::star::xml::sax::XFastDocumentHandler;
43 OdfDocumentHandler* pHandler,
const OdfStreamType streamType)
45 OdgGenerator exporter;
46 exporter.addDocumentHandler(pHandler, streamType);
48 libwpg::WPGFileFormat fileFormat = libwpg::WPG_AUTODETECT;
50 if (!libwpg::WPGraphics::isSupported(data.getDataStream()))
51 fileFormat = libwpg::WPG_WPG1;
53 return libwpg::WPGraphics::parse(data.getDataStream(), &exporter, fileFormat);
57 librevenge::RVNGBinaryData& output)
59 libwpg::WPGFileFormat fileFormat = libwpg::WPG_AUTODETECT;
61 if (!libwpg::WPGraphics::isSupported(input.getDataStream()))
62 fileFormat = libwpg::WPG_WPG1;
64 librevenge::RVNGStringVector svgOutput;
65 librevenge::RVNGSVGDrawingGenerator aSVGGenerator(svgOutput,
"");
67 if (!libwpg::WPGraphics::parse(input.getDataStream(), &aSVGGenerator, fileFormat))
70 if (svgOutput.empty())
73 assert(1 == svgOutput.size());
76 output.append(
reinterpret_cast<const unsigned char*
>(svgOutput[0].cstr()), svgOutput[0].
size());
81 const css::uno::Sequence<css::beans::PropertyValue>& aDescriptor)
85 for (
const auto& rValue : aDescriptor)
87 if (rValue.Name ==
"InputStream")
88 rValue.Value >>= xInputStream;
89 else if (rValue.Name ==
"ParentWindow")
90 rValue.Value >>= xDialogParent;
92 if (!xInputStream.is())
102 libwpd::WPDConfidence confidence = libwpd::WPDocument::isFileFormatSupported(&input);
104 if (libwpd::WPD_CONFIDENCE_SUPPORTED_ENCRYPTION == confidence)
106 int unsuccessfulAttempts = 0;
111 if (!aPasswdDlg.
run())
115 if (libwpd::WPD_PASSWORD_MATCH_OK
116 == libwpd::WPDocument::verifyPassword(&input, aUtf8Passwd.getStr()))
119 unsuccessfulAttempts++;
120 if (unsuccessfulAttempts == 3)
127 =
mxContext->getServiceManager()->createInstanceWithContext(
128 "com.sun.star.comp.Writer.XMLOasisImporter",
mxContext);
129 assert(xInternalFilter);
130 css::uno::Reference<css::xml::sax::XFastDocumentHandler> xInternalHandler(xInternalFilter,
131 css::uno::UNO_QUERY);
132 assert(xInternalHandler);
136 xImporter->setTargetDocument(
mxDoc);
143 OdtGenerator collector;
144 collector.addDocumentHandler(&aHandler, ODF_FLAT_XML);
147 return libwpd::WPD_OK
148 == libwpd::WPDocument::parse(&input, &collector,
149 aUtf8Passwd.isEmpty() ?
nullptr : aUtf8Passwd.getStr());
170 sal_Int32
nLength = Descriptor.getLength();
175 if (Descriptor[
i].
Name ==
"TypeName")
177 else if (Descriptor[
i].
Name ==
"InputStream")
178 Descriptor[
i].Value >>= xInputStream;
181 if (!xInputStream.is())
187 libwpd::WPDConfidence confidence = libwpd::WPDocument::isFileFormatSupported(&input);
188 if (confidence == libwpd::WPD_CONFIDENCE_EXCELLENT
189 || confidence == libwpd::WPD_CONFIDENCE_SUPPORTED_ENCRYPTION)
193 Descriptor.realloc(
nLength + 1);
194 Descriptor.getArray()[location].Name =
"TypeName";
197 sTypeName =
"writer_WordPerfect_Document";
198 Descriptor.getArray()[location].Value <<= sTypeName;
213 return "com.sun.star.comp.Writer.WordPerfectImportFilter";
223 return {
"com.sun.star.document.ImportFilter",
"com.sun.star.document.ExtendedTypeDetection" };
226extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
228 css::uno::XComponentContext*
const context,
const css::uno::Sequence<css::uno::Any>&)
static bool handleEmbeddedWPGImage(const librevenge::RVNGBinaryData &input, librevenge::RVNGBinaryData &output)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_comp_Writer_WordPerfectImportFilter_get_implementation(css::uno::XComponentContext *const context, const css::uno::Sequence< css::uno::Any > &)
static bool handleEmbeddedWPGObject(const librevenge::RVNGBinaryData &data, OdfDocumentHandler *pHandler, const OdfStreamType streamType)
static weld::Window * GetFrameWeld(const css::uno::Reference< css::awt::XWindow > &rWindow)
OUString GetPassword() const
virtual short run() override
void SetMinLen(sal_uInt16 Len)
virtual void SAL_CALL cancel() override
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
virtual sal_Bool SAL_CALL filter(const css::uno::Sequence< css::beans::PropertyValue > &aDescriptor) override
css::uno::Reference< css::uno::XComponentContext > mxContext
css::uno::Reference< css::lang::XComponent > mxDoc
virtual void SAL_CALL initialize(const css::uno::Sequence< css::uno::Any > &aArguments) override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
bool importImpl(const css::uno::Sequence< css::beans::PropertyValue > &aDescriptor)
virtual void SAL_CALL setTargetDocument(const css::uno::Reference< css::lang::XComponent > &xDoc) override
virtual OUString SAL_CALL getImplementationName() override
virtual OUString SAL_CALL detect(css::uno::Sequence< css::beans::PropertyValue > &Descriptor) override
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)