00001
00002
00003
00004
00005
00006 #ifndef H_CPPSDFObj
00007 #define H_CPPSDFObj
00008
00009 #include <Common/Exception.h>
00010 #include <Common/UString.h>
00011 #include <Common/Matrix2D.h>
00012 #include <Filters/FilterWriter.h>
00013 #include <Filters/Filter.h>
00014
00015
00016 namespace pdftron {
00017 namespace SDF {
00018
00019 class DictIterator;
00020
00041 class Obj
00042 {
00043 public:
00044
00045
00046
00050 enum Type
00051 {
00052 e_null,
00053 e_bool,
00054 e_number,
00055 e_name,
00056 e_string,
00057 e_dict,
00058 e_array,
00059 e_stream
00060 };
00061
00066 Type GetType () const;
00067
00072 bool IsBool () const;
00073
00078 bool IsNumber () const;
00079
00084 bool IsNull () const;
00085
00090 bool IsString () const;
00091
00096 bool IsName () const;
00097
00103 bool IsIndirect () const;
00104
00110 bool IsContainer () const;
00111
00116 bool IsDict () const;
00117
00122 bool IsArray () const;
00123
00128 bool IsStream () const;
00129
00134 class SDFDoc& GetDoc () const;
00135
00141 void Write(Filters::FilterWriter& stream);
00142
00156 size_t Size () const;
00157
00158
00159
00165 UInt32 GetObjNum () const;
00166
00172 UInt16 GetGenNum () const;
00173
00179 size_t GetOffset () const;
00180
00185 bool IsFree () const;
00186
00193 void SetMark (bool mark);
00194
00199 bool IsMarked () const;
00200
00205 bool IsLoaded () const;
00206
00207
00208
00209
00214 bool GetBool () const;
00215
00220 void SetBool (bool b);
00221
00222
00223
00228 double GetNumber () const;
00229
00234 void SetNumber (double n);
00235
00236
00237
00238
00253 #ifdef SWIG
00254 std::vector<unsigned char> GetBuffer () const;
00255 #else
00256 const UChar* GetBuffer () const;
00257 #endif
00258
00274 UString GetAsPDFText() const;
00275
00276 #ifndef SWIG
00277 void GetAsPDFText(UString& out_str) const;
00278 #endif
00279
00287 void SetString(const UChar* value, size_t size);
00288
00294 void SetString(const UString& str);
00295
00296
00297
00302 const char* GetName () const;
00303
00308 void SetName (const char* name);
00309
00310
00311
00312
00329 DictIterator GetDictIterator ();
00330
00352 DictIterator Find (const char* key);
00353
00363 Obj FindObj (const char* key);
00364
00374 DictIterator Get (const char* key);
00375
00388 Obj PutName (const char* key, const char* name);
00389
00401 Obj PutArray (const char* key);
00402
00415 Obj PutBool (const char* key, bool value);
00416
00427 Obj PutDict (const char* key);
00428
00441 Obj PutNumber (const char* key, double value);
00442
00455 Obj PutString (const char* key, const char* value);
00456
00470 Obj PutString (const char* key, const char* value, int size);
00471
00485 Obj PutText(const char* key, const UString& value);
00486
00493 void PutNull (const char* key);
00494
00504 Obj Put(const char* key, Obj obj);
00505
00518 Obj PutRect (const char* key, double x1, double y1, double x2, double y2);
00519
00532 Obj PutMatrix(const char* key, const Common::Matrix2D& value);
00533
00538 void Erase (const char* key);
00539
00544 void Erase (DictIterator pos);
00545
00553 bool Rename (const char* old_key, const char* new_key);
00554
00555
00556
00557
00564 Obj GetAt (size_t index) const;
00565
00577 Obj InsertName (size_t pos, const char* name);
00578
00589 Obj InsertArray (size_t pos);
00590
00602 Obj InsertBool (size_t pos, bool value);
00603
00614 Obj InsertDict (size_t pos);
00615
00627 Obj InsertNumber (size_t pos, double value);
00628
00640 Obj InsertString (size_t pos, const char* value);
00641
00655 Obj InsertString (size_t pos, const char* value, int size);
00656
00669 Obj InsertText(size_t pos, const UString& value);
00670
00679 Obj InsertNull(size_t pos);
00680
00692 Obj Insert(size_t pos, Obj obj);
00693
00705 Obj InsertRect (size_t pos, double x1, double y1, double x2, double y2);
00706
00718 Obj InsertMatrix(size_t pos, Common::Matrix2D& value);
00719
00726 Obj PushBackName (const char* name);
00727
00733 Obj PushBackArray ();
00734
00741 Obj PushBackBool (bool value);
00742
00748 Obj PushBackDict ();
00749
00756 Obj PushBackNumber (double value);
00757
00764 Obj PushBackString (const char* value);
00765
00774 Obj PushBackString (const char* value, int size);
00775
00783 Obj PushBackText (const UString& value);
00784
00790 Obj PushBackNull ();
00791
00800 Obj PushBack(Obj obj);
00801
00809 Obj PushBackRect (double x1, double y1, double x2, double y2);
00810
00818 Obj PushBackMatrix(Common::Matrix2D& value);
00819
00829 void EraseAt (size_t pos);
00830
00831
00832
00833
00838 size_t GetRawStreamLength () const;
00839
00845 Filters::Filter GetRawStream (bool decrypt) const;
00846
00851 Filters::Filter GetDecodedStream () const;
00852
00857 void SetStreamData(
00858 const char* data,
00859 const size_t data_size,
00860 Filters::Filter filter_chain = Filters::Filter() );
00861
00862
00863
00864 Obj() : mp_obj(0) {}
00865 Obj(const Obj& c) : mp_obj(c.mp_obj) {}
00866 Obj& operator=(const Obj& c) {mp_obj=c.mp_obj; return *this;}
00867
00871 operator bool () { return mp_obj!=0;}
00872
00879 bool IsEqual(const Obj& to) const;
00880 bool operator ==(const Obj& to) const;
00881
00883 #ifndef SWIGHIDDEN
00884 Obj(TRN_Obj impl);
00885 TRN_Obj mp_obj;
00886 private:
00887 mutable TRN_SDFDoc temp_doc;
00888 #endif
00890 };
00891
00892
00893
00894 };
00895 };
00896
00897
00898
00899 #include <Impl/SDFDoc.inl>
00900 #endif
00901