Hi,
I made some changes to the recent patch. I removed the function setID().
Please let me know when you commit this patch.
Thanks & regards
A Srinivas
Index: poppler/PDFDoc.h
===================================================================
--- poppler/PDFDoc.h (revision 208)
+++ 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/PDFDoc.cc
===================================================================
--- poppler/PDFDoc.cc (revision 208)
+++ poppler/PDFDoc.cc (working copy)
@@ -445,6 +445,44 @@
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.isNull())
+ {
+ obj.free();
+ return NULL;
+ }
+
+ Object val1,val2;
+ obj.arrayGet(0,&val1);
+ obj.arrayGet(1,&val2);
+ obj.free();
+
+ char tmpid[33];
+ get_id(val1.getString()->getCString(),tmpid);
+ permanent_id->append(tmpid,32);
+ get_id(val2.getString()->getCString(),tmpid);
+ update_id->append(tmpid,32);
+
+ val1.free();
+ val2.free();
+ return true;
+}
int PDFDoc::saveAs(GooString *name, PDFWriteMode mode) {
FILE *f;
OutStream *outStr;
Index: glib/poppler.h
===================================================================
--- glib/poppler.h (revision 208)
+++ 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: glib/poppler-document.cc
===================================================================
--- glib/poppler-document.cc (revision 208)
+++ 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,83 @@
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 the ID of the PDF Document, if Document contains the ID
+ *
+ * Return value: a gboolean. %TRUE if document contains an id else %FALSE
+ */
gboolean
+poppler_document_get_id (PopplerDocument *document,PopplerDocumentId *documentid)
+{
+ GooString permanent_id,update_id;
+
+ if (document->doc->getID(&permanent_id,&update_id)) {
+ g_stpcpy(documentid->permanent_id,permanent_id.getCString());
+ g_stpcpy(documentid->update_id,update_id.getCString());
+
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+gboolean
_poppler_convert_pdf_date_to_gtime (GooString *date,
time_t *gdate)
{
Index: glib/poppler-document.h
===================================================================
--- glib/poppler-document.h (revision 208)
+++ 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,
@@ -122,6 +126,14 @@
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 *documentid);
+
/* Interface for getting the Index of a poppler_document */
#define POPPLER_TYPE_INDEX_ITER (poppler_index_iter_get_type ())
GType poppler_index_iter_get_type (void) G_GNUC_CONST;
_______________________________________________
poppler mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/poppler