#ifndef QPDF_STREAM_HH #define QPDF_STREAM_HH #include #include #include class Pipeline; class QPDF; class QPDF_Stream: public QPDFObject { public: QPDF_Stream(QPDF*, int objid, int generation, QPDFObjectHandle stream_dict, qpdf_offset_t offset, size_t length); virtual ~QPDF_Stream(); virtual std::string unparse(); virtual JSON getJSON(); virtual QPDFObject::object_type_e getTypeCode() const; virtual char const* getTypeName() const; virtual void setDescription(QPDF*, std::string const&); QPDFObjectHandle getDict() const; bool isDataModified() const; // See comments in QPDFObjectHandle.hh for these methods. bool pipeStreamData(Pipeline*, unsigned long encode_flags, qpdf_stream_decode_level_e decode_level, bool suppress_warnings, bool will_retry); PointerHolder getStreamData(qpdf_stream_decode_level_e); PointerHolder getRawStreamData(); void replaceStreamData(PointerHolder data, QPDFObjectHandle const& filter, QPDFObjectHandle const& decode_parms); void replaceStreamData( PointerHolder provider, QPDFObjectHandle const& filter, QPDFObjectHandle const& decode_parms); void addTokenFilter( PointerHolder token_filter); void replaceDict(QPDFObjectHandle new_dict); // Replace object ID and generation. This may only be called if // object ID and generation are 0. It is used by QPDFObjectHandle // when adding streams to files. void setObjGen(int objid, int generation); protected: virtual void releaseResolved(); private: static std::map filter_abbreviations; void replaceFilterData(QPDFObjectHandle const& filter, QPDFObjectHandle const& decode_parms, size_t length); bool understandDecodeParams( std::string const& filter, QPDFObjectHandle decode_params, int& predictor, int& columns, int& colors, int& bits_per_component, bool& early_code_change); bool filterable(std::vector& filters, bool& specialized_compression, bool& lossy_compression, int& predictor, int& columns, int& colors, int& bits_per_component, bool& early_code_change); void warn(QPDFExc const& e); void setDictDescription(); void setStreamDescription(); QPDF* qpdf; int objid; int generation; QPDFObjectHandle stream_dict; qpdf_offset_t offset; size_t length; PointerHolder stream_data; PointerHolder stream_provider; std::vector< PointerHolder > token_filters; }; #endif // QPDF_STREAM_HH