#include "pd_Document.h" #include "PDFS.h" #include "xap_Module.h" #include #include /* XPDF/Poppler includes */ #include "GlobalParams.h" #include "Object.h" #include "Stream.h" #include "Array.h" #include "Dict.h" #include "XRef.h" #include "Catalog.h" #include "Page.h" #include "PDFDoc.h" #include "poppler/SVGOutputDev.h" #include "ie_imp_XML.h" #include "ie_imp.h" /*#include #include #include #include "ie_imp_Text.h" */ #include "ut_assert.h" #include "ut_debugmsg.h" #include "ut_exception.h" #include "ut_types.h" #include "ut_base64.h" #include "ut_bytebuf.h" #include "ut_path.h" #include "ut_misc.h" #include "ut_string.h" #include "ut_string_class.h" IE_Imp_PDFS::IE_Imp_PDFS(PD_Document * pDocument) : IE_Imp_AbiWord_1(pDocument) { } IE_Imp_PDFS::~IE_Imp_PDFS() { } UT_Error importFile(const char * szFilename) { xmlDocPtr XMLdoc; UT_Error rval = UT_ERROR; GooString * fileName; PDFDoc * doc; fileName = new GooString(szFilename); doc = new PDFDoc(fileName); XMLdoc = xmlNewDoc(BAD_CAST "1.0"); SVGOutputDev *SVGOut = new SVGOutputDev("filename->getCString", XMLdoc); doc->displayPages(SVGOut, 1, doc->getNumPages(), 72, 72, 0, gTrue, gFalse, gFalse); xmlBufferPtr xbp = xmlBufferCreate(); xmlOutputBufferPtr xobp = xmlOutputBufferCreateBuffer (xbp, NULL); xmlSaveFileTo(xobp, XMLdoc,"UTF-8"); UT_ByteBuf bb (0); bb.append(xobp->buffer->content,xobp->buffer->use); xmlFreeDoc(XMLdoc); xmlCleanupParser(); IE_Imp_AbiWord_1 iia(getDoc()); rval = iia.importFile(static_cast(&bb)); // rval = IE_Imp_XML::importFile(static_cast(&bb)); delete SVGOut; delete fileName; return rval; } /**************************************************************** The input sniffing code ****************************************************************/ IE_Imp_PDFS_Sniffer::IE_Imp_PDFS_Sniffer() : IE_ImpSniffer("application/pdf", false) { } UT_Confidence_t IE_Imp_PDFS_Sniffer::supportsMIME (const char * szMIME) { if (strncmp (szMIME, "application/pdf", 15) == 0) { return UT_CONFIDENCE_PERFECT; } return UT_CONFIDENCE_ZILCH; } UT_Confidence_t IE_Imp_PDFS_Sniffer::recognizeContents (const char * szBuf, UT_uint32 iNumbytes) { if (!strncmp (szBuf, "%PDF-", 5)) return UT_CONFIDENCE_PERFECT; return UT_CONFIDENCE_ZILCH; } const char * IE_Imp_PDFS_Sniffer::recognizeContentsType (const char * szBuf, UT_uint32 iNumbytes) { return "none"; } UT_Confidence_t IE_Imp_PDFS_Sniffer::recognizeSuffix (const char * szSuffix) { if (!UT_stricmp (szSuffix, ".pdf")) return UT_CONFIDENCE_PERFECT; return UT_CONFIDENCE_ZILCH; } bool IE_Imp_PDFS_Sniffer::getDlgLabels (const char ** pszDesc, const char ** pszSuffixList, IEFileType * ft) { *pszDesc = "PDF-style (.pdf)"; *pszSuffixList = "*.pdf"; *ft = getFileType(); return true; } UT_Error IE_Imp_PDFS_Sniffer::constructImporter (PD_Document * pDocument, IE_Imp ** ppie) { IE_Imp_PDFS * p = new IE_Imp_PDFS(pDocument); *ppie = p; return UT_OK; } /*****************************************************************/ /* General plugin stuff */ /*****************************************************************/ ABI_PLUGIN_DECLARE("PDF-style") // we use a reference-counted sniffer static IE_Imp_PDFS_Sniffer * m_impSniffer = 0; ABI_FAR_CALL int abi_plugin_register (XAP_ModuleInfo * mi) { if (!m_impSniffer) { m_impSniffer = new IE_Imp_PDFS_Sniffer (); } else { m_impSniffer->ref(); } mi->name = "PDF Import Filter with style analysis"; mi->desc = "Import Adobe PDF Documents and try to infer the structure"; mi->version = ABI_VERSION_STRING; mi->author = "Jauco Noordzij"; mi->usage = "No Usage"; IE_Imp::registerImporter (m_impSniffer); return 1; } ABI_FAR_CALL int abi_plugin_unregister (XAP_ModuleInfo * mi) { mi->name = 0; mi->desc = 0; mi->version = 0; mi->author = 0; mi->usage = 0; UT_ASSERT (m_impSniffer); IE_Imp::unregisterImporter (m_impSniffer); if (!m_impSniffer->unref()) { m_impSniffer = 0; } return 1; } ABI_FAR_CALL int abi_plugin_supports_version (UT_uint32 major, UT_uint32 minor, UT_uint32 release) { return 1; }