Commit 42770e5f authored by Jeff Muizelaar's avatar Jeff Muizelaar

2006-12-28 Brad Taylor <brad@getcoded.net>

	* poppler/glib/poppler-document.h:
	* poppler/glib/poppler-document.cc: Add poppler_document_new_from_data
	  to allow loading PDFs out of memory.
parent 6fedd991
2006-12-28 Brad Taylor <brad@getcoded.net>
* poppler/glib/poppler-document.h:
* poppler/glib/poppler-document.cc: Add poppler_document_new_from_data
to allow loading PDFs out of memory.
2006-12-28 Albert Astals Cid <aacid@kde.org>
* qt4/src/poppler-embeddedfile.cc:
......
......@@ -61,6 +61,48 @@ struct _PopplerDocumentClass
G_DEFINE_TYPE (PopplerDocument, poppler_document, G_TYPE_OBJECT);
static PopplerDocument *
_poppler_document_new_from_pdfdoc (PDFDoc *newDoc,
GError **error)
{
PopplerDocument *document;
int err;
document = (PopplerDocument *) g_object_new (POPPLER_TYPE_DOCUMENT, NULL, NULL);
if (!newDoc->isOk()) {
err = newDoc->getErrorCode();
delete newDoc;
if (err == errEncrypted) {
g_set_error (error, POPPLER_ERROR,
POPPLER_ERROR_ENCRYPTED,
"Document is encrypted.");
} else {
g_set_error (error, G_FILE_ERROR,
G_FILE_ERROR_FAILED,
"Failed to load document from data (error %d)'\n",
err);
}
return NULL;
}
document->doc = newDoc;
#if defined (HAVE_CAIRO)
document->output_dev = new CairoOutputDev ();
#elif defined (HAVE_SPLASH)
SplashColor white;
white[0] = 255;
white[1] = 255;
white[2] = 255;
document->output_dev = new SplashOutputDev(splashModeRGB8, 4, gFalse, white);
#endif
document->output_dev->startDoc(document->doc->getXRef ());
return document;
}
/**
* poppler_document_new_from_file:
* @uri: uri of the file to load
......@@ -78,15 +120,12 @@ poppler_document_new_from_file (const char *uri,
const char *password,
GError **error)
{
PopplerDocument *document;
PDFDoc *newDoc;
GooString *filename_g;
GooString *password_g;
int err;
char *filename;
document = (PopplerDocument *) g_object_new (POPPLER_TYPE_DOCUMENT, NULL, NULL);
if (!globalParams) {
globalParams = new GlobalParams("/etc/xpdfrc");
}
......@@ -106,38 +145,52 @@ poppler_document_new_from_file (const char *uri,
if (password_g)
delete password_g;
if (!newDoc->isOk()) {
err = newDoc->getErrorCode();
delete newDoc;
if (err == errEncrypted) {
g_set_error (error, POPPLER_ERROR,
POPPLER_ERROR_ENCRYPTED,
"Document is encrypted.");
} else {
g_set_error (error, G_FILE_ERROR,
G_FILE_ERROR_FAILED,
"Failed to load document (error %d) '%s'\n",
err,
uri);
}
return _poppler_document_new_from_pdfdoc (newDoc, error);
}
return NULL;
/**
* poppler_document_new_from_data:
* @data: the pdf data contained in a char array
* @length: the length of #data
* @password: password to unlock the file with, or %NULL
* @error: Return location for an error, or %NULL
*
* Creates a new #PopplerDocument. If %NULL is returned, then @error will be
* set. Possible errors include those in the #POPPLER_ERROR and #G_FILE_ERROR
* domains.
*
* Return value: A newly created #PopplerDocument, or %NULL
**/
PopplerDocument *
poppler_document_new_from_data (char *data,
int length,
const char *password,
GError **error)
{
Object obj;
PDFDoc *newDoc;
MemStream *str;
GooString *password_g;
int err;
char *filename;
if (!globalParams) {
globalParams = new GlobalParams("/etc/xpdfrc");
}
// create stream
obj.initNull();
str = new MemStream(data, 0, length, &obj);
document->doc = newDoc;
password_g = NULL;
if (password != NULL)
password_g = new GooString (password);
#if defined (HAVE_CAIRO)
document->output_dev = new CairoOutputDev ();
#elif defined (HAVE_SPLASH)
SplashColor white;
white[0] = 255;
white[1] = 255;
white[2] = 255;
document->output_dev = new SplashOutputDev(splashModeRGB8, 4, gFalse, white);
#endif
document->output_dev->startDoc(document->doc->getXRef ());
newDoc = new PDFDoc(str, password_g, password_g);
if (password_g)
delete password_g;
return document;
return _poppler_document_new_from_pdfdoc (newDoc, error);
}
/**
......
......@@ -92,6 +92,10 @@ GType poppler_document_get_type (void) G_GNUC_CONST;
PopplerDocument *poppler_document_new_from_file (const char *uri,
const char *password,
GError **error);
PopplerDocument *poppler_document_new_from_data (char *data,
int length,
const char *password,
GError **error);
gboolean poppler_document_save (PopplerDocument *document,
const char *uri,
GError **error);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment