mirror of
https://github.com/qpdf/qpdf.git
synced 2025-01-22 22:58:33 +00:00
remove stream_data_handler; it wouldn't work as designed. replacement data implemented but not tested
git-svn-id: svn+q:///qpdf/trunk@988 71b93d88-0707-0410-a8cf-f5a4172ac649
This commit is contained in:
parent
9a06fc541c
commit
998a6cbee9
3
TODO
3
TODO
@ -25,6 +25,9 @@ Next
|
||||
QPDF_Stream.cc carefully line by line to make sure everything is
|
||||
adjusted properly.
|
||||
|
||||
Don't forget to provide a method that provides a pipeline through
|
||||
which the stream data is to be piped.
|
||||
|
||||
* Add helper routines for manipulating page content streams.
|
||||
Operations should include ability to convert page contents from a
|
||||
stream to an array of streams and to append or prepend to the page
|
||||
|
@ -197,52 +197,6 @@ class QPDFObjectHandle
|
||||
void replaceStreamData(PointerHolder<Buffer> data,
|
||||
QPDFObjectHandle filter,
|
||||
QPDFObjectHandle decode_parms);
|
||||
class StreamDataHandler
|
||||
{
|
||||
public:
|
||||
QPDF_DLL
|
||||
virtual ~StreamDataHandler()
|
||||
{
|
||||
}
|
||||
|
||||
// See replaceStreamData(StreamDataHandler) below for a
|
||||
// description of how to override this function.
|
||||
virtual void
|
||||
replaceStreamData(Buffer const& in_data,
|
||||
std::string const& in_filter,
|
||||
std::string const& in_decode_parms,
|
||||
bool filtered,
|
||||
Buffer& out_data,
|
||||
std::string& out_filter,
|
||||
std::string& out_decode_parms,
|
||||
bool& persist) = 0;
|
||||
};
|
||||
// Provide a hook for doing dynamic replacement of the stream's
|
||||
// data. When the stream's data is accessed either with
|
||||
// pipeStreamData or with getStreamData, if the stream doesn't
|
||||
// already have replacement data, an attempt is first made to
|
||||
// filter the stream's original data. If the attempt is
|
||||
// successful, the stream's filtered original data is passed to
|
||||
// the handler as in_data, and filtered is true. If the original
|
||||
// data cannot be processed, then in_data is the original raw data
|
||||
// (after any decryption filters have been applied) and filtered
|
||||
// is false. If the original input data has no filters applied,
|
||||
// the filtered is true. This way, if filtered is true, the
|
||||
// caller knows that in_data contains the fully filtered data.
|
||||
// The handler then provides replacement data, /Filter, and
|
||||
// /DecodeParms (handled is in the simpler form of
|
||||
// replaceStreamData above). If the persist argument is set to
|
||||
// true, then the replacement data is stored in the stream object
|
||||
// where it will be used on subsequent attempts to retrieve the
|
||||
// data (rather than calling the handler). If persist is set to
|
||||
// false, then the data will be used that one time and not saved.
|
||||
// In that case, the handler will be invoked again if the stream
|
||||
// data is accessed another time. Writing a handler that sets
|
||||
// persist to true essentially allows delaying the computation of
|
||||
// the stream data, while setting it to false reduces the amount
|
||||
// of memory that is used.
|
||||
QPDF_DLL
|
||||
void replaceStreamData(PointerHolder<StreamDataHandler> dh);
|
||||
|
||||
// return 0 for direct objects
|
||||
QPDF_DLL
|
||||
|
@ -362,13 +362,6 @@ QPDFObjectHandle::replaceStreamData(PointerHolder<Buffer> data,
|
||||
data, filter, decode_parms);
|
||||
}
|
||||
|
||||
void
|
||||
QPDFObjectHandle::replaceStreamData(PointerHolder<StreamDataHandler> dh)
|
||||
{
|
||||
assertType("Stream", isStream());
|
||||
dynamic_cast<QPDF_Stream*>(obj.getPointer())->replaceStreamData(dh);
|
||||
}
|
||||
|
||||
int
|
||||
QPDFObjectHandle::getObjectID() const
|
||||
{
|
||||
|
@ -319,10 +319,20 @@ QPDF_Stream::pipeStreamData(Pipeline* pipeline, bool filter,
|
||||
}
|
||||
}
|
||||
|
||||
// XXX handle stream_data and stream_data_handler
|
||||
QPDF::Pipe::pipeStreamData(this->qpdf, this->objid, this->generation,
|
||||
this->offset, this->length,
|
||||
this->stream_dict, pipeline);
|
||||
if (this->stream_data.getPointer())
|
||||
{
|
||||
QTC::TC("qpdf", "QPDF_Stream pipe replaced stream data");
|
||||
Buffer& b = *(this->stream_data.getPointer());
|
||||
pipeline->write(b.getBuffer(), b.getSize());
|
||||
pipeline->finish();
|
||||
}
|
||||
else
|
||||
{
|
||||
QTC::TC("qpdf", "QPDF_Stream pipe original stream data");
|
||||
QPDF::Pipe::pipeStreamData(this->qpdf, this->objid, this->generation,
|
||||
this->offset, this->length,
|
||||
this->stream_dict, pipeline);
|
||||
}
|
||||
|
||||
return filter;
|
||||
}
|
||||
@ -339,10 +349,3 @@ QPDF_Stream::replaceStreamData(PointerHolder<Buffer> data,
|
||||
QPDFObjectHandle::newInteger(
|
||||
data.getPointer()->getSize()));
|
||||
}
|
||||
|
||||
void
|
||||
QPDF_Stream::replaceStreamData(
|
||||
PointerHolder<QPDFObjectHandle::StreamDataHandler> dh)
|
||||
{
|
||||
this->stream_data_handler = dh;
|
||||
}
|
||||
|
@ -25,8 +25,6 @@ class QPDF_Stream: public QPDFObject
|
||||
void replaceStreamData(PointerHolder<Buffer> data,
|
||||
QPDFObjectHandle filter,
|
||||
QPDFObjectHandle decode_parms);
|
||||
void replaceStreamData(
|
||||
PointerHolder<QPDFObjectHandle::StreamDataHandler> dh);
|
||||
|
||||
private:
|
||||
bool filterable(std::vector<std::string>& filters,
|
||||
@ -38,7 +36,6 @@ class QPDF_Stream: public QPDFObject
|
||||
QPDFObjectHandle stream_dict;
|
||||
off_t offset;
|
||||
int length;
|
||||
PointerHolder<QPDFObjectHandle::StreamDataHandler> stream_data_handler;
|
||||
PointerHolder<Buffer> stream_data;
|
||||
};
|
||||
|
||||
|
@ -174,3 +174,5 @@ QPDF ERR object stream with wrong type 0
|
||||
QPDF object gone after xref reconstruction 0
|
||||
qpdf-c called qpdf_has_error 0
|
||||
qpdf-c called qpdf_get_qpdf_version 0
|
||||
QPDF_Stream pipe original stream data 0
|
||||
QPDF_Stream pipe replaced stream data 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user