mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 19:08:59 +00:00
Add QPDFObjectHandle::getJSON()
This commit is contained in:
parent
651179b5da
commit
30a0c070e4
@ -1,5 +1,9 @@
|
|||||||
2018-12-18 Jay Berkenbilt <ejb@ql.org>
|
2018-12-18 Jay Berkenbilt <ejb@ql.org>
|
||||||
|
|
||||||
|
* New method QPDFObjectHandle::getJSON() returns a JSON object
|
||||||
|
with a partial representation of the object. See
|
||||||
|
QPDFObjectHandle.hh for a detailed description.
|
||||||
|
|
||||||
* Add a simple JSON serializer. This is not a complete or
|
* Add a simple JSON serializer. This is not a complete or
|
||||||
general-purpose JSON library. It allows assembly and serialization
|
general-purpose JSON library. It allows assembly and serialization
|
||||||
of JSON structures with some restrictions, which are described in
|
of JSON structures with some restrictions, which are described in
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include <qpdf/DLL.h>
|
#include <qpdf/DLL.h>
|
||||||
#include <qpdf/PointerHolder.hh>
|
#include <qpdf/PointerHolder.hh>
|
||||||
|
#include <qpdf/JSON.hh>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@ -62,6 +63,7 @@ class QPDFObject
|
|||||||
|
|
||||||
virtual ~QPDFObject() {}
|
virtual ~QPDFObject() {}
|
||||||
virtual std::string unparse() = 0;
|
virtual std::string unparse() = 0;
|
||||||
|
virtual JSON getJSON() = 0;
|
||||||
|
|
||||||
// Return a unique type code for the object
|
// Return a unique type code for the object
|
||||||
virtual object_type_e getTypeCode() const = 0;
|
virtual object_type_e getTypeCode() const = 0;
|
||||||
|
@ -733,6 +733,25 @@ class QPDFObjectHandle
|
|||||||
QPDF_DLL
|
QPDF_DLL
|
||||||
std::string unparseBinary();
|
std::string unparseBinary();
|
||||||
|
|
||||||
|
// Return encoded as JSON. For most object types, there is an
|
||||||
|
// obvious mapping. The JSON is generated as follows:
|
||||||
|
// * Names are encoded as strings representing the normalized value of
|
||||||
|
// getName()
|
||||||
|
// * Indirect references are encoded as strings containing "obj gen R"
|
||||||
|
// * Strings are encoded as UTF-8 strings with unrepresentable binary
|
||||||
|
// characters encoded as \uHHHH
|
||||||
|
// * Encoding streams just encodes the stream's dictionary; the stream
|
||||||
|
// data is not represented
|
||||||
|
// * Object types that are only valid in content streams (inline
|
||||||
|
// image, operator) as well as "reserved" objects are not
|
||||||
|
// representable and will be serialized as "null".
|
||||||
|
// If dereference_indirect is true and this is an indirect object,
|
||||||
|
// show the actual contents of the object. The effect of
|
||||||
|
// dereference_indirect applies only to this object. It is not
|
||||||
|
// recursive.
|
||||||
|
QPDF_DLL
|
||||||
|
JSON getJSON(bool dereference_indirect = false);
|
||||||
|
|
||||||
// Legacy helper methods for commonly performed operations on
|
// Legacy helper methods for commonly performed operations on
|
||||||
// pages. Newer code should use QPDFPageObjectHelper instead. The
|
// pages. Newer code should use QPDFPageObjectHelper instead. The
|
||||||
// specification and behavior of these methods are the same as the
|
// specification and behavior of these methods are the same as the
|
||||||
|
@ -1235,6 +1235,25 @@ QPDFObjectHandle::unparseBinary()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDFObjectHandle::getJSON(bool dereference_indirect)
|
||||||
|
{
|
||||||
|
if ((! dereference_indirect) && this->isIndirect())
|
||||||
|
{
|
||||||
|
return JSON::makeString(unparse());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this->m->reserved)
|
||||||
|
{
|
||||||
|
throw std::logic_error(
|
||||||
|
"QPDFObjectHandle: attempting to unparse a reserved object");
|
||||||
|
}
|
||||||
|
dereference();
|
||||||
|
return this->m->obj->getJSON();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObjectHandle
|
QPDFObjectHandle
|
||||||
QPDFObjectHandle::wrapInArray()
|
QPDFObjectHandle::wrapInArray()
|
||||||
{
|
{
|
||||||
|
@ -35,6 +35,18 @@ QPDF_Array::unparse()
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDF_Array::getJSON()
|
||||||
|
{
|
||||||
|
JSON j = JSON::makeArray();
|
||||||
|
for (std::vector<QPDFObjectHandle>::iterator iter = this->items.begin();
|
||||||
|
iter != this->items.end(); ++iter)
|
||||||
|
{
|
||||||
|
j.addArrayElement((*iter).getJSON());
|
||||||
|
}
|
||||||
|
return j;
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObject::object_type_e
|
QPDFObject::object_type_e
|
||||||
QPDF_Array::getTypeCode() const
|
QPDF_Array::getTypeCode() const
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,12 @@ QPDF_Bool::unparse()
|
|||||||
return (val ? "true" : "false");
|
return (val ? "true" : "false");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDF_Bool::getJSON()
|
||||||
|
{
|
||||||
|
return JSON::makeBool(this->val);
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObject::object_type_e
|
QPDFObject::object_type_e
|
||||||
QPDF_Bool::getTypeCode() const
|
QPDF_Bool::getTypeCode() const
|
||||||
{
|
{
|
||||||
|
@ -39,6 +39,20 @@ QPDF_Dictionary::unparse()
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDF_Dictionary::getJSON()
|
||||||
|
{
|
||||||
|
JSON j = JSON::makeDictionary();
|
||||||
|
for (std::map<std::string, QPDFObjectHandle>::iterator iter =
|
||||||
|
this->items.begin();
|
||||||
|
iter != this->items.end(); ++iter)
|
||||||
|
{
|
||||||
|
j.addDictionaryMember(QPDF_Name::normalizeName((*iter).first),
|
||||||
|
(*iter).second.getJSON());
|
||||||
|
}
|
||||||
|
return j;
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObject::object_type_e
|
QPDFObject::object_type_e
|
||||||
QPDF_Dictionary::getTypeCode() const
|
QPDF_Dictionary::getTypeCode() const
|
||||||
{
|
{
|
||||||
|
@ -17,6 +17,12 @@ QPDF_InlineImage::unparse()
|
|||||||
return this->val;
|
return this->val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDF_InlineImage::getJSON()
|
||||||
|
{
|
||||||
|
return JSON::makeNull();
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObject::object_type_e
|
QPDFObject::object_type_e
|
||||||
QPDF_InlineImage::getTypeCode() const
|
QPDF_InlineImage::getTypeCode() const
|
||||||
{
|
{
|
||||||
|
@ -17,6 +17,12 @@ QPDF_Integer::unparse()
|
|||||||
return QUtil::int_to_string(this->val);
|
return QUtil::int_to_string(this->val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDF_Integer::getJSON()
|
||||||
|
{
|
||||||
|
return JSON::makeInt(this->val);
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObject::object_type_e
|
QPDFObject::object_type_e
|
||||||
QPDF_Integer::getTypeCode() const
|
QPDF_Integer::getTypeCode() const
|
||||||
{
|
{
|
||||||
|
@ -44,6 +44,12 @@ QPDF_Name::unparse()
|
|||||||
return normalizeName(this->name);
|
return normalizeName(this->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDF_Name::getJSON()
|
||||||
|
{
|
||||||
|
return JSON::makeString(normalizeName(this->name));
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObject::object_type_e
|
QPDFObject::object_type_e
|
||||||
QPDF_Name::getTypeCode() const
|
QPDF_Name::getTypeCode() const
|
||||||
{
|
{
|
||||||
|
@ -10,6 +10,12 @@ QPDF_Null::unparse()
|
|||||||
return "null";
|
return "null";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDF_Null::getJSON()
|
||||||
|
{
|
||||||
|
return JSON::makeNull();
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObject::object_type_e
|
QPDFObject::object_type_e
|
||||||
QPDF_Null::getTypeCode() const
|
QPDF_Null::getTypeCode() const
|
||||||
{
|
{
|
||||||
|
@ -17,6 +17,12 @@ QPDF_Operator::unparse()
|
|||||||
return this->val;
|
return this->val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDF_Operator::getJSON()
|
||||||
|
{
|
||||||
|
return JSON::makeNull();
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObject::object_type_e
|
QPDFObject::object_type_e
|
||||||
QPDF_Operator::getTypeCode() const
|
QPDF_Operator::getTypeCode() const
|
||||||
{
|
{
|
||||||
|
@ -22,6 +22,12 @@ QPDF_Real::unparse()
|
|||||||
return this->val;
|
return this->val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDF_Real::getJSON()
|
||||||
|
{
|
||||||
|
return JSON::makeNumber(this->val);
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObject::object_type_e
|
QPDFObject::object_type_e
|
||||||
QPDF_Real::getTypeCode() const
|
QPDF_Real::getTypeCode() const
|
||||||
{
|
{
|
||||||
|
@ -12,6 +12,13 @@ QPDF_Reserved::unparse()
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDF_Reserved::getJSON()
|
||||||
|
{
|
||||||
|
throw std::logic_error("attempt to generate JSON from QPDF_Reserved");
|
||||||
|
return JSON::makeNull();
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObject::object_type_e
|
QPDFObject::object_type_e
|
||||||
QPDF_Reserved::getTypeCode() const
|
QPDF_Reserved::getTypeCode() const
|
||||||
{
|
{
|
||||||
|
@ -74,6 +74,12 @@ QPDF_Stream::unparse()
|
|||||||
QUtil::int_to_string(this->generation) + " R";
|
QUtil::int_to_string(this->generation) + " R";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDF_Stream::getJSON()
|
||||||
|
{
|
||||||
|
return this->stream_dict.getJSON();
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObject::object_type_e
|
QPDFObject::object_type_e
|
||||||
QPDF_Stream::getTypeCode() const
|
QPDF_Stream::getTypeCode() const
|
||||||
{
|
{
|
||||||
|
@ -122,6 +122,12 @@ QPDF_String::unparse()
|
|||||||
return unparse(false);
|
return unparse(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSON
|
||||||
|
QPDF_String::getJSON()
|
||||||
|
{
|
||||||
|
return JSON::makeString(getUTF8Val());
|
||||||
|
}
|
||||||
|
|
||||||
QPDFObject::object_type_e
|
QPDFObject::object_type_e
|
||||||
QPDF_String::getTypeCode() const
|
QPDF_String::getTypeCode() const
|
||||||
{
|
{
|
||||||
|
@ -12,6 +12,7 @@ class QPDF_Array: public QPDFObject
|
|||||||
QPDF_Array(std::vector<QPDFObjectHandle> const& items);
|
QPDF_Array(std::vector<QPDFObjectHandle> const& items);
|
||||||
virtual ~QPDF_Array();
|
virtual ~QPDF_Array();
|
||||||
virtual std::string unparse();
|
virtual std::string unparse();
|
||||||
|
virtual JSON getJSON();
|
||||||
virtual QPDFObject::object_type_e getTypeCode() const;
|
virtual QPDFObject::object_type_e getTypeCode() const;
|
||||||
virtual char const* getTypeName() const;
|
virtual char const* getTypeName() const;
|
||||||
virtual void setDescription(QPDF*, std::string const&);
|
virtual void setDescription(QPDF*, std::string const&);
|
||||||
|
@ -9,6 +9,7 @@ class QPDF_Bool: public QPDFObject
|
|||||||
QPDF_Bool(bool val);
|
QPDF_Bool(bool val);
|
||||||
virtual ~QPDF_Bool();
|
virtual ~QPDF_Bool();
|
||||||
virtual std::string unparse();
|
virtual std::string unparse();
|
||||||
|
virtual JSON getJSON();
|
||||||
virtual QPDFObject::object_type_e getTypeCode() const;
|
virtual QPDFObject::object_type_e getTypeCode() const;
|
||||||
virtual char const* getTypeName() const;
|
virtual char const* getTypeName() const;
|
||||||
bool getVal() const;
|
bool getVal() const;
|
||||||
|
@ -14,6 +14,7 @@ class QPDF_Dictionary: public QPDFObject
|
|||||||
QPDF_Dictionary(std::map<std::string, QPDFObjectHandle> const& items);
|
QPDF_Dictionary(std::map<std::string, QPDFObjectHandle> const& items);
|
||||||
virtual ~QPDF_Dictionary();
|
virtual ~QPDF_Dictionary();
|
||||||
virtual std::string unparse();
|
virtual std::string unparse();
|
||||||
|
virtual JSON getJSON();
|
||||||
virtual QPDFObject::object_type_e getTypeCode() const;
|
virtual QPDFObject::object_type_e getTypeCode() const;
|
||||||
virtual char const* getTypeName() const;
|
virtual char const* getTypeName() const;
|
||||||
virtual void setDescription(QPDF*, std::string const&);
|
virtual void setDescription(QPDF*, std::string const&);
|
||||||
|
@ -9,6 +9,7 @@ class QPDF_InlineImage: public QPDFObject
|
|||||||
QPDF_InlineImage(std::string const& val);
|
QPDF_InlineImage(std::string const& val);
|
||||||
virtual ~QPDF_InlineImage();
|
virtual ~QPDF_InlineImage();
|
||||||
virtual std::string unparse();
|
virtual std::string unparse();
|
||||||
|
virtual JSON getJSON();
|
||||||
virtual QPDFObject::object_type_e getTypeCode() const;
|
virtual QPDFObject::object_type_e getTypeCode() const;
|
||||||
virtual char const* getTypeName() const;
|
virtual char const* getTypeName() const;
|
||||||
std::string getVal() const;
|
std::string getVal() const;
|
||||||
|
@ -9,6 +9,7 @@ class QPDF_Integer: public QPDFObject
|
|||||||
QPDF_Integer(long long val);
|
QPDF_Integer(long long val);
|
||||||
virtual ~QPDF_Integer();
|
virtual ~QPDF_Integer();
|
||||||
virtual std::string unparse();
|
virtual std::string unparse();
|
||||||
|
virtual JSON getJSON();
|
||||||
virtual QPDFObject::object_type_e getTypeCode() const;
|
virtual QPDFObject::object_type_e getTypeCode() const;
|
||||||
virtual char const* getTypeName() const;
|
virtual char const* getTypeName() const;
|
||||||
long long getVal() const;
|
long long getVal() const;
|
||||||
|
@ -9,6 +9,7 @@ class QPDF_Name: public QPDFObject
|
|||||||
QPDF_Name(std::string const& name);
|
QPDF_Name(std::string const& name);
|
||||||
virtual ~QPDF_Name();
|
virtual ~QPDF_Name();
|
||||||
virtual std::string unparse();
|
virtual std::string unparse();
|
||||||
|
virtual JSON getJSON();
|
||||||
virtual QPDFObject::object_type_e getTypeCode() const;
|
virtual QPDFObject::object_type_e getTypeCode() const;
|
||||||
virtual char const* getTypeName() const;
|
virtual char const* getTypeName() const;
|
||||||
std::string getName() const;
|
std::string getName() const;
|
||||||
|
@ -8,6 +8,7 @@ class QPDF_Null: public QPDFObject
|
|||||||
public:
|
public:
|
||||||
virtual ~QPDF_Null();
|
virtual ~QPDF_Null();
|
||||||
virtual std::string unparse();
|
virtual std::string unparse();
|
||||||
|
virtual JSON getJSON();
|
||||||
virtual QPDFObject::object_type_e getTypeCode() const;
|
virtual QPDFObject::object_type_e getTypeCode() const;
|
||||||
virtual char const* getTypeName() const;
|
virtual char const* getTypeName() const;
|
||||||
};
|
};
|
||||||
|
@ -9,6 +9,7 @@ class QPDF_Operator: public QPDFObject
|
|||||||
QPDF_Operator(std::string const& val);
|
QPDF_Operator(std::string const& val);
|
||||||
virtual ~QPDF_Operator();
|
virtual ~QPDF_Operator();
|
||||||
virtual std::string unparse();
|
virtual std::string unparse();
|
||||||
|
virtual JSON getJSON();
|
||||||
virtual QPDFObject::object_type_e getTypeCode() const;
|
virtual QPDFObject::object_type_e getTypeCode() const;
|
||||||
virtual char const* getTypeName() const;
|
virtual char const* getTypeName() const;
|
||||||
std::string getVal() const;
|
std::string getVal() const;
|
||||||
|
@ -10,6 +10,7 @@ class QPDF_Real: public QPDFObject
|
|||||||
QPDF_Real(double value, int decimal_places = 0);
|
QPDF_Real(double value, int decimal_places = 0);
|
||||||
virtual ~QPDF_Real();
|
virtual ~QPDF_Real();
|
||||||
virtual std::string unparse();
|
virtual std::string unparse();
|
||||||
|
virtual JSON getJSON();
|
||||||
virtual QPDFObject::object_type_e getTypeCode() const;
|
virtual QPDFObject::object_type_e getTypeCode() const;
|
||||||
virtual char const* getTypeName() const;
|
virtual char const* getTypeName() const;
|
||||||
std::string getVal();
|
std::string getVal();
|
||||||
|
@ -8,6 +8,7 @@ class QPDF_Reserved: public QPDFObject
|
|||||||
public:
|
public:
|
||||||
virtual ~QPDF_Reserved();
|
virtual ~QPDF_Reserved();
|
||||||
virtual std::string unparse();
|
virtual std::string unparse();
|
||||||
|
virtual JSON getJSON();
|
||||||
virtual QPDFObject::object_type_e getTypeCode() const;
|
virtual QPDFObject::object_type_e getTypeCode() const;
|
||||||
virtual char const* getTypeName() const;
|
virtual char const* getTypeName() const;
|
||||||
};
|
};
|
||||||
|
@ -17,6 +17,7 @@ class QPDF_Stream: public QPDFObject
|
|||||||
qpdf_offset_t offset, size_t length);
|
qpdf_offset_t offset, size_t length);
|
||||||
virtual ~QPDF_Stream();
|
virtual ~QPDF_Stream();
|
||||||
virtual std::string unparse();
|
virtual std::string unparse();
|
||||||
|
virtual JSON getJSON();
|
||||||
virtual QPDFObject::object_type_e getTypeCode() const;
|
virtual QPDFObject::object_type_e getTypeCode() const;
|
||||||
virtual char const* getTypeName() const;
|
virtual char const* getTypeName() const;
|
||||||
virtual void setDescription(QPDF*, std::string const&);
|
virtual void setDescription(QPDF*, std::string const&);
|
||||||
|
@ -15,6 +15,7 @@ class QPDF_String: public QPDFObject
|
|||||||
virtual QPDFObject::object_type_e getTypeCode() const;
|
virtual QPDFObject::object_type_e getTypeCode() const;
|
||||||
virtual char const* getTypeName() const;
|
virtual char const* getTypeName() const;
|
||||||
std::string unparse(bool force_binary);
|
std::string unparse(bool force_binary);
|
||||||
|
virtual JSON getJSON();
|
||||||
std::string getVal() const;
|
std::string getVal() const;
|
||||||
std::string getUTF8Val() const;
|
std::string getUTF8Val() const;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user