All pastes #94858 Raw Edit

Someone

public text v1 · immutable
#94858 ·published 2006-07-21 16:07 UTC
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 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<const UT_ByteBuf*>(&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;
}