mirror of
https://github.com/qpdf/qpdf.git
synced 2025-02-02 11:58:25 +00:00
Add new data member QPDFWriter::Members::root_og
Also, uninitialize QPDFWriter::Members members.
This commit is contained in:
parent
b27be3ed27
commit
b7791566f6
@ -709,70 +709,71 @@ class QPDFWriter
|
||||
Members(Members const&) = delete;
|
||||
|
||||
QPDF& pdf;
|
||||
char const* filename;
|
||||
FILE* file;
|
||||
bool close_file;
|
||||
Pl_Buffer* buffer_pipeline;
|
||||
Buffer* output_buffer;
|
||||
bool normalize_content_set;
|
||||
bool normalize_content;
|
||||
bool compress_streams;
|
||||
bool compress_streams_set;
|
||||
qpdf_stream_decode_level_e stream_decode_level;
|
||||
bool stream_decode_level_set;
|
||||
bool recompress_flate;
|
||||
bool qdf_mode;
|
||||
bool preserve_unreferenced_objects;
|
||||
bool newline_before_endstream;
|
||||
bool static_id;
|
||||
bool suppress_original_object_ids;
|
||||
bool direct_stream_lengths;
|
||||
bool encrypted;
|
||||
bool preserve_encryption;
|
||||
bool linearized;
|
||||
bool pclm;
|
||||
qpdf_object_stream_e object_stream_mode;
|
||||
QPDFObjGen root_og{-1, 0};
|
||||
char const* filename{"unspecified"};
|
||||
FILE* file{nullptr};
|
||||
bool close_file{false};
|
||||
Pl_Buffer* buffer_pipeline{nullptr};
|
||||
Buffer* output_buffer{nullptr};
|
||||
bool normalize_content_set{false};
|
||||
bool normalize_content{false};
|
||||
bool compress_streams{true};
|
||||
bool compress_streams_set{false};
|
||||
qpdf_stream_decode_level_e stream_decode_level{qpdf_dl_none};
|
||||
bool stream_decode_level_set{false};
|
||||
bool recompress_flate{false};
|
||||
bool qdf_mode{false};
|
||||
bool preserve_unreferenced_objects{false};
|
||||
bool newline_before_endstream{false};
|
||||
bool static_id{false};
|
||||
bool suppress_original_object_ids{false};
|
||||
bool direct_stream_lengths{true};
|
||||
bool encrypted{false};
|
||||
bool preserve_encryption{true};
|
||||
bool linearized{false};
|
||||
bool pclm{false};
|
||||
qpdf_object_stream_e object_stream_mode{qpdf_o_preserve};
|
||||
std::string encryption_key;
|
||||
bool encrypt_metadata;
|
||||
bool encrypt_use_aes;
|
||||
bool encrypt_metadata{true};
|
||||
bool encrypt_use_aes{false};
|
||||
std::map<std::string, std::string> encryption_dictionary;
|
||||
int encryption_V;
|
||||
int encryption_R;
|
||||
int encryption_V{0};
|
||||
int encryption_R{0};
|
||||
|
||||
std::string id1; // for /ID key of
|
||||
std::string id2; // trailer dictionary
|
||||
std::string final_pdf_version;
|
||||
int final_extension_level;
|
||||
int final_extension_level{0};
|
||||
std::string min_pdf_version;
|
||||
int min_extension_level;
|
||||
int min_extension_level{0};
|
||||
std::string forced_pdf_version;
|
||||
int forced_extension_level;
|
||||
int forced_extension_level{0};
|
||||
std::string extra_header_text;
|
||||
int encryption_dict_objid;
|
||||
int encryption_dict_objid{0};
|
||||
std::string cur_data_key;
|
||||
std::list<std::shared_ptr<Pipeline>> to_delete;
|
||||
Pl_Count* pipeline;
|
||||
Pl_Count* pipeline{nullptr};
|
||||
std::vector<QPDFObjectHandle> object_queue;
|
||||
size_t object_queue_front{0};
|
||||
std::map<QPDFObjGen, int> obj_renumber;
|
||||
std::map<int, QPDFXRefEntry> xref;
|
||||
std::map<int, qpdf_offset_t> lengths;
|
||||
int next_objid;
|
||||
int cur_stream_length_id;
|
||||
size_t cur_stream_length;
|
||||
bool added_newline;
|
||||
int max_ostream_index;
|
||||
int next_objid{1};
|
||||
int cur_stream_length_id{0};
|
||||
size_t cur_stream_length{0};
|
||||
bool added_newline{false};
|
||||
int max_ostream_index{0};
|
||||
std::set<QPDFObjGen> normalized_streams;
|
||||
std::map<QPDFObjGen, int> page_object_to_seq;
|
||||
std::map<QPDFObjGen, int> contents_to_page_seq;
|
||||
std::map<QPDFObjGen, int> object_to_object_stream;
|
||||
std::map<int, std::set<QPDFObjGen>> object_stream_to_objects;
|
||||
std::list<Pipeline*> pipeline_stack;
|
||||
unsigned long long next_stack_id;
|
||||
bool deterministic_id;
|
||||
Pl_MD5* md5_pipeline;
|
||||
unsigned long long next_stack_id{0};
|
||||
bool deterministic_id{false};
|
||||
Pl_MD5* md5_pipeline{nullptr};
|
||||
std::string deterministic_id_data;
|
||||
bool did_write_setup;
|
||||
bool did_write_setup{false};
|
||||
|
||||
// For linearization only
|
||||
std::string lin_pass1_filename;
|
||||
@ -781,9 +782,9 @@ class QPDFWriter
|
||||
|
||||
// For progress reporting
|
||||
std::shared_ptr<ProgressReporter> progress_reporter;
|
||||
int events_expected;
|
||||
int events_seen;
|
||||
int next_progress_report;
|
||||
int events_expected{0};
|
||||
int events_seen{0};
|
||||
int next_progress_report{0};
|
||||
};
|
||||
|
||||
// Keep all member variables inside the Members object, which we
|
||||
|
@ -52,50 +52,9 @@ QPDFWriter::FunctionProgressReporter::reportProgress(int progress)
|
||||
|
||||
QPDFWriter::Members::Members(QPDF& pdf) :
|
||||
pdf(pdf),
|
||||
filename("unspecified"),
|
||||
file(nullptr),
|
||||
close_file(false),
|
||||
buffer_pipeline(nullptr),
|
||||
output_buffer(nullptr),
|
||||
normalize_content_set(false),
|
||||
normalize_content(false),
|
||||
compress_streams(true),
|
||||
compress_streams_set(false),
|
||||
stream_decode_level(qpdf_dl_none),
|
||||
stream_decode_level_set(false),
|
||||
recompress_flate(false),
|
||||
qdf_mode(false),
|
||||
preserve_unreferenced_objects(false),
|
||||
newline_before_endstream(false),
|
||||
static_id(false),
|
||||
suppress_original_object_ids(false),
|
||||
direct_stream_lengths(true),
|
||||
encrypted(false),
|
||||
preserve_encryption(true),
|
||||
linearized(false),
|
||||
pclm(false),
|
||||
object_stream_mode(qpdf_o_preserve),
|
||||
encrypt_metadata(true),
|
||||
encrypt_use_aes(false),
|
||||
encryption_V(0),
|
||||
encryption_R(0),
|
||||
final_extension_level(0),
|
||||
min_extension_level(0),
|
||||
forced_extension_level(0),
|
||||
encryption_dict_objid(0),
|
||||
pipeline(nullptr),
|
||||
next_objid(1),
|
||||
cur_stream_length_id(0),
|
||||
cur_stream_length(0),
|
||||
added_newline(false),
|
||||
max_ostream_index(0),
|
||||
next_stack_id(0),
|
||||
deterministic_id(false),
|
||||
md5_pipeline(nullptr),
|
||||
did_write_setup(false),
|
||||
events_expected(0),
|
||||
events_seen(0),
|
||||
next_progress_report(0)
|
||||
root_og(
|
||||
pdf.getRoot().getObjGen().isIndirect() ? pdf.getRoot().getObjGen()
|
||||
: QPDFObjGen(-1, 0))
|
||||
{
|
||||
}
|
||||
|
||||
@ -1534,14 +1493,12 @@ QPDFWriter::unparseObject(
|
||||
// is direct through the ADBE dictionary, so we can modify in
|
||||
// place.
|
||||
|
||||
bool is_root = false;
|
||||
const bool is_root = (old_og == m->root_og);
|
||||
bool have_extensions_other = false;
|
||||
bool have_extensions_adbe = false;
|
||||
|
||||
QPDFObjectHandle extensions;
|
||||
if ((old_og.getObj() != 0) &&
|
||||
(old_og == this->m->pdf.getRoot().getObjGen())) {
|
||||
is_root = true;
|
||||
if (is_root) {
|
||||
if (object.hasKey("/Extensions") &&
|
||||
object.getKey("/Extensions").isDictionary()) {
|
||||
extensions = object.getKey("/Extensions");
|
||||
@ -2396,10 +2353,9 @@ QPDFWriter::doWriteSetup()
|
||||
// 8.0.0 has a bug that prevents it from being able to handle
|
||||
// encrypted files with compressed document catalogs, so we
|
||||
// disable them in that case as well.
|
||||
QPDFObjGen og = this->m->pdf.getRoot().getObjGen();
|
||||
if (this->m->object_to_object_stream.count(og)) {
|
||||
if (m->object_to_object_stream.count(m->root_og)) {
|
||||
QTC::TC("qpdf", "QPDFWriter uncompressing root");
|
||||
this->m->object_to_object_stream.erase(og);
|
||||
this->m->object_to_object_stream.erase(m->root_og);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user