rendered paste body#include "pd_Document.h"
#include "PDFS.h"
#include "xap_Module.h"
#include <libxml/parser.h>
#include <libxml/tree.h>
/* 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#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 IE_Imp_PDFS::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_XML iia(getDoc(), true);
// rval = iia.importFile(static_cast<const UT_ByteBuf*>(&bb));
rval = importFile(&bb);
// rval = IE_Imp_XML::importFile(static_cast<const UT_ByteBuf*>(&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;
}