Hi I made some minor changes to previous patch. I attached a new patch with this mail.
Thanks -- A srinivas
Index: poppler-0.14.0/poppler/PDFDoc.h =================================================================== --- poppler-0.14.0/poppler/PDFDoc.h (revision 210) +++ poppler-0.14.0/poppler/PDFDoc.h (working copy) @@ -206,6 +206,9 @@ int getPDFMajorVersion() { return pdfMajorVersion; } int getPDFMinorVersion() { return pdfMinorVersion; } + // Return the PDF ID in the trailer dictionary (if any). + GBool getID(GooString *permanent_id, GooString *update_id); + // Save this file with another name. int saveAs(GooString *name, PDFWriteMode mode=writeStandard); // Save this file in the given output stream. Index: poppler-0.14.0/poppler/PDFDoc.cc =================================================================== --- poppler-0.14.0/poppler/PDFDoc.cc (revision 210) +++ poppler-0.14.0/poppler/PDFDoc.cc (working copy) @@ -445,6 +445,49 @@ return lin; } +static void +get_id(char* encodedid,char *pdfid) { + sprintf(pdfid,"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", encodedid[0] & 0xff,encodedid[1] & 0xff, + encodedid[2] & 0xff,encodedid[3] & 0xff, + encodedid[4] & 0xff,encodedid[5] & 0xff, + encodedid[6] & 0xff,encodedid[7] & 0xff, + encodedid[8] & 0xff,encodedid[9] & 0xff, + encodedid[10] & 0xff,encodedid[11] & 0xff, + encodedid[12] & 0xff,encodedid[13] & 0xff, + encodedid[14] & 0xff,encodedid[15] & 0xff); +} + +GBool PDFDoc::getID(GooString *permanent_id,GooString *update_id) { + + Object obj; + xref->getTrailerDict()->dictLookup("ID", &obj); + + if (!obj.isArray()) + { + obj.free(); + return false; + } + + Object val1,val2; + obj.arrayGet(0,&val1); + obj.arrayGet(1,&val2); + obj.free(); + + char tmpid[33]; + if (val1.isString() && val2.isString()) { + get_id(val1.getString()->getCString(),tmpid); + permanent_id->Set(tmpid,32); + get_id(val2.getString()->getCString(),tmpid); + update_id->Set(tmpid,32); + } else { + return false; + } + + val1.free(); + val2.free(); + return true; +} + int PDFDoc::saveAs(GooString *name, PDFWriteMode mode) { FILE *f; OutStream *outStr; Index: poppler-0.14.0/glib/poppler.h =================================================================== --- poppler-0.14.0/glib/poppler.h (revision 210) +++ poppler-0.14.0/glib/poppler.h (working copy) @@ -80,6 +80,7 @@ } PopplerSelectionStyle; typedef struct _PopplerDocument PopplerDocument; +typedef struct _PopplerDocumentId PopplerDocumentId; typedef struct _PopplerIndexIter PopplerIndexIter; typedef struct _PopplerFontsIter PopplerFontsIter; typedef struct _PopplerLayersIter PopplerLayersIter; Index: poppler-0.14.0/glib/poppler-document.cc =================================================================== --- poppler-0.14.0/glib/poppler-document.cc (revision 210) +++ poppler-0.14.0/glib/poppler-document.cc (working copy) @@ -54,7 +54,9 @@ PROP_PAGE_MODE, PROP_VIEWER_PREFERENCES, PROP_PERMISSIONS, - PROP_METADATA + PROP_METADATA, + PROP_PERMANENT_ID, + PROP_UPDATE_ID }; static void poppler_document_layers_free (PopplerDocument *document); @@ -762,6 +764,24 @@ } } break; + case PROP_PERMANENT_ID: + { + GooString permanent_id,update_id; + if (document->doc->getID(&permanent_id,&update_id)) + { + g_value_set_string(value,permanent_id.getCString()); + } + break; + } + case PROP_UPDATE_ID: + { + GooString permanent_id,update_id; + if (document->doc->getID(&permanent_id,&update_id)) + { + g_value_set_string(value,update_id.getCString()); + } + break; + } default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -931,6 +951,22 @@ "Embedded XML metadata", NULL, G_PARAM_READABLE)); + g_object_class_install_property + (G_OBJECT_CLASS (klass), + PROP_PERMANENT_ID, + g_param_spec_string ("permanent-id", + "Permanent Id", + "Permanent Id of the PDF Document", + NULL, + G_PARAM_READABLE)); + g_object_class_install_property + (G_OBJECT_CLASS (klass), + PROP_UPDATE_ID, + g_param_spec_string ("update-id", + "Update Id", + "Update Id of the PDF Document", + NULL, + G_PARAM_READABLE)); } static void @@ -1928,7 +1964,81 @@ return NULL; } +/* PopplerDocumentId type */ +POPPLER_DEFINE_BOXED_TYPE (PopplerDocumentId, poppler_document_id, + poppler_document_id_copy, + poppler_document_id_free) + +/** + * poppler_document_id_new: + * + * creates a new #PopplerDocumentId + * + **/ +PopplerDocumentId * +poppler_document_id_new (void) +{ + return g_new0 (PopplerDocumentId, 1); +} + +/** + * poppler_document_id_copy: + * @id: a #PopplerDocumentId + * + * creates a new #PopplerDocumentId as a copy of @id, it must be freed + * with poppler_document_id_free() + **/ +PopplerDocumentId * +poppler_document_id_copy (PopplerDocumentId *id) +{ + PopplerDocumentId *new_id; + + g_return_val_if_fail (id != NULL, NULL); + + new_id = g_new (PopplerDocumentId, 1); + *new_id = *id; + + return new_id; +} + +/** + * poppler_document_id_free: + * @id: a #PopplerDocumentId + * + * Frees @id + * + **/ +void +poppler_document_id_free (PopplerDocumentId *id) +{ + g_free (id); +} + +/** + * poppler_document_get_id: + * @document: a #PopplerDocument + * @documentid: a #PopplerDocumentId + * + * Returns true if the pdf file contains the ID + * + * Return value: a gboolean. %TRUE if document contains an ID else %FALSE + */ gboolean +poppler_document_get_id (PopplerDocument *document,PopplerDocumentId *id) +{ + GooString permanent_id,update_id; + + if (document->doc->getID(&permanent_id,&update_id)) { + g_stpcpy(id->permanent_id,permanent_id.getCString()); + g_stpcpy(id->update_id,update_id.getCString()); + + return TRUE; + } else { + return FALSE; + } +} + +gboolean _poppler_convert_pdf_date_to_gtime (GooString *date, time_t *gdate) { Index: poppler-0.14.0/glib/poppler-document.h =================================================================== --- poppler-0.14.0/glib/poppler-document.h (revision 210) +++ poppler-0.14.0/glib/poppler-document.h (working copy) @@ -89,8 +89,12 @@ } PopplerPermissions; +struct _PopplerDocumentId +{ + gchar permanent_id[33]; + gchar update_id[33]; +}; - GType poppler_document_get_type (void) G_GNUC_CONST; PopplerDocument *poppler_document_new_from_file (const char *uri, const char *password, @@ -121,6 +125,13 @@ /* Form */ PopplerFormField *poppler_document_get_form_field (PopplerDocument *document, gint id); +/* Document Id */ +#define POPPLER_TYPE_DOCUMENT_ID (poppler_document_id_get_type ()) +GType poppler_document_id_get_type (void) G_GNUC_CONST; +PopplerDocumentId *poppler_document_id_new (void); +PopplerDocumentId *poppler_document_id_copy (PopplerDocumentId *id); +void poppler_document_id_free (PopplerDocumentId *id); +gboolean poppler_document_get_id (PopplerDocument *document,PopplerDocumentId *id); /* Interface for getting the Index of a poppler_document */ #define POPPLER_TYPE_INDEX_ITER (poppler_index_iter_get_type ())
_______________________________________________ poppler mailing list poppler@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/poppler