diff options
author | Jay Berkenbilt <ejb@ql.org> | 2008-04-29 14:55:25 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2008-04-29 14:55:25 +0200 |
commit | 9a0b88bf7777c153dc46ace22db74ef24d51583a (patch) | |
tree | f567ac1cf2bf5071a611eb49323a935b6ac938ff /qpdf | |
download | qpdf-9a0b88bf7777c153dc46ace22db74ef24d51583a.tar.zst |
update release date to actual daterelease-qpdf-2.0
git-svn-id: svn+q:///qpdf/trunk@599 71b93d88-0707-0410-a8cf-f5a4172ac649
Diffstat (limited to 'qpdf')
314 files changed, 29144 insertions, 0 deletions
diff --git a/qpdf/Makefile b/qpdf/Makefile new file mode 100644 index 00000000..90899055 --- /dev/null +++ b/qpdf/Makefile @@ -0,0 +1 @@ +include ../make/proxy.mk diff --git a/qpdf/build.mk b/qpdf/build.mk new file mode 100644 index 00000000..b6fc55c9 --- /dev/null +++ b/qpdf/build.mk @@ -0,0 +1,26 @@ +BINS_qpdf = qpdf test_driver + +TARGETS_qpdf = $(foreach B,$(BINS_qpdf),qpdf/$(OUTPUT_DIR)/$(B)) + +$(TARGETS_qpdf): $(TARGETS_libqpdf) + +INCLUDES_qpdf = include + +TC_SRCS_qpdf = $(wildcard libqpdf/*.cc) $(wildcard qpdf/*.cc) + +# ----- + +$(foreach B,$(BINS_qpdf),$(eval \ + OBJS_$(B) = $(call src_to_obj,qpdf/$(B).cc))) + +ifeq ($(GENDEPS),1) +-include $(foreach B,$(BINS_qpdf),$(call obj_to_dep,$(OBJS_$(B)))) +endif + +$(foreach B,$(BINS_qpdf),$(eval \ + $(OBJS_$(B)): qpdf/$(OUTPUT_DIR)/%.o: qpdf/$(B).cc ; \ + $(call compile,qpdf/$(B).cc,$(INCLUDES_qpdf)))) + +$(foreach B,$(BINS_qpdf),$(eval \ + qpdf/$(OUTPUT_DIR)/$(B): $(OBJS_$(B)) ; \ + $(call makebin,$(OBJS_$(B)),$$@))) diff --git a/qpdf/fix-qdf b/qpdf/fix-qdf new file mode 100755 index 00000000..d3544d95 --- /dev/null +++ b/qpdf/fix-qdf @@ -0,0 +1,352 @@ +#!/usr/bin/env perl + +require 5.008; +BEGIN { $^W = 1; } +use strict; + +my $whoami = ($0 =~ m,([^/\\]*)$,) ? $1 : $0; +my $dirname = ($0 =~ m,(.*)[/\\][^/\\]+$,) ? $1 : "."; + +if ((@ARGV == 1) && ($ARGV[0] eq '--version')) +{ + exec "$dirname/qpdf", '--version'; + exit 2; +} + +my $offset = 0; +my $last_offset = 0; + +my $file = shift(@ARGV); +if (defined $file) +{ + open(F, "<$file") or die "$whoami: can't open $file: $!\n"; +} +else +{ + $file = 'stdin'; + open(F, "<&STDIN") or die "$whoami: can't dup stdin: $!\n"; +} +binmode F; +binmode STDOUT; + +my $line = get_line(); +if (! ((defined $line) && ($line =~ m/^%PDF-1\.\d+\b/))) +{ + die "$whoami: $file: not a pdf file\n"; +} +print $line; +$line = get_line(); +die "$whoami: $file: premature EOF\n" unless defined $line; +print $line; +$line = get_line(); +if (! ((defined $line) && ($line =~ m/^%QDF-1.\d+\b/))) +{ + die "$whoami: $file: not a qdf file\n"; +} +print $line; + +my $last_obj = 0; +my @xref = (); + +my $stream_start = 0; +my $stream_length = 0; +my $xref_offset = 0; +my $xref_f1_nbytes = 0; +my $xref_size = 0; + +my $cur_state = 0; +my $st_top = ++$cur_state; +my $st_in_obj = ++$cur_state; +my $st_in_stream = ++$cur_state; +my $st_after_stream = ++$cur_state; +my $st_in_ostream_dict = ++$cur_state; +my $st_in_ostream_offsets = ++$cur_state; +my $st_in_ostream_outer = ++$cur_state; +my $st_in_ostream_obj = ++$cur_state; +my $st_in_xref_stream_dict = ++$cur_state; +my $st_in_length = ++$cur_state; +my $st_at_xref = ++$cur_state; +my $st_before_trailer = ++$cur_state; +my $st_in_trailer = ++$cur_state; +my $st_done = ++$cur_state; + +my @ostream = (); +my @ostream_offsets = (); +my $ostream_idx = 0; +my $ostream_id = 0; +my $ostream_extends = ""; + +my $state = $st_top; +while (defined($line = get_line())) +{ + if ($state == $st_top) + { + if ($line =~ m/^(\d+) 0 obj$/) + { + check_obj_id($1); + $state = $st_in_obj; + } + elsif ($line =~ m/^xref$/) + { + $xref_offset = $last_offset; + $state = $st_at_xref; + } + print $line; + } + elsif ($state == $st_in_obj) + { + print $line; + if ($line =~ m/^stream$/) + { + $state = $st_in_stream; + $stream_start = $offset; + } + elsif ($line =~ m/^endobj$/) + { + $state = $st_top; + } + elsif ($line =~ m,/Type /ObjStm,) + { + $state = $st_in_ostream_dict; + $ostream_id = $last_obj; + } + elsif ($line =~ m,/Type /XRef,) + { + $xref_offset = $xref[-1][1]; + $xref_f1_nbytes = 0; + my $t = $xref_offset; + while ($t) + { + $t >>= 8; + ++$xref_f1_nbytes; + } + my $esize = $xref_f1_nbytes + 2; + $xref_size = 1 + @xref; + my $length = $xref_size * $esize; + print " /Length $length\n"; + print " /W [ 1 $xref_f1_nbytes 1 ]\n"; + $state = $st_in_xref_stream_dict; + } + } + elsif ($state == $st_in_ostream_dict) + { + if ($line =~ m,/Extends (\d+ 0 R),) + { + $ostream_extends = $1; + } + elsif ($line =~ m/^stream/) + { + $state = $st_in_ostream_offsets; + } + # discard line + } + elsif ($state == $st_in_ostream_offsets) + { + if ($line =~ m/^\%\% Object stream: object (\d+)/) + { + check_obj_id($1); + $stream_start = $last_offset; + $state = $st_in_ostream_outer; + push(@ostream, $line); + } + # discard line + } + elsif ($state == $st_in_ostream_outer) + { + adjust_ostream_xref(); + push(@ostream_offsets, $last_offset - $stream_start); + $state = $st_in_ostream_obj; + push(@ostream, $line); + } + elsif ($state == $st_in_ostream_obj) + { + push(@ostream, $line); + if ($line =~ m/^\%\% Object stream: object (\d+)/) + { + check_obj_id($1); + $state = $st_in_ostream_outer; + } + elsif ($line =~ m/^endstream/) + { + $stream_length = $last_offset - $stream_start; + write_ostream(); + $state = $st_in_obj; + } + } + elsif ($state == $st_in_xref_stream_dict) + { + if ($line =~ m,/(Length|W) ,) + { + # already printed + } + elsif ($line =~ m,/Size ,) + { + my $size = 1 + @xref; + print " /Size $xref_size\n"; + } + else + { + print $line; + } + if ($line =~ m/^stream\n/) + { + my $pack = "(C C$xref_f1_nbytes C)"; + print pack($pack, 0, 0, 0); + foreach my $x (@xref) + { + my ($type, $f1, $f2) = @$x; + $f2 = 0 unless defined $f2; + my @f1 = (); + for (my $i = 0; $i < $xref_f1_nbytes; ++$i) + { + unshift(@f1, $f1 & 0xff); + $f1 >>= 8; + } + print pack($pack, $type, @f1, $f2); + } + print "\nendstream\nendobj\n\n"; + print "startxref\n$xref_offset\n\%\%EOF\n"; + $state = $st_done; + } + } + elsif ($state == $st_in_stream) + { + if ($line =~ m/^endstream$/) + { + $stream_length = $last_offset - $stream_start; + $state = $st_after_stream; + } + print $line; + } + elsif ($state == $st_after_stream) + { + if ($line =~ m/^\%QDF: ignore_newline$/) + { + --$stream_length; + } + elsif ($line =~ m/^(\d+) 0 obj$/) + { + check_obj_id($1); + $state = $st_in_length; + } + print $line; + } + elsif ($state == $st_in_length) + { + if ($line !~ m/^\d+$/) + { + die "$file:$.: expected integer\n"; + } + my $new = "$stream_length\n"; + $offset -= length($line); + $offset += length($new); + print $new; + $state = $st_top; + } + elsif ($state == $st_at_xref) + { + my $n = scalar(@xref); + print "0 ", $n+1, "\n0000000000 65535 f \n"; + for (@xref) + { + my ($type, $f1, $f2) = @$_; + printf("%010d 00000 n \n", $f1); + } + $state = $st_before_trailer; + } + elsif ($state == $st_before_trailer) + { + if ($line =~ m/^trailer <</) + { + print $line; + $state = $st_in_trailer; + } + # no output + } + elsif ($state == $st_in_trailer) + { + if ($line =~ m/^ \/Size \d+$/) + { + print " /Size ", scalar(@xref) + 1, "\n"; + } + else + { + print $line; + } + if ($line =~ m/^>>$/) + { + print "startxref\n$xref_offset\n\%\%EOF\n"; + $state = $st_done; + } + } + elsif ($state == $st_done) + { + # ignore + } +} + +die "$whoami: $file: premature EOF\n" unless $state == $st_done; + +sub get_line +{ + my $line = scalar(<F>); + if (defined $line) + { + $last_offset = $offset; + $offset += length($line); + } + $line; +} + +sub check_obj_id +{ + my $cur_obj = shift; + if ($cur_obj != $last_obj + 1) + { + die "$file:$.: expected object ", $last_obj + 1, "\n"; + } + $last_obj = $cur_obj; + push(@xref, [1, $last_offset]); +} + +sub adjust_ostream_xref +{ + pop(@xref); + push(@xref, [2, $ostream_id, $ostream_idx++]); +} + +sub write_ostream +{ + my $first = $ostream_offsets[0]; + my $onum = $ostream_id; + my $offsets = ""; + my $n = scalar(@ostream_offsets); + for (@ostream_offsets) + { + $_ -= $first; + ++$onum; + $offsets .= "$onum $_\n"; + } + $first += length($offsets); + $stream_length += length($offsets); + print " /Length $stream_length\n"; + print " /N $n\n"; + print " /First $first\n"; + if ($ostream_extends) + { + print " /Extends $ostream_extends\n"; + } + print ">>\n"; + print "stream\n"; + print $offsets; + foreach (@ostream) + { + print $_; + } + + $ostream_idx = 0; + $ostream_id = 0; + @ostream = (); + @ostream_offsets = (); + $ostream_extends = ""; +} diff --git a/qpdf/qpdf.cc b/qpdf/qpdf.cc new file mode 100644 index 00000000..853767ed --- /dev/null +++ b/qpdf/qpdf.cc @@ -0,0 +1,942 @@ + +#include <iostream> +#include <string.h> +#include <stdlib.h> + +#include <qpdf/QUtil.hh> +#include <qpdf/QTC.hh> +#include <qpdf/Pl_StdioFile.hh> + +#include <qpdf/QPDF.hh> +#include <qpdf/QPDFExc.hh> + +#include <qpdf/QPDFWriter.hh> + +static char const* whoami = 0; + +// Note: let's not be too noisy about documenting the fact that this +// software purposely fails to enforce the distinction between user +// and owner passwords. A user password is sufficient to gain full +// access to the PDF file, so there is nothing this software can do +// with an owner password that it couldn't do with a user password +// other than changing the /P value in the encryption dictionary. +// (Setting this value requires the owner password.) The +// documentation discusses this as well. + +static char const* help = "\ +\n\ +Usage: qpdf [ options ] infilename outfilename\n\ +\n\ +An option summary appears below. Please see the documentation for details.\n\ +\n\ +\n\ +Basic Options\n\ +-------------\n\ +\n\ +--password=password specify a password for accessing encrypted files\n\ +--linearize generated a linearized (web optimized) file\n\ +--encrypt options -- generate an encrypted file\n\ +--decrypt remove any encryption on the file\n\ +\n\ +If neither --encrypt or --decrypt are given, qpdf will preserve any\n\ +encryption data associated with a file.\n\ +\n\ +\n\ +Encryption Options\n\ +------------------\n\ +\n\ + --encrypt user-password owner-password key-length flags --\n\ +\n\ +Note that -- terminates parsing of encryption flags.\n\ +\n\ +Either or both of the user password and the owner password may be\n\ +empty strings.\n\ +\n\ +key-length may be 40 or 128\n\ +\n\ +Additional flags are dependent upon key length.\n\ +\n\ + If 40:\n\ +\n\ + --print=[yn] allow printing\n\ + --modify=[yn] allow document modification\n\ + --extract=[yn] allow text/graphic extraction\n\ + --annotate=[yn] allow comments and form fill-in and signing\n\ +\n\ + If 128:\n\ +\n\ + --accessibility=[yn] allow accessibility to visually impaired\n\ + --extract=[yn] allow other text/graphic extraction\n\ + --print=print-opt control printing access\n\ + --modify=modify-opt control modify access\n\ +\n\ + print-opt may be:\n\ +\n\ + full allow full printing\n\ + low allow only low-resolution printing\n\ + none disallow printing\n\ +\n\ + modify-opt may be:\n\ +\n\ + all allow full document modification\n\ + annotate allow comment authoring and form operations\n\ + form allow form field fill-in and signing\n\ + assembly allow document assembly only\n\ + none allow no modifications\n\ +\n\ +The default for each permission option is to be fully permissive.\n\ +\n\ +\n\ +Advanced Transformation Options\n\ +-------------------------------\n\ +\n\ +These transformation options control fine points of how qpdf creates\n\ +the output file. Mostly these are of use only to people who are very\n\ +familiar with the PDF file format or who are PDF developers.\n\ +\n\ +--stream-data=option controls transformation of stream data (below)\n\ +--normalize-content=[yn] enables or disables normalization of content streams\n\ +--suppress-recovery prevents qpdf from attempting to recover damaged files\n\ +--object-streams=mode controls handing of object streams\n\ +--ignore-xref-streams tells qpdf to ignore any cross-reference streams\n\ +--qdf turns on \"QDF mode\" (below)\n\ +\n\ +Values for stream data options:\n\ +\n\ + compress recompress stream data when possible (default)\n\ + preserve leave all stream data as is\n\ + uncompress uncompress stream data when possible\n\ +\n\ +Values for object strea mode:\n\ +\n\ + preserve preserve original object streams (default)\n\ + disable don't write any object streams\n\ + generate use object streams wherever possible\n\ +\n\ +In qdf mode, by default, content normalization is turned on, and the\n\ +stream data mode is set to uncompress.\n\ +\n\ +\n\ +Testing, Inspection, and Debugging Options\n\ +------------------------------------------\n\ +\n\ +These options can be useful for digging into PDF files or for use in\n\ +automated test suites for software that uses the qpdf library.\n\ +\n\ +--static-id generate static /ID: FOR TESTING ONLY!\n\ +--show-encryption quickly show encryption parameters\n\ +--check-linearization check file integrity and linearization status\n\ +--show-linearization check and show all linearization data\n\ +--show-xref show the contents of the cross-reference table\n\ +--show-object=obj[,gen] show the contents of the given object\n\ + --raw-stream-data show raw stream data instead of object contents\n\ + --filtered-stream-data show filtered stream data instead of object contents\n\ +--show-pages shows the object/generation number for each page\n\ + --with-images also shows the object IDs for images on each page\n\ +--check check file structure + encryption, linearization\n\ +\n\ +The --raw-stream-data and --filtered-stream-data options are ignored\n\ +unless --show-object is given. Either of these options will cause the\n\ +stream data to be written to standard output.\n\ +\n\ +If --filtered-stream-data is given and --normalize-content=y is also\n\ +given, qpdf will attempt to normalize the stream data as if it is a\n\ +page content stream. This attempt will be made even if it is not a\n\ +page content stream, in which case it will produce unusuable results.\n\ +\n\ +\n"; + +void usage(std::string const& msg) +{ + std::cerr + << std::endl + << whoami << ": " << msg << std::endl + << std::endl + << "Usage: " << whoami << " [options] infile outfile" << std::endl + << "For detailed help, run " << whoami << " --help" << std::endl + << std::endl; + exit(2); +} + +static void show_encryption(QPDF& pdf) +{ + // Extract /P from /Encrypt + QPDFObjectHandle trailer = pdf.getTrailer(); + QPDFObjectHandle encrypt = trailer.getKey("/Encrypt"); + if (encrypt.isNull()) + { + std::cout << "File is not encrypted" << std::endl; + } + else + { + QPDFObjectHandle P = encrypt.getKey("/P"); + std::cout << "P = " << P.getIntValue() << std::endl; + std::string user_password = pdf.getUserPassword(); + QPDF::trim_user_password(user_password); + std::cout << "User password = " << user_password << std::endl; + } +} + +static void +parse_encrypt_options( + int argc, char* argv[], int& cur_arg, + std::string& user_password, std::string& owner_password, int& keylen, + bool& r2_print, bool& r2_modify, bool& r2_extract, bool& r2_annotate, + bool& r3_accessibility, bool& r3_extract, + QPDFWriter::r3_print_e& r3_print, QPDFWriter::r3_modify_e& r3_modify) +{ + if (cur_arg + 3 >= argc) + { + usage("insufficient arguments to --encrypt"); + } + user_password = argv[cur_arg++]; + owner_password = argv[cur_arg++]; + std::string len_str = argv[cur_arg++]; + if (len_str == "40") + { + keylen = 40; + } + else if (len_str == "128") + { + keylen = 128; + } + else + { + usage("encryption key length must be 40 or 128"); + } + while (1) + { + char* arg = argv[cur_arg]; + if (arg == 0) + { + usage("insufficient arguments to --encrypt"); + } + else if (strcmp(arg, "--") == 0) + { + return; + } + if (arg[0] == '-') + { + ++arg; + if (arg[0] == '-') + { + ++arg; + } + } + else + { + usage(std::string("invalid encryption parameter ") + arg); + } + ++cur_arg; + char* parameter = strchr(arg, '='); + if (parameter) + { + *parameter++ = 0; + } + if (strcmp(arg, "print") == 0) + { + if (parameter == 0) + { + usage("--print must be given as --print=option"); + } + std::string val = parameter; + if (keylen == 40) + { + if (val == "y") + { + r2_print = true; + } + else if (val == "n") + { + r2_print = false; + } + else + { + usage("invalid 40-bit -print parameter"); + } + } + else + { + if (val == "full") + { + r3_print = QPDFWriter::r3p_full; + } + else if (val == "low") + { + r3_print = QPDFWriter::r3p_low; + } + else if (val == "none") + { + r3_print = QPDFWriter::r3p_none; + } + else + { + usage("invalid 128-bit -print parameter"); + } + } + } + else if (strcmp(arg, "modify") == 0) + { + if (parameter == 0) + { + usage("--modify must be given as --modify=option"); + } + std::string val = parameter; + if (keylen == 40) + { + if (val == "y") + { + r2_modify = true; + } + else if (val == "n") + { + r2_modify = false; + } + else + { + usage("invalid 40-bit -modify parameter"); + } + } + else + { + if (val == "all") + { + r3_modify = QPDFWriter::r3m_all; + } + else if (val == "annotate") + { + r3_modify = QPDFWriter::r3m_annotate; + } + else if (val == "form") + { + r3_modify = QPDFWriter::r3m_form; + } + else if (val == "assembly") + { + r3_modify = QPDFWriter::r3m_assembly; + } + else if (val == "none") + { + r3_modify = QPDFWriter::r3m_none; + } + else + { + usage("invalid 128-bit -modify parameter"); + } + } + } + else if (strcmp(arg, "extract") == 0) + { + if (parameter == 0) + { + usage("--extract must be given as --extract=option"); + } + std::string val = parameter; + bool result = false; + if (val == "y") + { + result = true; + } + else if (val == "n") + { + result = false; + } + else + { + usage("invalid -extract parameter"); + } + if (keylen == 40) + { + r2_extract = result; + } + else + { + r3_extract = result; + } + } + else if (strcmp(arg, "annotate") == 0) + { + if (parameter == 0) + { + usage("--annotate must be given as --annotate=option"); + } + std::string val = parameter; + bool result = false; + if (val == "y") + { + result = true; + } + else if (val == "n") + { + result = false; + } + else + { + usage("invalid -annotate parameter"); + } + if (keylen == 40) + { + r2_annotate = result; + } + else + { + usage("-annotate invalid for 128-bit keys"); + } + } + else if (strcmp(arg, "accessibility") == 0) + { + if (parameter == 0) + { + usage("--accessibility must be given as" + " --accessibility=option"); + } + std::string val = parameter; + bool result = false; + if (val == "y") + { + result = true; + } + else if (val == "n") + { + result = false; + } + else + { + usage("invalid -accessibility parameter"); + } + if (keylen == 128) + { + r3_accessibility = result; + } + else + { + usage("-accessibility invalid for 40-bit keys"); + } + } + else + { + usage(std::string("invalid encryption parameter --") + arg); + } + } +} + +int main(int argc, char* argv[]) +{ + if ((whoami = strrchr(argv[0], '/')) == NULL) + { + whoami = argv[0]; + } + else + { + ++whoami; + } + // For libtool's sake.... + if (strncmp(whoami, "lt-", 3) == 0) + { + whoami += 3; + } + + if ((argc == 2) && (strcmp(argv[1], "--version") == 0)) + { + // make_dist looks for the line of code here that actually + // prints the version number, so read make_dist if you change + // anything other than the version number. Don't worry about + // the numbers. That's just a guide to 80 columns so that the + // help message looks right on an 80-column display. + + // 1 2 3 4 5 6 7 8 + // 12345678901234567890123456789012345678901234567890123456789012345678901234567890 + std::cout + << whoami << " version 2.0" << std::endl + << "Copyright (c) 2005-2008 Jay Berkenbilt" + << std::endl + << "This software may be distributed under the terms of version 2 of the" + << std::endl + << "Artistic License which may be found in the source distribution. It is" + << std::endl + << "provided \"as is\" without express or implied warranty." + << std::endl; + exit(0); + } + + if ((argc == 2) && (strcmp(argv[1], "--help") == 0)) + { + std::cout << help; + exit(0); + } + + char const* password = ""; + bool linearize = false; + bool decrypt = false; + + bool encrypt = false; + std::string user_password; + std::string owner_password; + int keylen = 0; + bool r2_print = true; + bool r2_modify = true; + bool r2_extract = true; + bool r2_annotate = true; + bool r3_accessibility = true; + bool r3_extract = true;; + QPDFWriter::r3_print_e r3_print = QPDFWriter::r3p_full; + QPDFWriter::r3_modify_e r3_modify = QPDFWriter::r3m_all; + + bool stream_data_set = false; + QPDFWriter::stream_data_e stream_data_mode = QPDFWriter::s_compress; + bool normalize_set = false; + bool normalize = false; + bool suppress_recovery = false; + bool object_stream_set = false; + QPDFWriter::object_stream_e object_stream_mode = QPDFWriter::o_preserve; + bool ignore_xref_streams = false; + bool qdf_mode = false; + + bool static_id = false; + bool show_encryption = false; + bool check_linearization = false; + bool show_linearization = false; + bool show_xref = false; + int show_obj = 0; + int show_gen = 0; + bool show_raw_stream_data = false; + bool show_filtered_stream_data = false; + bool show_pages = false; + bool show_page_images = false; + bool check = false; + + bool require_outfile = true; + char const* infilename = 0; + char const* outfilename = 0; + + for (int i = 1; i < argc; ++i) + { + char const* arg = argv[i]; + if ((arg[0] == '-') && (strcmp(arg, "-") != 0)) + { + ++arg; + if (arg[0] == '-') + { + // Be lax about -arg vs --arg + ++arg; + } + char* parameter = strchr(arg, '='); + if (parameter) + { + *parameter++ = 0; + } + + if (strcmp(arg, "password") == 0) + { + if (parameter == 0) + { + usage("--password must be given as --password=pass"); + } + password = parameter; + } + else if (strcmp(arg, "linearize") == 0) + { + linearize = true; + } + else if (strcmp(arg, "encrypt") == 0) + { + parse_encrypt_options( + argc, argv, ++i, + user_password, owner_password, keylen, + r2_print, r2_modify, r2_extract, r2_annotate, + r3_accessibility, r3_extract, r3_print, r3_modify); + encrypt = true; + } + else if (strcmp(arg, "decrypt") == 0) + { + decrypt = true; + } + else if (strcmp(arg, "stream-data") == 0) + { + if (parameter == 0) + { + usage("--stream-data must be given as" + "--stream-data=option"); + } + stream_data_set = true; + if (strcmp(parameter, "compress") == 0) + { + stream_data_mode = QPDFWriter::s_compress; + } + else if (strcmp(parameter, "preserve") == 0) + { + stream_data_mode = QPDFWriter::s_preserve; + } + else if (strcmp(parameter, "uncompress") == 0) + { + stream_data_mode = QPDFWriter::s_uncompress; + } + else + { + usage("invalid stream-data option"); + } + } + else if (strcmp(arg, "normalize-content") == 0) + { + if ((parameter == 0) || (*parameter == '\0')) + { + usage("--normalize-content must be given as" + " --normalize-content=[yn]"); + } + normalize_set = true; + normalize = (parameter[0] == 'y'); + } + else if (strcmp(arg, "suppress-recovery") == 0) + { + suppress_recovery = true; + } + else if (strcmp(arg, "object-streams") == 0) + { + if (parameter == 0) + { + usage("--object-streams must be given as" + " --object-streams=option"); + } + object_stream_set = true; + if (strcmp(parameter, "disable") == 0) + { + object_stream_mode = QPDFWriter::o_disable; + } + else if (strcmp(parameter, "preserve") == 0) + { + object_stream_mode = QPDFWriter::o_preserve; + } + else if (strcmp(parameter, "generate") == 0) + { + object_stream_mode = QPDFWriter::o_generate; + } + else + { + usage("invalid object stream mode"); + } + } + else if (strcmp(arg, "ignore-xref-streams") == 0) + { + ignore_xref_streams = true; + } + else if (strcmp(arg, "qdf") == 0) + { + qdf_mode = true; + } + else if (strcmp(arg, "static-id") == 0) + { + static_id = true; + } + else if (strcmp(arg, "show-encryption") == 0) + { + show_encryption = true; + require_outfile = false; + } + else if (strcmp(arg, "check-linearization") == 0) + { + check_linearization = true; + require_outfile = false; + } + else if (strcmp(arg, "show-linearization") == 0) + { + show_linearization = true; + require_outfile = false; + } + else if (strcmp(arg, "show-xref") == 0) + { + show_xref = true; + require_outfile = false; + } + else if (strcmp(arg, "show-object") == 0) + { + if (parameter == 0) + { + usage("--show-object must be given as" + " --show-object=obj[,gen]"); + } + char* obj = parameter; + char* gen = obj; + if ((gen = strchr(obj, ',')) != 0) + { + *gen++ = 0; + show_gen = atoi(gen); + } + show_obj = atoi(obj); + require_outfile = false; + } + else if (strcmp(arg, "raw-stream-data") == 0) + { + show_raw_stream_data = true; + } + else if (strcmp(arg, "filtered-stream-data") == 0) + { + show_filtered_stream_data = true; + } + else if (strcmp(arg, "show-pages") == 0) + { + show_pages = true; + require_outfile = false; + } + else if (strcmp(arg, "with-images") == 0) + { + show_page_images = true; + } + else if (strcmp(arg, "check") == 0) + { + check = true; + require_outfile = false; + } + else + { + usage(std::string("unknown option --") + arg); + } + } + else if (infilename == 0) + { + infilename = arg; + } + else if (outfilename == 0) + { + outfilename = arg; + } + else + { + usage(std::string("unknown argument ") + arg); + } + } + + if (infilename == 0) + { + usage("an input file name is required"); + } + else if (require_outfile && (outfilename == 0)) + { + usage("an output file name is required; use - for standard output"); + } + else if ((! require_outfile) && (outfilename != 0)) + { + usage("no output file may be given for this option"); + } + + try + { + QPDF pdf; + if (ignore_xref_streams) + { + pdf.setIgnoreXRefStreams(true); + } + if (suppress_recovery) + { + pdf.setAttemptRecovery(false); + } + pdf.processFile(infilename, password); + if (outfilename == 0) + { + if (show_encryption) + { + ::show_encryption(pdf); + } + if (check_linearization) + { + if (pdf.checkLinearization()) + { + std::cout << infilename << ": no linearization errors" + << std::endl; + } + else + { + exit(2); + } + } + if (show_linearization) + { + pdf.showLinearizationData(); + } + if (show_xref) + { + pdf.showXRefTable(); + } + if (show_obj > 0) + { + QPDFObjectHandle obj = pdf.getObjectByID(show_obj, show_gen); + if (obj.isStream()) + { + if (show_raw_stream_data || show_filtered_stream_data) + { + bool filter = show_filtered_stream_data; + if (filter && + (! obj.pipeStreamData(0, true, false, false))) + { + QTC::TC("qpdf", "unable to filter"); + std::cerr << "Unable to filter stream data." + << std::endl; + exit(2); + } + else + { + Pl_StdioFile out("stdout", stdout); + obj.pipeStreamData(&out, filter, normalize, false); + } + } + else + { + std::cout + << "Object is stream. Dictionary:" << std::endl + << obj.getDict().unparseResolved() << std::endl; + } + } + else + { + std::cout << obj.unparseResolved() << std::endl; + } + } + if (show_pages) + { + std::vector<QPDFObjectHandle> pages = pdf.getAllPages(); + int pageno = 0; + for (std::vector<QPDFObjectHandle>::iterator iter = + pages.begin(); + iter != pages.end(); ++iter) + { + QPDFObjectHandle& page = *iter; + ++pageno; + + std::cout << "page " << pageno << ": " + << page.getObjectID() << " " + << page.getGeneration() << " R" << std::endl; + if (show_page_images) + { + std::map<std::string, QPDFObjectHandle> images = + page.getPageImages(); + if (! images.empty()) + { + std::cout << " images:" << std::endl; + for (std::map<std::string, + QPDFObjectHandle>::iterator + iter = images.begin(); + iter != images.end(); ++iter) + { + std::string const& name = (*iter).first; + QPDFObjectHandle image = (*iter).second; + QPDFObjectHandle dict = image.getDict(); + int width = + dict.getKey("/Width").getIntValue(); + int height = + dict.getKey("/Height").getIntValue(); + std::cout << " " << name << ": " + << image.unparse() + << ", " << width << " x " << height + << std::endl; + } + } + } + + std::cout << " content:" << std::endl; + std::vector<QPDFObjectHandle> content = + page.getPageContents(); + for (std::vector<QPDFObjectHandle>::iterator iter = + content.begin(); + iter != content.end(); ++iter) + { + std::cout << " " << (*iter).unparse() << std::endl; + } + } + } + if (check) + { + bool okay = false; + std::cout << "checking " << infilename << std::endl; + try + { + ::show_encryption(pdf); + if (pdf.isLinearized()) + { + std::cout << "File is linearized\n"; + okay = pdf.checkLinearization(); + // any errors are reported by checkLinearization(). + } + else + { + std::cout << "File is not linearized\n"; + // calling flattenScalarReferences causes full + // traversal of file, so any structural errors + // would be exposed. + pdf.flattenScalarReferences(); + okay = true; + } + } + catch (std::exception& e) + { + std::cout << e.what() << std::endl; + } + if (okay) + { + std::cout << "No errors found" << std::endl; + } + } + } + else + { + if (strcmp(outfilename, "-") == 0) + { + outfilename = 0; + } + QPDFWriter w(pdf, outfilename); + if (qdf_mode) + { + w.setQDFMode(true); + } + if (normalize_set) + { + w.setContentNormalization(normalize); + } + if (stream_data_set) + { + w.setStreamDataMode(stream_data_mode); + } + if (decrypt) + { + w.setPreserveEncryption(false); + } + if (static_id) + { + w.setStaticID(true); + } + if (encrypt) + { + if (keylen == 40) + { + w.setR2EncryptionParameters( + user_password.c_str(), owner_password.c_str(), + r2_print, r2_modify, r2_extract, r2_annotate); + } + else if (keylen == 128) + { + w.setR3EncryptionParameters( + user_password.c_str(), owner_password.c_str(), + r3_accessibility, r3_extract, r3_print, r3_modify); + } + else + { + throw QEXC::Internal("bad encryption keylen"); + } + } + if (linearize) + { + w.setLinearization(true); + } + if (object_stream_set) + { + w.setObjectStreamMode(object_stream_mode); + } + w.write(); + } + } + catch (std::exception& e) + { + std::cerr << e.what() << std::endl; + exit(2); + } + + return 0; +} diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov new file mode 100644 index 00000000..e6323600 --- /dev/null +++ b/qpdf/qpdf.testcov @@ -0,0 +1,117 @@ +ignored-scope: libtests +QPDF lindict null found 0 +QPDF lindict searching after null 0 +QPDF err expected endobj 0 +QPDF err wrong objid/generation 0 +QPDF check objid 1 +QPDF check generation 1 +QPDF check obj 1 +QPDF hint table length indirect 0 +QPDF hint table length direct 0 +QPDF P absent in lindict 0 +QPDF P present in lindict 0 +QPDF expected n n obj 0 +QPDF lindict found newline 0 +QPDF /L mismatch 0 +QPDF err /T mismatch 0 +QPDF err /O mismatch 0 +QPDF opt direct pages resource 1 +QPDF opt inheritable keys 0 +QPDF opt no inheritable keys 0 +QPDF opt erase empty key ancestor 0 +QPDF opt resource inherited 0 +QPDF opt page resource hides ancestor 0 +QPDF opt key ancestors depth > 1 0 +QPDF opt loop detected 0 +QPDF categorize pagemode present 1 +QPDF categorize pagemode outlines 1 +QPDF warn /E mismatch 0 +QPDF lin outlines in part 1 +QPDF lin nshared_total > nshared_first_page 1 +QPDF lin part 8 empty 1 +QPDF lin check shared past first page 0 +QPDF opt flatten array scalar 0 +QPDF opt flatten dict scalar 0 +main QTest implicit 0 +main QTest indirect 1 +main QTest null 0 +main QTest bool 1 +main QTest int 0 +main QTest real 0 +main QTest name 0 +main QTest string 0 +main QTest array 0 +main QTest array indirect 1 +main QTest dictionary 0 +main QTest dictionary indirect 1 +main QTest stream 0 +QPDFWriter write to stdout 0 +QPDFWriter write to file 0 +QPDF lin write nshared_total > nshared_first_page 1 +QPDFWriter encrypted hint stream 0 +QPDF opt inherited scalar 0 +QPDF xref reused object 0 +QPDF xref gen > 0 1 +QPDF xref size mismatch 0 +QPDF not a pdf file 0 +QPDF can't find startxref 0 +QPDF invalid xref 0 +QPDF invalid xref entry 0 +QPDF missing trailer 0 +QPDF trailer lacks size 0 +QPDF trailer size not integer 0 +QPDF trailer prev not integer 0 +QPDF bad brace 0 +QPDF bad array close 0 +QPDF dictionary odd number of elements 0 +QPDF stream without length 0 +QPDF stream length not integer 0 +QPDF missing endstream 0 +QPDF bad dictionary close 0 +QPDF can't find xref 0 +QPDF_Tokenizer bad ) 0 +QPDF_Tokenizer bad > 0 +QPDF_Tokenizer bad ( 0 +QPDF_Tokenizer null in name 0 +QPDF_Tokenizer bad name 0 +QPDF_Stream invalid filter 0 +QPDF UseOutlines but no Outlines 0 +QPDFObjectHandle clone bool 0 +QPDFObjectHandle clone null 0 +QPDFObjectHandle clone integer 0 +QPDFObjectHandle clone real 0 +QPDFObjectHandle clone name 0 +QPDFObjectHandle clone string 0 +QPDFObjectHandle clone array 0 +QPDFObjectHandle clone dictionary 0 +QPDFObjectHandle makeDirect loop 0 +QPDFObjectHandle ERR clone stream 0 +QPDFTokenizer allow pound anywhere in name 0 +QPDF indirect last obj from xref 1 +QPDF default for xref stream field 0 0 +QPDF prev key in xref stream dictionary 0 +QPDF prev key in trailer dictionary 0 +QPDF found xref stream 0 +QPDF ignoring XRefStm in trailer 0 +QPDF xref deleted object 0 +QPDF_Stream PNG filter 0 +QPDF xref /Index is null 0 +QPDF xref /Index is array 1 +QPDFWriter copy Extends 0 +QPDFWriter encrypt object stream 0 +QPDFWriter uncompressing page dictionary 0 +QPDFWriter uncompressing root 0 +QPDFWriter compressing uncompressed stream 0 +QPDF exclude indirect length 0 +QPDFWriter generate >1 ostream 0 +QPDF exclude encryption dictionary 0 +QPDF loop detected traversing objects 0 +QPDF reconstructed xref table 0 +QPDF recovered in readObjectAtOffset 0 +QPDF recovered stream length 0 +QPDF found wrong endstream in recovery 0 +QPDFObjectHandle indirect to unknown 0 +QPDF_Stream pipeStreamData with null pipeline 0 +QPDFWriter not recompressing /FlateDecode 0 +QPDF piping xref stream from encrypted file 0 +unable to filter 0 diff --git a/qpdf/qtest/qpdf.test b/qpdf/qtest/qpdf.test new file mode 100644 index 00000000..d3aeded6 --- /dev/null +++ b/qpdf/qtest/qpdf.test @@ -0,0 +1,942 @@ +#!/usr/bin/env perl +require 5.008; +BEGIN { $^W = 1; } +use strict; +use File::Copy; +use File::Basename; +use Cwd; +use Digest::MD5; + +chdir("qpdf") or die "chdir testdir failed: $!\n"; + +require TestDriver; + +cleanup(); + +my $td = new TestDriver('qpdf'); + +my $compare_images = 1; +if ((exists $ENV{'SKIP_TEST_COMPARE_IMAGES'}) && + ($ENV{'SKIP_TEST_COMPARE_IMAGES'} eq '1')) +{ + $compare_images = 0; +} + +my $have_acroread = 0; + +if ($compare_images) +{ + # check for acroread + my @path = split(':', $ENV{'PATH'}); + foreach my $p (@path) + { + if (-x "$p/acroread") + { + $have_acroread = 1; + last; + } + } +} + +# These variables are used to store the total number of tests in the +# test suite. NOTE: qtest's requirement to indicate the number of +# tests serves as a check that the test suite is operating properly. +# Do not calculate these values as a side effect of running the tests. +# That defeats the purpose. However, since this test suite consists +# of several separate series of tests, many of which iterate over +# static lists of things, we calculate the numbers as we go in terms +# of static values. + +# This should be set to the number of times we called compare_pdfs. +# This has to be kept separate because the number of test cases +# compare_pdfs generates depends on the value of $compare_images. +my $n_compare_pdfs = 0; + +# This should be set to the number of times we call acroread. +my $n_acroread = 0; + +# Each section of tests should increment this number by the number of +# tests they generate excluding calls to acroread or compare_pdfs, +# which are tracked separately by $n_compare_pdfs and $n_acroread. +my $n_tests = 0; + +# Call show_ntests after each block of test cases. In show_ntests, +# you can turn on printing of the expected number of test cases. This +# is useful for tracking down problems in the number of test cases. + +show_ntests(); +# ---------- + +$n_compare_pdfs += 5; + +# Check compare_pdfs to make sure that it works properly. Each call +# to compare_pdfs is worth three test cases. +compare_pdfs("p1-a-p2-b.pdf", "p1-a-p2-b.pdf"); +compare_pdfs("p1-a.pdf", "p1-a.pdf"); +compare_pdfs("p1-a.pdf", "p1-b.pdf", 1); +compare_pdfs("p1-a.pdf", "p1-a-p2-b.pdf", 1); +compare_pdfs("p1-a-p2-a.pdf", "p1-a-p2-b.pdf", 1); +flush_tiff_cache(); + +show_ntests(); +# ---------- +$td->notify("--- Miscellaneous Tests ---"); +$n_tests += 3; + +foreach (my $i = 1; $i <= 3; ++$i) +{ + $td->runtest("misc tests", + {$td->COMMAND => "test_driver 5 misc-$i.pdf"}, + {$td->FILE => "misc-$i.out", $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +} + +show_ntests(); +# ---------- +$td->notify("--- Error Condition Tests ---"); +# $n_tests incremented after initialization of badfiles below. + +my @badfiles = ("not a PDF file", # 1 + "no startxref", # 2 + "bad primary xref offset", # 3 + "invalid xref syntax", # 4 + "invalid xref entry", # 5 + "free table inconsistency", # 6 + "no trailer dictionary", # 7 + "bad secondary xref", # 8 + "no /Size in trailer", # 9 + "/Size not integer", # 10 + "/Prev not integer", # 11 + "/Size inconsistency", # 12 + "bad {", # 13 + "bad }", # 14 + "bad ]", # 15 + "bad >>", # 16 + "odd number of dictionary items", # 17 + "bad )", # 18 + "bad >", # 19 + "invalid hexstring character", # 20 + "invalid name token", # 21 + "no /Length for stream dictionary", # 22 + "/Length not integer", # 23 + "expected endstream", # 24 + "bad obj declaration (objid)", # 25 + "bad obj declaration (generation)", # 26 + "bad obj declaration (obj)", # 27 + "expected endobj", # 28 + "null in name", # 29 + "invalid stream /Filter", # 30 + "unknown stream /Filter", # 31 + "obj/gen mismatch", # 32 + ); + +$n_tests += @badfiles; + +# Test 6 contains errors in the free table consistency, but we no +# longer have any consistency check for this since it is not important +# neither Acrobat nor other PDF viewers really care. Tests 12 and 28 +# have error conditions that used to be fatal but are now considered +# non-fatal. +my %badtest_overrides = (6 => 0, 12 => 0, 28 => 0, 31 => 0); +for (my $i = 1; $i <= scalar(@badfiles); ++$i) +{ + my $status = $badtest_overrides{$i}; + $status = 2 unless defined $status; + $td->runtest($badfiles[$i-1], + {$td->COMMAND => "test_driver 0 bad$i.pdf"}, + {$td->FILE => "bad$i.out", + $td->EXIT_STATUS => $status}, + $td->NORMALIZE_NEWLINES); +} + +show_ntests(); +# ---------- +$td->notify("--- Recovery Tests ---"); +$n_tests += @badfiles + 2; + +# Recovery tests. These are mostly after-the-fact -- when recovery +# was implemented, some degree of recovery was possible on many of the +# files. Mostly the recovery does not actually repair the error, +# though in some cases it may. Acrobat Reader would not be able to +# recover any of these files any better. +my %recover_failures = (); +for (1, 7, 13..21, 24..27, 29..30) +{ + $recover_failures{$_} = 1; +} +for (my $i = 1; $i <= scalar(@badfiles); ++$i) +{ + my $status = 0; + if (exists $recover_failures{$i}) + { + $status = 2; + } + $td->runtest("recover " . $badfiles[$i-1], + {$td->COMMAND => "test_driver 1 bad$i.pdf"}, + {$td->FILE => "bad$i-recover.out", + $td->EXIT_STATUS => $status}, + $td->NORMALIZE_NEWLINES); +} + +# This heifer file was a real file that contained errors that Acrobat +# Reader can recover. We can recover it too. +$td->runtest("recover heifer file", + {$td->COMMAND => "qpdf --static-id -qdf heifer.pdf a.pdf"}, + {$td->FILE => "heifer.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check output", + {$td->FILE => "a.pdf"}, + {$td->FILE => "heifer.qdf"}); + +show_ntests(); +# ---------- +$td->notify("--- Basic Parsing Tests ---"); +# $n_tests incremented below after initialization of @goodfiles. + +my @goodfiles = ("implicit null", # 1 + "direct null", # 2 + "unresolved null", # 3 + "indirect null", # 4 + "indirect bool", # 5 + "direct bool", # 6 + "integer", # 7 + "real, ASCIIHexDecode", # 8 + "string", # 9 + "array", # 10 + "dictionary", # 11 + "stream", # 12 + "nesting, strings, names", # 13 + "tokenizing pipeline", # 14 + "name", # 15 + "object-stream", # 16 + "hybrid xref", # 17 + "hybrid xref old mode", # 18 + "xref with prev", # 19 + "lots of compressible objects", # 20 + ); + +$n_tests += (9 * @goodfiles) + 6; + +my %goodtest_overrides = ('14' => 3); +my %goodtest_flags = + ('18' => '-ignore-xref-streams', + '20' => '-object-streams=generate', + ); +for (my $i = 1; $i <= scalar(@goodfiles); ++$i) +{ + my $n = $goodtest_overrides{$i} || 1; + foreach my $lang (qw(C en_US en_US.UTF-8)) + { + $td->runtest("$goodfiles[$i-1], ($lang)", + {$td->COMMAND => "test_driver $n good$i.pdf"}, + {$td->FILE => "good$i.out", + $td->EXIT_STATUS => 0}); + my $xflags = $goodtest_flags{$i} || ''; + check_pdf("create qdf", + "qpdf --static-id -qdf $xflags good$i.pdf", + "good$i.qdf", 0); + } +} + +check_pdf("no normalization", + "qpdf -qdf --static-id --normalize-content=n good7.pdf", + "good7-not-normalized.qdf", + 0); + +check_pdf("no qdf", + "qpdf --static-id good17.pdf", + "good17-not-qdf.pdf", + 0); + +check_pdf("no recompression", + "qpdf --static-id --stream-data=preserve good17.pdf", + "good17-not-recompressed.pdf", + 0); + +show_ntests(); +# ---------- +$td->notify("--- Object Stream Tests ---"); +$n_tests += 36 * 4; +$n_compare_pdfs += 36; + +for (my $n = 16; $n <= 19; ++$n) +{ + my $in = "good$n.pdf"; + foreach my $flags ('-object-streams=disable', + '-object-streams=preserve', + '-object-streams=generate') + { + foreach my $qdf ('-qdf', '', '-encrypt "" x 128 --') + { + # 4 tests + 1 compare_pdfs + $td->runtest("object stream mode", + {$td->COMMAND => + "qpdf --static-id $flags $qdf $in a.pdf"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + compare_pdfs("good$n.pdf", "a.pdf"); + $td->runtest("convert to qdf", + {$td->COMMAND => + "qpdf --static-id -qdf -decrypt" . + " -object-streams=disable $in a.qdf"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + $td->runtest("convert output to qdf", + {$td->COMMAND => + "qpdf --static-id -qdf" . + " -object-streams=disable a.pdf b.qdf"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + $td->runtest("compare files", + {$td->FILE => "a.qdf"}, + {$td->FILE => "b.qdf"}); + } + } + flush_tiff_cache(); +} + +show_ntests(); +# ---------- +$td->notify("--- Specific File Tests ---"); +$n_tests += 1; + +# Special PDF files that caused problems at some point + +# This file is a PDF 1.1 file with /# as a name and with +# inconsistencies in its free table. +$td->runtest("old and complex", + {$td->COMMAND => "qpdf --check old-and-complex.pdf"}, + {$td->STRING => +("checking old-and-complex.pdf\n" . + "File is not encrypted\n" . + "File is not linearized\n" . + "No errors found\n"), + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +show_ntests(); +# ---------- +$td->notify("--- Mutability Tests ---"); +$n_tests += 4; + +$td->runtest("no normalization", + {$td->COMMAND => "test_driver 4 test4-1.pdf"}, + {$td->FILE => "test4-1.qdf", + $td->EXIT_STATUS => 0}); + +$td->runtest("object ordering", + {$td->COMMAND => "test_driver 4 test4-4.pdf"}, + {$td->FILE => "test4-4.qdf", + $td->EXIT_STATUS => 0}); + +$td->runtest("loop detected", + {$td->COMMAND => "test_driver 4 test4-2.pdf"}, + {$td->FILE => "test4-2.out", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); + +$td->runtest("stream detected", + {$td->COMMAND => "test_driver 4 test4-3.pdf"}, + {$td->FILE => "test4-3.out", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); + +show_ntests(); +# ---------- +$td->notify("--- Extraction Tests ---"); +$n_tests += 11; + +$td->runtest("show xref", + {$td->COMMAND => "qpdf encrypted-with-images.pdf" . + " --show-xref"}, + {$td->FILE => "show-xref.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +$td->runtest("show pages", + {$td->COMMAND => "qpdf encrypted-with-images.pdf" . + " --show-pages"}, + {$td->FILE => "show-pages.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +$td->runtest("show-pages-images", + {$td->COMMAND => "qpdf encrypted-with-images.pdf" . + " --show-pages --with-images"}, + {$td->FILE => "show-pages-images.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +$td->runtest("show-page-1", + {$td->COMMAND => "qpdf encrypted-with-images.pdf" . + " --show-object=5,0"}, + {$td->FILE => "show-page-1.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +$td->runtest("show-page-1-content-raw", + {$td->COMMAND => "qpdf encrypted-with-images.pdf" . + " --show-object=7 --raw-stream-data"}, + {$td->FILE => "show-page-1-content-raw.out", + $td->EXIT_STATUS => 0}); + +$td->runtest("show-page-1-content-filtered", + {$td->COMMAND => "qpdf encrypted-with-images.pdf" . + " --show-object=7 --filtered-stream-data"}, + {$td->FILE => "show-page-1-content-filtered.out", + $td->EXIT_STATUS => 0}); + +$td->runtest("show-page-1-content-normalized", + {$td->COMMAND => "qpdf encrypted-with-images.pdf" . + " --show-object=7,0 --filtered-stream-data --normalize-content=y"}, + {$td->FILE => "show-page-1-content-normalized.out", + $td->EXIT_STATUS => 0}); + +$td->runtest("show-page-1-image", + {$td->COMMAND => "qpdf encrypted-with-images.pdf" . + " --show-object=8 --raw-stream-data"}, + {$td->FILE => "show-page-1-image.out", + $td->EXIT_STATUS => 0}); + +$td->runtest("unfilterable stream data", + {$td->COMMAND => "qpdf encrypted-with-images.pdf" . + " --show-object=8 --filtered-stream-data"}, + {$td->FILE => "show-unfilterable.out", + $td->EXIT_STATUS => 2}); + +$td->runtest("show-xref-by-id", + {$td->COMMAND => "qpdf encrypted-with-images.pdf" . + " --show-object=12"}, + {$td->FILE => "show-xref-by-id.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +$td->runtest("show-xref-by-id-filtered", + {$td->COMMAND => "qpdf encrypted-with-images.pdf" . + " --show-object=12 --filtered-stream-data"}, + {$td->FILE => "show-xref-by-id-filtered.out", + $td->EXIT_STATUS => 0}); + +show_ntests(); +# ---------- +$td->notify("--- Linearization Tests ---"); +# $n_tests incremented after initialization of @linearized_files and +# @to_linearize. + +# *'ed files were linearized with Pdlin. +my @linearized_files = + ('lin0', # not linearized + 'lin1', # * outlines, page labels, pdlin + 'lin2', # * lin1 with null and newline + 'lin3', # same file saved with acrobat + 'lin4', # * lin1 with no /PageMode + 'lin5', # lin3 with embedded thumbnails + 'lin6', # * lin5 with pdlin + 'lin7', # lin5 with /PageMode /UseThumbs + 'lin8', # * lin7 with pdlin + 'lin9', # * shared objects, indirect null + 'badlin1', # parameter dictionary errors + ); + +my @to_linearize = + ('lin-special', # lots of weird cases -- see file comments + 'delete-and-reuse', # deleted, reused objects + 'lin-delete-and-reuse', # linearized, then delete and reuse + 'object-stream', # contains object streams + 'hybrid-xref', # contains both xref tables and streams + @linearized_files, # we should be able to relinearize + ); + +$n_tests += @linearized_files + 6; +$n_tests += (3 * @to_linearize * 5) + 6; + +foreach my $base (@linearized_files) +{ + $td->runtest("dump linearization: $base", + {$td->COMMAND => "qpdf --show-linearization $base.pdf"}, + {$td->FILE => "$base.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +} + +# Check normal modified and linearized modified files, making sure +# that their qdf files are identical. The next two tests have the +# same expected output files and different input files. +check_pdf("modified", + "qpdf --static-id --qdf delete-and-reuse.pdf", + "delete-and-reuse.qdf", + 0); +check_pdf("linearized and modified", + "qpdf --static-id --qdf lin-delete-and-reuse.pdf", + "delete-and-reuse.qdf", # not lin-delete-and-reuse.qdf + 0); + +$td->runtest("check linearized and modified", + {$td->COMMAND => "qpdf --check lin-delete-and-reuse.pdf"}, + {$td->STRING => +("checking lin-delete-and-reuse.pdf\n" . + "File is not encrypted\n" . + "File is not linearized\n" . + "No errors found\n"), + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check multiple modifications", + {$td->COMMAND => "qpdf --check multiple-mods.pdf"}, + {$td->STRING => +("checking multiple-mods.pdf\n" . + "File is not encrypted\n" . + "File is not linearized\n" . + "No errors found\n"), + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +foreach my $base (@to_linearize) +{ + foreach my $omode (qw(disable preserve generate)) + { + my $oarg = "-object-streams=$omode"; + $td->runtest("linearize $base ($omode)", + {$td->COMMAND => + "qpdf -linearize $oarg --static-id $base.pdf a.pdf"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + $td->runtest("check linearization", + {$td->COMMAND => "qpdf --check-linearization a.pdf"}, + {$td->STRING => "a.pdf: no linearization errors\n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + # Relinearizing twice should produce identical results. We + # have to do it twice because, if objects changed ordering + # during the original linearization, the hint tables won't + # exactly match. This is because object identifiers are + # inserted into the hint table in their original order since + # we don't yet have renumbering information when we compute + # the table values. + $td->runtest("relinearize $base 1", + {$td->COMMAND => + "qpdf -linearize --static-id a.pdf b.pdf"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + $td->runtest("relinearize $base 2", + {$td->COMMAND => + "qpdf -linearize --static-id b.pdf c.pdf"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + $td->runtest("compare files ($omode)", + {$td->FILE => "b.pdf"}, + {$td->FILE => "c.pdf"}); + if (($base eq 'lin-special') || ($base eq 'object-stream')) + { + $td->runtest("check $base ($omode)", + {$td->FILE => "a.pdf"}, + {$td->FILE => "$base.$omode.exp"}); + } + } +} + +show_ntests(); +# ---------- +$td->notify("--- Encryption Tests ---"); +# $n_tests incremented below + +# The enc-file.pdf files were encrypted using Acrobat 5.0, not the +# qpdf library. The files are decrypted using qpdf, then re-encrypted +# using qpdf with specific flags. The /P value is checked. The +# resulting files were saved and manually checked with Acrobat 5.0 to +# ensure that the security settings were as intended. + +# Values: basename, password, encryption flags, /P Encrypt key. +my @encrypted_files = + (['base', ''], + ['R3,V2', '', + '-accessibility=n -extract=n -print=full -modify=all', -532], + ['R3,V2,U=view', 'view', + '-accessibility=y -extract=n -print=none -modify=none', -3392], + ['R3,V2,O=master', 'master', + '-accessibility=n -extract=y -print=none -modify=annotate', -2576], + ['R3,V2,O=master', '', + '-accessibility=n -extract=n -print=none -modify=form', -2624], + ['R3,V2,U=view,O=master', 'view', + '-accessibility=n -extract=n -print=none -modify=assembly', -2880], + ['R3,V2,U=view,O=master', 'master', + '-accessibility=n -print=low', -2564], + ['R2,V1', '', + '-print=n -modify=n -extract=n -annotate=n', -64], + ['R2,V1,U=view', 'view', + '-print=y -modify=n -extract=n -annotate=n', -60], + ['R2,V1,O=master', 'master', + '-print=n -modify=y -extract=n -annotate=n', -56], + ['R2,V1,O=master', '', + '-print=n -modify=n -extract=y -annotate=n', -48], + ['R2,V1,U=view,O=master', 'view', + '-print=n -modify=n -extract=n -annotate=y', -32], + ['R2,V1,U=view,O=master', 'master', + '', -4], + ['long-password', 'asdf asdf asdf asdf asdf asdf qwer'], + ['long-password', 'asdf asdf asdf asdf asdf asdf qw']); + +$n_tests += 3 + (2 * (@encrypted_files)) + (6 * (@encrypted_files - 3)) + 8; + +$td->runtest("encrypted file", + {$td->COMMAND => "test_driver 2 U25A0.pdf"}, + {$td->FILE => "encrypted1.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("preserve encryption", + {$td->COMMAND => "qpdf U25A0.pdf U25A0.enc"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); +$td->runtest("recheck encrypted file", + {$td->COMMAND => "test_driver 2 U25A0.enc"}, + {$td->FILE => "encrypted1.out", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +foreach my $d (@encrypted_files) +{ + my ($file, $pass, $xeflags, $P) = @$d; + # Test writing to stdout + $td->runtest("decrypt $file", + {$td->COMMAND => + "qpdf --static-id -qdf" . + " --password=\"$pass\" enc-$file.pdf -" . + " > $file.enc"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + if ($file eq 'base') + { + $td->runtest("check ID", + {$td->COMMAND => "perl check-ID.pl $file.enc"}, + {$td->STRING => "ID okay\n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + } + else + { + $td->runtest("check against base", + {$td->COMMAND => "./diff-encrypted base.enc $file.enc"}, + {$td->STRING => "okay\n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + } + if ($file =~ m/^R(\d),V(\d)(?:,U=(\w+))?(?:,O=(\w+))?$/) + { + my $R = $1; + my $V = $2; + my $upass = $3 || ""; + my $opass = $4 || ""; + my $bits = (($V == 2) ? 128 : 40); + + my $eflags = "-encrypt \"$upass\" \"$opass\" $bits $xeflags --"; + $td->runtest("encrypt $file", + {$td->COMMAND => + "qpdf --static-id -qdf $eflags $file.enc $file.enc2"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + $td->runtest("check /P", + {$td->COMMAND => + "qpdf --show-encryption --password=\"$pass\"" . + " $file.enc2"}, + {$td->STRING => "P = $P\nUser password = $upass\n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + $td->runtest("decrypt again", + {$td->COMMAND => + "qpdf --static-id -qdf --password=\"$pass\"" . + " $file.enc2 $file.enc3"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + $td->runtest("compare", + {$td->FILE => "$file.enc"}, + {$td->FILE => "$file.enc3"}); + $td->runtest("preserve encryption", + {$td->COMMAND => + "qpdf --static-id --password=\"$pass\"" . + " $file.enc2 $file.enc4"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + $td->runtest("check /P", + {$td->COMMAND => + "qpdf --show-encryption --password=\"$pass\"" . + " $file.enc4"}, + {$td->STRING => "P = $P\nUser password = $upass\n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + } +} + +$td->runtest("non-encrypted", + {$td->COMMAND => "qpdf --show-encryption enc-base.pdf"}, + {$td->STRING => "File is not encrypted\n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +$td->runtest("invalid password", + {$td->COMMAND => "qpdf -qdf --password=quack" . + " enc-R2,V1,U=view.pdf a.qdf"}, + {$td->STRING => "enc-R2,V1,U=view.pdf: invalid password\n", + $td->EXIT_STATUS => 2}, + $td->NORMALIZE_NEWLINES); + +# Test combinations of linearization and encryption. Note that we do +# content checks on encrypted and linearized files in various +# combinations below. Here we are just making sure that they are +# linearized and/or encrypted as desired. + +$td->runtest("linearize encrypted file", + {$td->COMMAND => "qpdf --linearize U25A0.pdf a.pdf"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); +$td->runtest("check encryption", + {$td->COMMAND => "qpdf --show-encryption a.pdf"}, + {$td->STRING => "P = -60\nUser password = \n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check linearization", + {$td->COMMAND => "qpdf --check-linearization a.pdf"}, + {$td->STRING => "a.pdf: no linearization errors\n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("linearize and encrypt file", + {$td->COMMAND => + "qpdf --linearize --encrypt user owner 128 --" . + " lin-special.pdf a.pdf"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); +$td->runtest("check encryption", + {$td->COMMAND => "qpdf --show-encryption --password=owner a.pdf"}, + {$td->STRING => "P = -4\nUser password = user\n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); +$td->runtest("check linearization", + {$td->COMMAND => "qpdf --check-linearization" . + " --password=user a.pdf"}, + {$td->STRING => "a.pdf: no linearization errors\n", + $td->EXIT_STATUS => 0}, + $td->NORMALIZE_NEWLINES); + +show_ntests(); +# ---------- +$td->notify("--- Content Preservation Tests ---"); +# $n_tests incremented below + +my @files = ("U25A0.pdf", # encrypted + "inline-images.pdf", + "lin-special.pdf", + "object-stream.pdf", + "hybrid-xref.pdf"); +my @flags = (["-qdf", # 1 + "qdf"], + ["-qdf --normalize-content=n", # 2 + "qdf not normalized"], + ["-qdf --stream-data=preserve", # 3 + "qdf not uncompressed"], + ["-qdf --stream-data=preserve --normalize-content=n", # 4 + "qdf not normalized or uncompressed"], + ["--stream-data=uncompress", # 5 + "uncompresed"], + ["--normalize-content=y", # 6 + "normalized"], + ["--stream-data=uncompress --normalize-content=y", # 7 + "uncompressed and normalized"], + ["-decrypt", # 8 + "decrypted"], + ["-linearize", # 9 + "linearized"], + ["-encrypt \"\" owner 128 --", # 10 + "encrypted"], + ["-linearize -encrypt \"\" o 128 --", # 11 + "linearized and encrypted"], + ["", # 12 + "no arguments"], + ); + +$n_tests += (@files * @flags * 2 * 2); +$n_compare_pdfs += (@files * @flags * 2); +$n_acroread += (@files * @flags * 2); + +foreach my $file (@files) +{ + my $base = basename($file, '.pdf'); + + foreach my $o (qw(disable generate)) + { + my $n = 0; + my $oflags = "--object-streams=$o"; + my $odescrip = "os:" . substr($o, 0, 1); + foreach my $d (@flags) + { + my ($flags, $fdescrip) = @$d; + ++$n; + system("rm -f *.pnm"); + + $td->runtest("$file ($odescrip $fdescrip)", + {$td->COMMAND => "qpdf $flags $oflags $file a.pdf"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + + $td->runtest("check status", + {$td->COMMAND => "qpdf --check a.pdf"}, + {$td->FILE => "$base.$n.check", + $td->EXIT_STATUS => 0}); + + compare_pdfs($file, "a.pdf"); + + if ($have_acroread) + { + # These tests require Adobe Reader > 7.x to work with + # encrypted files. + $td->runtest("check with Adobe Reader", + {$td->COMMAND => + "acroread -toPostScript -pairs a.pdf 1.ps"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + } + } + flush_tiff_cache(); + } +} + +show_ntests(); +# ---------- +$td->notify("--- fix-qdf Tests ---"); +$n_tests += 6; + +foreach my $lang qw(C en_US en_US.UTF-8) +{ + for (my $n = 1; $n <= 2; ++$n) + { + $td->runtest("fix-qdf $n (LANG=$lang)", + {$td->COMMAND => "LANG=$lang fix-qdf fix$n.qdf"}, + {$td->FILE => "fix$n.qdf.out", + $td->EXIT_STATUS => 0}); + } +} + +show_ntests(); + +# ---------- +cleanup(); + +# See comments at beginning about calculation of number of tests. We +# do it strictly based on static values, not as a by-product of +# running the test suite. +$td->report(calc_ntests()); + +sub calc_ntests +{ + my $result = $n_tests; + if ($have_acroread) + { + $result += $n_acroread; + } + if ($compare_images) + { + $result += 3 * ($n_compare_pdfs); + } + $result; +} + +sub show_ntests +{ + if (0) + { + $td->emphasize("tests so far: ". calc_ntests()); + } +} + +sub check_pdf +{ + my ($description, $command, $output, $status) = @_; + unlink "a.pdf"; + $td->runtest($description, + {$td->COMMAND => "$command a.pdf"}, + {$td->STRING => "", + $td->EXIT_STATUS => $status}); + $td->runtest("check output", + {$td->FILE => "a.pdf"}, + {$td->FILE => $output}); +} + +sub flush_tiff_cache +{ + system("rm -rf tiff-cache"); +} + +sub compare_pdfs +{ + return unless $compare_images; + + my ($f1, $f2, $exp) = @_; + + $exp = 0 unless defined $exp; + + system("rm -rf tif1 tif2"); + + mkdir "tiff-cache", 0777 unless -d "tiff-cache"; + + my $md5_1 = get_md5_checksum($f1); + my $md5_2 = get_md5_checksum($f2); + + mkdir "tif1", 0777 or die; + mkdir "tif2", 0777 or die; + + if (-f "tiff-cache/$md5_1.tif") + { + $td->runtest("get cached original file image", + {$td->COMMAND => "cp tiff-cache/$md5_1.tif tif1/a.tif"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + } + else + { + $td->runtest("convert original file to image", + {$td->COMMAND => + "(cd tif1;" . + " gs -q -dNOPAUSE -sDEVICE=tiff12nc" . + " -sOutputFile=a.tif - < ../$f1)"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + copy("tif1/a.tif", "tiff-cache/$md5_1.tif"); + } + + if (-f "tiff-cache/$md5_2.tif") + { + $td->runtest("get cached new file image", + {$td->COMMAND => "cp tiff-cache/$md5_2.tif tif2/a.tif"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + } + else + { + $td->runtest("convert new file to image", + {$td->COMMAND => + "(cd tif2;" . + " gs -q -dNOPAUSE -sDEVICE=tiff12nc" . + " -sOutputFile=a.tif - < ../$f2)"}, + {$td->STRING => "", + $td->EXIT_STATUS => 0}); + copy("tif2/a.tif", "tiff-cache/$md5_2.tif"); + } + + $td->runtest("compare images", + {$td->COMMAND => "tiffcmp -t tif1/a.tif tif2/a.tif"}, + {$td->REGEXP => ".*", + $td->EXIT_STATUS => $exp}); + + system("rm -rf tif1 tif2"); +} + +sub get_md5_checksum +{ + my $file = shift; + open(F, "<$file") or fatal("can't open $file: $!"); + binmode F; + my $digest = Digest::MD5->new->addfile(*F)->hexdigest; + close(F); + $digest; +} + +sub cleanup +{ + system("rm -rf *.ps *.pnm a.pdf a.qdf b.pdf b.qdf c.pdf" . + " *.enc* tif1 tif2 tiff-cache"); +} diff --git a/qpdf/qtest/qpdf/U25A0.1.check b/qpdf/qtest/qpdf/U25A0.1.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.1.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/U25A0.10.check b/qpdf/qtest/qpdf/U25A0.10.check new file mode 100644 index 00000000..0e0ed996 --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.10.check @@ -0,0 +1,5 @@ +checking a.pdf +P = -4 +User password = +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/U25A0.11.check b/qpdf/qtest/qpdf/U25A0.11.check new file mode 100644 index 00000000..327d847a --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.11.check @@ -0,0 +1,5 @@ +checking a.pdf +P = -4 +User password = +File is linearized +No errors found diff --git a/qpdf/qtest/qpdf/U25A0.12.check b/qpdf/qtest/qpdf/U25A0.12.check new file mode 100644 index 00000000..48b8e821 --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.12.check @@ -0,0 +1,5 @@ +checking a.pdf +P = -60 +User password = +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/U25A0.2.check b/qpdf/qtest/qpdf/U25A0.2.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.2.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/U25A0.3.check b/qpdf/qtest/qpdf/U25A0.3.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.3.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/U25A0.4.check b/qpdf/qtest/qpdf/U25A0.4.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.4.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/U25A0.5.check b/qpdf/qtest/qpdf/U25A0.5.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.5.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/U25A0.6.check b/qpdf/qtest/qpdf/U25A0.6.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.6.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/U25A0.7.check b/qpdf/qtest/qpdf/U25A0.7.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.7.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/U25A0.8.check b/qpdf/qtest/qpdf/U25A0.8.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.8.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/U25A0.9.check b/qpdf/qtest/qpdf/U25A0.9.check new file mode 100644 index 00000000..547c43d5 --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.9.check @@ -0,0 +1,5 @@ +checking a.pdf +P = -60 +User password = +File is linearized +No errors found diff --git a/qpdf/qtest/qpdf/U25A0.pdf b/qpdf/qtest/qpdf/U25A0.pdf Binary files differnew file mode 100644 index 00000000..f8b779d4 --- /dev/null +++ b/qpdf/qtest/qpdf/U25A0.pdf diff --git a/qpdf/qtest/qpdf/bad1-recover.out b/qpdf/qtest/qpdf/bad1-recover.out new file mode 100644 index 00000000..1cd5b015 --- /dev/null +++ b/qpdf/qtest/qpdf/bad1-recover.out @@ -0,0 +1 @@ +bad1.pdf: offset 0: not a PDF file diff --git a/qpdf/qtest/qpdf/bad1.out b/qpdf/qtest/qpdf/bad1.out new file mode 100644 index 00000000..1cd5b015 --- /dev/null +++ b/qpdf/qtest/qpdf/bad1.out @@ -0,0 +1 @@ +bad1.pdf: offset 0: not a PDF file diff --git a/qpdf/qtest/qpdf/bad1.pdf b/qpdf/qtest/qpdf/bad1.pdf new file mode 100644 index 00000000..75891bc6 --- /dev/null +++ b/qpdf/qtest/qpdf/bad1.pdf @@ -0,0 +1 @@ +oops diff --git a/qpdf/qtest/qpdf/bad10-recover.out b/qpdf/qtest/qpdf/bad10-recover.out new file mode 100644 index 00000000..905ca597 --- /dev/null +++ b/qpdf/qtest/qpdf/bad10-recover.out @@ -0,0 +1,9 @@ +WARNING: bad10.pdf: offset 0: file is damaged +WARNING: bad10.pdf: offset 712: /Size key in trailer dictionary is not an integer +WARNING: Attempting to reconstruct cross-reference table +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/bad10.out b/qpdf/qtest/qpdf/bad10.out new file mode 100644 index 00000000..935f5b24 --- /dev/null +++ b/qpdf/qtest/qpdf/bad10.out @@ -0,0 +1 @@ +bad10.pdf: offset 712: /Size key in trailer dictionary is not an integer diff --git a/qpdf/qtest/qpdf/bad10.pdf b/qpdf/qtest/qpdf/bad10.pdf new file mode 100644 index 00000000..1f2be0c8 --- /dev/null +++ b/qpdf/qtest/qpdf/bad10.pdf @@ -0,0 +1,79 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size (h) + /Root 1 0 R +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad11-recover.out b/qpdf/qtest/qpdf/bad11-recover.out new file mode 100644 index 00000000..7dfac209 --- /dev/null +++ b/qpdf/qtest/qpdf/bad11-recover.out @@ -0,0 +1,9 @@ +WARNING: bad11.pdf: offset 0: file is damaged +WARNING: bad11.pdf: offset 905: /Prev key in trailer dictionary is not an integer +WARNING: Attempting to reconstruct cross-reference table +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/bad11.out b/qpdf/qtest/qpdf/bad11.out new file mode 100644 index 00000000..55705b73 --- /dev/null +++ b/qpdf/qtest/qpdf/bad11.out @@ -0,0 +1 @@ +bad11.pdf: offset 905: /Prev key in trailer dictionary is not an integer diff --git a/qpdf/qtest/qpdf/bad11.pdf b/qpdf/qtest/qpdf/bad11.pdf new file mode 100644 index 00000000..4cf46e5a --- /dev/null +++ b/qpdf/qtest/qpdf/bad11.pdf @@ -0,0 +1,104 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000128 00000 n +0000000300 00000 n +0000000389 00000 n +0000000424 00000 n +trailer << + /Size 7 + /Root 1 0 R +>> +startxref +542 +%%EOF + +4 0 obj +<< + /Length 43 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Salad) Tj +ET +endstream +endobj + +xref +0 1 +0000000000 65535 f +4 1 +0000000750 00000 n +trailer << + /Size 7 + /Root 1 0 R + /Prev [542] +>> +startxref +845 +%%EOF diff --git a/qpdf/qtest/qpdf/bad12-recover.out b/qpdf/qtest/qpdf/bad12-recover.out new file mode 100644 index 00000000..97dfb642 --- /dev/null +++ b/qpdf/qtest/qpdf/bad12-recover.out @@ -0,0 +1,7 @@ +WARNING: bad12.pdf: reported number of objects (9) inconsistent with actual number of objects (8) +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/bad12.out b/qpdf/qtest/qpdf/bad12.out new file mode 100644 index 00000000..d07d74bd --- /dev/null +++ b/qpdf/qtest/qpdf/bad12.out @@ -0,0 +1,7 @@ +WARNING: bad12.pdf: reported number of objects (9) inconsistent with actual number of objects (8) +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 0 done diff --git a/qpdf/qtest/qpdf/bad12.pdf b/qpdf/qtest/qpdf/bad12.pdf new file mode 100644 index 00000000..0fc8028a --- /dev/null +++ b/qpdf/qtest/qpdf/bad12.pdf @@ -0,0 +1,122 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000128 00000 n +0000000300 00000 n +0000000389 00000 n +0000000424 00000 n +trailer << + /Size 7 + /Root 1 0 R +>> +startxref +542 +%%EOF + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 7 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +7 0 obj +<< + /Length 48 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Sandwiches) Tj +ET +endstream +endobj + +xref +0 1 +0000000004 65535 f +3 2 +0000000750 00000 n +0000000000 00001 f +7 1 +0000000922 00000 n +trailer << + /Size 9 + /Root 1 0 R + /Prev 542 +>> +startxref +1022 +%%EOF diff --git a/qpdf/qtest/qpdf/bad13-recover.out b/qpdf/qtest/qpdf/bad13-recover.out new file mode 100644 index 00000000..5ea29917 --- /dev/null +++ b/qpdf/qtest/qpdf/bad13-recover.out @@ -0,0 +1,4 @@ +WARNING: bad13.pdf: offset 0: file is damaged +WARNING: bad13.pdf: offset 753: unexpected brace token +WARNING: Attempting to reconstruct cross-reference table +bad13.pdf: offset 753: unexpected brace token diff --git a/qpdf/qtest/qpdf/bad13.out b/qpdf/qtest/qpdf/bad13.out new file mode 100644 index 00000000..12eedf08 --- /dev/null +++ b/qpdf/qtest/qpdf/bad13.out @@ -0,0 +1 @@ +bad13.pdf: offset 753: unexpected brace token diff --git a/qpdf/qtest/qpdf/bad13.pdf b/qpdf/qtest/qpdf/bad13.pdf new file mode 100644 index 00000000..2fb59d2e --- /dev/null +++ b/qpdf/qtest/qpdf/bad13.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /Something { +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad14-recover.out b/qpdf/qtest/qpdf/bad14-recover.out new file mode 100644 index 00000000..26ee2ef6 --- /dev/null +++ b/qpdf/qtest/qpdf/bad14-recover.out @@ -0,0 +1,4 @@ +WARNING: bad14.pdf: offset 0: file is damaged +WARNING: bad14.pdf: offset 753: unexpected brace token +WARNING: Attempting to reconstruct cross-reference table +bad14.pdf: offset 753: unexpected brace token diff --git a/qpdf/qtest/qpdf/bad14.out b/qpdf/qtest/qpdf/bad14.out new file mode 100644 index 00000000..82c58c22 --- /dev/null +++ b/qpdf/qtest/qpdf/bad14.out @@ -0,0 +1 @@ +bad14.pdf: offset 753: unexpected brace token diff --git a/qpdf/qtest/qpdf/bad14.pdf b/qpdf/qtest/qpdf/bad14.pdf new file mode 100644 index 00000000..551fdfdc --- /dev/null +++ b/qpdf/qtest/qpdf/bad14.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /Something } +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad15-recover.out b/qpdf/qtest/qpdf/bad15-recover.out new file mode 100644 index 00000000..2d6d0cf1 --- /dev/null +++ b/qpdf/qtest/qpdf/bad15-recover.out @@ -0,0 +1,4 @@ +WARNING: bad15.pdf: offset 0: file is damaged +WARNING: bad15.pdf: offset 753: unexpected array close token +WARNING: Attempting to reconstruct cross-reference table +bad15.pdf: offset 753: unexpected array close token diff --git a/qpdf/qtest/qpdf/bad15.out b/qpdf/qtest/qpdf/bad15.out new file mode 100644 index 00000000..19ffbfcc --- /dev/null +++ b/qpdf/qtest/qpdf/bad15.out @@ -0,0 +1 @@ +bad15.pdf: offset 753: unexpected array close token diff --git a/qpdf/qtest/qpdf/bad15.pdf b/qpdf/qtest/qpdf/bad15.pdf new file mode 100644 index 00000000..5578e1d6 --- /dev/null +++ b/qpdf/qtest/qpdf/bad15.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /Something ] +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad16-recover.out b/qpdf/qtest/qpdf/bad16-recover.out new file mode 100644 index 00000000..22a49ee9 --- /dev/null +++ b/qpdf/qtest/qpdf/bad16-recover.out @@ -0,0 +1,4 @@ +WARNING: bad16.pdf: offset 0: file is damaged +WARNING: bad16.pdf: offset 753: unexpected dictionary close token +WARNING: Attempting to reconstruct cross-reference table +bad16.pdf: offset 753: unexpected dictionary close token diff --git a/qpdf/qtest/qpdf/bad16.out b/qpdf/qtest/qpdf/bad16.out new file mode 100644 index 00000000..315f5203 --- /dev/null +++ b/qpdf/qtest/qpdf/bad16.out @@ -0,0 +1 @@ +bad16.pdf: offset 753: unexpected dictionary close token diff --git a/qpdf/qtest/qpdf/bad16.pdf b/qpdf/qtest/qpdf/bad16.pdf new file mode 100644 index 00000000..b8bdb5f4 --- /dev/null +++ b/qpdf/qtest/qpdf/bad16.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /Something[>> +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad17-recover.out b/qpdf/qtest/qpdf/bad17-recover.out new file mode 100644 index 00000000..bcaa948f --- /dev/null +++ b/qpdf/qtest/qpdf/bad17-recover.out @@ -0,0 +1,4 @@ +WARNING: bad17.pdf: offset 0: file is damaged +WARNING: bad17.pdf: offset 753: dictionary ending here has an odd number of elements +WARNING: Attempting to reconstruct cross-reference table +bad17.pdf: offset 753: dictionary ending here has an odd number of elements diff --git a/qpdf/qtest/qpdf/bad17.out b/qpdf/qtest/qpdf/bad17.out new file mode 100644 index 00000000..36c059d6 --- /dev/null +++ b/qpdf/qtest/qpdf/bad17.out @@ -0,0 +1 @@ +bad17.pdf: offset 753: dictionary ending here has an odd number of elements diff --git a/qpdf/qtest/qpdf/bad17.pdf b/qpdf/qtest/qpdf/bad17.pdf new file mode 100644 index 00000000..5afb00d2 --- /dev/null +++ b/qpdf/qtest/qpdf/bad17.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /Something +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad18-recover.out b/qpdf/qtest/qpdf/bad18-recover.out new file mode 100644 index 00000000..2a4d2a06 --- /dev/null +++ b/qpdf/qtest/qpdf/bad18-recover.out @@ -0,0 +1,4 @@ +WARNING: bad18.pdf: offset 0: file is damaged +WARNING: bad18.pdf: offset 753: unexpected ) +WARNING: Attempting to reconstruct cross-reference table +bad18.pdf: offset 753: unexpected ) diff --git a/qpdf/qtest/qpdf/bad18.out b/qpdf/qtest/qpdf/bad18.out new file mode 100644 index 00000000..5e319d9b --- /dev/null +++ b/qpdf/qtest/qpdf/bad18.out @@ -0,0 +1 @@ +bad18.pdf: offset 753: unexpected ) diff --git a/qpdf/qtest/qpdf/bad18.pdf b/qpdf/qtest/qpdf/bad18.pdf new file mode 100644 index 00000000..96cf7935 --- /dev/null +++ b/qpdf/qtest/qpdf/bad18.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /Something ) +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad19-recover.out b/qpdf/qtest/qpdf/bad19-recover.out new file mode 100644 index 00000000..4fa46af8 --- /dev/null +++ b/qpdf/qtest/qpdf/bad19-recover.out @@ -0,0 +1,4 @@ +WARNING: bad19.pdf: offset 0: file is damaged +WARNING: bad19.pdf: offset 753: unexpected > +WARNING: Attempting to reconstruct cross-reference table +bad19.pdf: offset 753: unexpected > diff --git a/qpdf/qtest/qpdf/bad19.out b/qpdf/qtest/qpdf/bad19.out new file mode 100644 index 00000000..57ffd7d2 --- /dev/null +++ b/qpdf/qtest/qpdf/bad19.out @@ -0,0 +1 @@ +bad19.pdf: offset 753: unexpected > diff --git a/qpdf/qtest/qpdf/bad19.pdf b/qpdf/qtest/qpdf/bad19.pdf new file mode 100644 index 00000000..f95036f0 --- /dev/null +++ b/qpdf/qtest/qpdf/bad19.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /Something > +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad2-recover.out b/qpdf/qtest/qpdf/bad2-recover.out new file mode 100644 index 00000000..142f10ff --- /dev/null +++ b/qpdf/qtest/qpdf/bad2-recover.out @@ -0,0 +1,9 @@ +WARNING: bad2.pdf: offset 0: file is damaged +WARNING: bad2.pdf: can't find startxref +WARNING: Attempting to reconstruct cross-reference table +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/bad2.out b/qpdf/qtest/qpdf/bad2.out new file mode 100644 index 00000000..9179b774 --- /dev/null +++ b/qpdf/qtest/qpdf/bad2.out @@ -0,0 +1 @@ +bad2.pdf: can't find startxref diff --git a/qpdf/qtest/qpdf/bad2.pdf b/qpdf/qtest/qpdf/bad2.pdf new file mode 100644 index 00000000..aa63b0b2 --- /dev/null +++ b/qpdf/qtest/qpdf/bad2.pdf @@ -0,0 +1,76 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000128 00000 n +0000000300 00000 n +0000000389 00000 n +0000000424 00000 n +trailer << + /Size 7 + /Root 1 0 R +>> +farbage 542 +%%EOF diff --git a/qpdf/qtest/qpdf/bad20-recover.out b/qpdf/qtest/qpdf/bad20-recover.out new file mode 100644 index 00000000..95fc3ca6 --- /dev/null +++ b/qpdf/qtest/qpdf/bad20-recover.out @@ -0,0 +1,4 @@ +WARNING: bad20.pdf: offset 0: file is damaged +WARNING: bad20.pdf: offset 753: invalid character (q) in hexstring +WARNING: Attempting to reconstruct cross-reference table +bad20.pdf: offset 753: invalid character (q) in hexstring diff --git a/qpdf/qtest/qpdf/bad20.out b/qpdf/qtest/qpdf/bad20.out new file mode 100644 index 00000000..f70b938a --- /dev/null +++ b/qpdf/qtest/qpdf/bad20.out @@ -0,0 +1 @@ +bad20.pdf: offset 753: invalid character (q) in hexstring diff --git a/qpdf/qtest/qpdf/bad20.pdf b/qpdf/qtest/qpdf/bad20.pdf new file mode 100644 index 00000000..e42cfe08 --- /dev/null +++ b/qpdf/qtest/qpdf/bad20.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /Something <abqd> +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad21-recover.out b/qpdf/qtest/qpdf/bad21-recover.out new file mode 100644 index 00000000..7423fe4f --- /dev/null +++ b/qpdf/qtest/qpdf/bad21-recover.out @@ -0,0 +1,4 @@ +WARNING: bad21.pdf: offset 0: file is damaged +WARNING: bad21.pdf: offset 742: invalid name token +WARNING: Attempting to reconstruct cross-reference table +bad21.pdf: offset 742: invalid name token diff --git a/qpdf/qtest/qpdf/bad21.out b/qpdf/qtest/qpdf/bad21.out new file mode 100644 index 00000000..fb71b5ac --- /dev/null +++ b/qpdf/qtest/qpdf/bad21.out @@ -0,0 +1 @@ +bad21.pdf: offset 742: invalid name token diff --git a/qpdf/qtest/qpdf/bad21.pdf b/qpdf/qtest/qpdf/bad21.pdf new file mode 100644 index 00000000..4be5f0ef --- /dev/null +++ b/qpdf/qtest/qpdf/bad21.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /Som#ething 1 +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad22-recover.out b/qpdf/qtest/qpdf/bad22-recover.out new file mode 100644 index 00000000..823e8b96 --- /dev/null +++ b/qpdf/qtest/qpdf/bad22-recover.out @@ -0,0 +1,21 @@ +WARNING: bad22.pdf: offset 341: attempting to recover stream length +/QTest is indirect +/QTest is a stream. Dictionary: << /Qength 44 >> +Raw stream data: +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET + +Uncompressed stream data: +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET + +End of stream data +unparse: 4 0 R +unparseResolved: 4 0 R +test 1 done diff --git a/qpdf/qtest/qpdf/bad22.out b/qpdf/qtest/qpdf/bad22.out new file mode 100644 index 00000000..40d92a45 --- /dev/null +++ b/qpdf/qtest/qpdf/bad22.out @@ -0,0 +1 @@ +bad22.pdf: offset 317: stream dictionary lacks /Length key diff --git a/qpdf/qtest/qpdf/bad22.pdf b/qpdf/qtest/qpdf/bad22.pdf new file mode 100644 index 00000000..b0d42ac7 --- /dev/null +++ b/qpdf/qtest/qpdf/bad22.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Qength 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest 4 0 R +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad23-recover.out b/qpdf/qtest/qpdf/bad23-recover.out new file mode 100644 index 00000000..981766cd --- /dev/null +++ b/qpdf/qtest/qpdf/bad23-recover.out @@ -0,0 +1,21 @@ +WARNING: bad23.pdf: offset 341: attempting to recover stream length +/QTest is indirect +/QTest is a stream. Dictionary: << /Length () >> +Raw stream data: +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET + +Uncompressed stream data: +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET + +End of stream data +unparse: 4 0 R +unparseResolved: 4 0 R +test 1 done diff --git a/qpdf/qtest/qpdf/bad23.out b/qpdf/qtest/qpdf/bad23.out new file mode 100644 index 00000000..5cef84f9 --- /dev/null +++ b/qpdf/qtest/qpdf/bad23.out @@ -0,0 +1 @@ +bad23.pdf: offset 317: /Length key in stream dictionary is not an integer diff --git a/qpdf/qtest/qpdf/bad23.pdf b/qpdf/qtest/qpdf/bad23.pdf new file mode 100644 index 00000000..0baead97 --- /dev/null +++ b/qpdf/qtest/qpdf/bad23.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length () +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest 4 0 R +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad24-recover.out b/qpdf/qtest/qpdf/bad24-recover.out new file mode 100644 index 00000000..5e643eff --- /dev/null +++ b/qpdf/qtest/qpdf/bad24-recover.out @@ -0,0 +1,2 @@ +WARNING: bad24.pdf: offset 341: attempting to recover stream length +bad24.pdf: offset 341: unable to recover stream data diff --git a/qpdf/qtest/qpdf/bad24.out b/qpdf/qtest/qpdf/bad24.out new file mode 100644 index 00000000..76baa51a --- /dev/null +++ b/qpdf/qtest/qpdf/bad24.out @@ -0,0 +1 @@ +bad24.pdf: offset 385: expected endstream diff --git a/qpdf/qtest/qpdf/bad24.pdf b/qpdf/qtest/qpdf/bad24.pdf new file mode 100644 index 00000000..7af8c7d6 --- /dev/null +++ b/qpdf/qtest/qpdf/bad24.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +enxstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest 4 0 R +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad25-recover.out b/qpdf/qtest/qpdf/bad25-recover.out new file mode 100644 index 00000000..f8a18758 --- /dev/null +++ b/qpdf/qtest/qpdf/bad25-recover.out @@ -0,0 +1,4 @@ +WARNING: bad25.pdf: offset 0: file is damaged +WARNING: bad25.pdf: offset 307: expected n n obj +WARNING: Attempting to reconstruct cross-reference table +bad25.pdf: offset 307: expected n n obj diff --git a/qpdf/qtest/qpdf/bad25.out b/qpdf/qtest/qpdf/bad25.out new file mode 100644 index 00000000..11e3899a --- /dev/null +++ b/qpdf/qtest/qpdf/bad25.out @@ -0,0 +1 @@ +bad25.pdf: offset 307: expected n n obj diff --git a/qpdf/qtest/qpdf/bad25.pdf b/qpdf/qtest/qpdf/bad25.pdf new file mode 100644 index 00000000..a51974d3 --- /dev/null +++ b/qpdf/qtest/qpdf/bad25.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +x 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest 4 0 R +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad26-recover.out b/qpdf/qtest/qpdf/bad26-recover.out new file mode 100644 index 00000000..64b6f610 --- /dev/null +++ b/qpdf/qtest/qpdf/bad26-recover.out @@ -0,0 +1,4 @@ +WARNING: bad26.pdf: offset 0: file is damaged +WARNING: bad26.pdf: offset 307: expected n n obj +WARNING: Attempting to reconstruct cross-reference table +bad26.pdf: offset 307: expected n n obj diff --git a/qpdf/qtest/qpdf/bad26.out b/qpdf/qtest/qpdf/bad26.out new file mode 100644 index 00000000..2b1b01e2 --- /dev/null +++ b/qpdf/qtest/qpdf/bad26.out @@ -0,0 +1 @@ +bad26.pdf: offset 307: expected n n obj diff --git a/qpdf/qtest/qpdf/bad26.pdf b/qpdf/qtest/qpdf/bad26.pdf new file mode 100644 index 00000000..4a7e3b21 --- /dev/null +++ b/qpdf/qtest/qpdf/bad26.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 x obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest 4 0 R +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad27-recover.out b/qpdf/qtest/qpdf/bad27-recover.out new file mode 100644 index 00000000..be980b95 --- /dev/null +++ b/qpdf/qtest/qpdf/bad27-recover.out @@ -0,0 +1,4 @@ +WARNING: bad27.pdf: offset 0: file is damaged +WARNING: bad27.pdf: offset 307: expected n n obj +WARNING: Attempting to reconstruct cross-reference table +bad27.pdf: offset 307: expected n n obj diff --git a/qpdf/qtest/qpdf/bad27.out b/qpdf/qtest/qpdf/bad27.out new file mode 100644 index 00000000..a0c47a7c --- /dev/null +++ b/qpdf/qtest/qpdf/bad27.out @@ -0,0 +1 @@ +bad27.pdf: offset 307: expected n n obj diff --git a/qpdf/qtest/qpdf/bad27.pdf b/qpdf/qtest/qpdf/bad27.pdf new file mode 100644 index 00000000..032b2125 --- /dev/null +++ b/qpdf/qtest/qpdf/bad27.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 xbj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest 4 0 R +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad28-recover.out b/qpdf/qtest/qpdf/bad28-recover.out new file mode 100644 index 00000000..3bf944d5 --- /dev/null +++ b/qpdf/qtest/qpdf/bad28-recover.out @@ -0,0 +1,21 @@ +WARNING: bad28.pdf: offset 395: expected endobj +/QTest is indirect +/QTest is a stream. Dictionary: << /Length 44 >> +Raw stream data: +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET + +Uncompressed stream data: +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET + +End of stream data +unparse: 4 0 R +unparseResolved: 4 0 R +test 1 done diff --git a/qpdf/qtest/qpdf/bad28.out b/qpdf/qtest/qpdf/bad28.out new file mode 100644 index 00000000..a0809eb9 --- /dev/null +++ b/qpdf/qtest/qpdf/bad28.out @@ -0,0 +1,21 @@ +WARNING: bad28.pdf: offset 395: expected endobj +/QTest is indirect +/QTest is a stream. Dictionary: << /Length 44 >> +Raw stream data: +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET + +Uncompressed stream data: +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET + +End of stream data +unparse: 4 0 R +unparseResolved: 4 0 R +test 0 done diff --git a/qpdf/qtest/qpdf/bad28.pdf b/qpdf/qtest/qpdf/bad28.pdf new file mode 100644 index 00000000..c77a2069 --- /dev/null +++ b/qpdf/qtest/qpdf/bad28.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +enwobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest 4 0 R +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad29-recover.out b/qpdf/qtest/qpdf/bad29-recover.out new file mode 100644 index 00000000..bc6e38d5 --- /dev/null +++ b/qpdf/qtest/qpdf/bad29-recover.out @@ -0,0 +1,4 @@ +WARNING: bad29.pdf: offset 0: file is damaged +WARNING: bad29.pdf: offset 742: null character not allowed in name token +WARNING: Attempting to reconstruct cross-reference table +bad29.pdf: offset 742: null character not allowed in name token diff --git a/qpdf/qtest/qpdf/bad29.out b/qpdf/qtest/qpdf/bad29.out new file mode 100644 index 00000000..9f279743 --- /dev/null +++ b/qpdf/qtest/qpdf/bad29.out @@ -0,0 +1 @@ +bad29.pdf: offset 742: null character not allowed in name token diff --git a/qpdf/qtest/qpdf/bad29.pdf b/qpdf/qtest/qpdf/bad29.pdf new file mode 100644 index 00000000..a45151e2 --- /dev/null +++ b/qpdf/qtest/qpdf/bad29.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /Som#00ething 1 +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad3-recover.out b/qpdf/qtest/qpdf/bad3-recover.out new file mode 100644 index 00000000..d205398a --- /dev/null +++ b/qpdf/qtest/qpdf/bad3-recover.out @@ -0,0 +1,9 @@ +WARNING: bad3.pdf: offset 0: file is damaged +WARNING: bad3.pdf: offset 542: xref not found +WARNING: Attempting to reconstruct cross-reference table +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/bad3.out b/qpdf/qtest/qpdf/bad3.out new file mode 100644 index 00000000..22ee8fbd --- /dev/null +++ b/qpdf/qtest/qpdf/bad3.out @@ -0,0 +1 @@ +bad3.pdf: offset 542: xref not found diff --git a/qpdf/qtest/qpdf/bad3.pdf b/qpdf/qtest/qpdf/bad3.pdf new file mode 100644 index 00000000..3e078f37 --- /dev/null +++ b/qpdf/qtest/qpdf/bad3.pdf @@ -0,0 +1,76 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +noxref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000128 00000 n +0000000300 00000 n +0000000389 00000 n +0000000424 00000 n +trailer << + /Size 7 + /Root 1 0 R +>> +startxref
542 +%%EOF diff --git a/qpdf/qtest/qpdf/bad30-recover.out b/qpdf/qtest/qpdf/bad30-recover.out new file mode 100644 index 00000000..95d194d4 --- /dev/null +++ b/qpdf/qtest/qpdf/bad30-recover.out @@ -0,0 +1,6 @@ +/QTest is indirect +/QTest is a stream. Dictionary: << /Filter (FlateDecode) /Length 123 >> +Raw stream data: +xœ%11û¼b;tà4| wXIDì Øå÷8G·«Í>rQ¨uŠOÒêEŒ:©IWìÃPlíµII)Ãr´p4~;§ÎAs/òÒ…jcúú¾÷Žs§åözû»žT.?®uŽæ§<Ž¼…Ð*6ä +Uncompressed stream data: +bad30.pdf: offset 629: invalid filter object type for this stream diff --git a/qpdf/qtest/qpdf/bad30.out b/qpdf/qtest/qpdf/bad30.out new file mode 100644 index 00000000..95d194d4 --- /dev/null +++ b/qpdf/qtest/qpdf/bad30.out @@ -0,0 +1,6 @@ +/QTest is indirect +/QTest is a stream. Dictionary: << /Filter (FlateDecode) /Length 123 >> +Raw stream data: +xœ%11û¼b;tà4| wXIDì Øå÷8G·«Í>rQ¨uŠOÒêEŒ:©IWìÃPlíµII)Ãr´p4~;§ÎAs/òÒ…jcúú¾÷Žs§åözû»žT.?®uŽæ§<Ž¼…Ð*6ä +Uncompressed stream data: +bad30.pdf: offset 629: invalid filter object type for this stream diff --git a/qpdf/qtest/qpdf/bad30.pdf b/qpdf/qtest/qpdf/bad30.pdf new file mode 100644 index 00000000..05c52764 --- /dev/null +++ b/qpdf/qtest/qpdf/bad30.pdf @@ -0,0 +1,93 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +7 0 obj +<< + % Comment + /Length + 123 + /Filter (FlateDecode) +>> +stream +xœ%11û¼b;tà4| wXIDì Øå÷8G·«Í>rQ¨uŠOÒêEŒ:©IWìÃPlíµII)Ãr´p4~;§ÎAs/òÒ…jcúú¾÷Žs§åözû»žT.?®uŽæ§<Ž¼…Ð*6ä +endstream +endobj + +xref +0 8 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +0000000556 00000 n +trailer << + /Size 8 + /Root 1 0 R + /QTest 7 0 R +>> +startxref +771 +%%EOF diff --git a/qpdf/qtest/qpdf/bad31-recover.out b/qpdf/qtest/qpdf/bad31-recover.out new file mode 100644 index 00000000..313e2083 --- /dev/null +++ b/qpdf/qtest/qpdf/bad31-recover.out @@ -0,0 +1,9 @@ +/QTest is indirect +/QTest is a stream. Dictionary: << /Filter [ /Oink /Moo /FlateDecode ] /Length 123 >> +Raw stream data: +xœ%11û¼b;tà4| wXIDì Øå÷8G·«Í>rQ¨uŠOÒêEŒ:©IWìÃPlíµII)Ãr´p4~;§ÎAs/òÒ…jcúú¾÷Žs§åözû»žT.?®uŽæ§<Ž¼…Ð*6ä +Uncompressed stream data: +Stream data is not filterable. +unparse: 7 0 R +unparseResolved: 7 0 R +test 1 done diff --git a/qpdf/qtest/qpdf/bad31.out b/qpdf/qtest/qpdf/bad31.out new file mode 100644 index 00000000..2ad01536 --- /dev/null +++ b/qpdf/qtest/qpdf/bad31.out @@ -0,0 +1,9 @@ +/QTest is indirect +/QTest is a stream. Dictionary: << /Filter [ /Oink /Moo /FlateDecode ] /Length 123 >> +Raw stream data: +xœ%11û¼b;tà4| wXIDì Øå÷8G·«Í>rQ¨uŠOÒêEŒ:©IWìÃPlíµII)Ãr´p4~;§ÎAs/òÒ…jcúú¾÷Žs§åözû»žT.?®uŽæ§<Ž¼…Ð*6ä +Uncompressed stream data: +Stream data is not filterable. +unparse: 7 0 R +unparseResolved: 7 0 R +test 0 done diff --git a/qpdf/qtest/qpdf/bad31.pdf b/qpdf/qtest/qpdf/bad31.pdf new file mode 100644 index 00000000..b3c986c8 --- /dev/null +++ b/qpdf/qtest/qpdf/bad31.pdf @@ -0,0 +1,93 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +7 0 obj +<< + % Comment + /Length + 123 + /Filter [/Oink /Moo /FlateDecode] +>> +stream +xœ%11û¼b;tà4| wXIDì Øå÷8G·«Í>rQ¨uŠOÒêEŒ:©IWìÃPlíµII)Ãr´p4~;§ÎAs/òÒ…jcúú¾÷Žs§åözû»žT.?®uŽæ§<Ž¼…Ð*6ä +endstream +endobj + +xref +0 8 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +0000000556 00000 n +trailer << + /Size 8 + /Root 1 0 R + /QTest 7 0 R +>> +startxref +783 +%%EOF diff --git a/qpdf/qtest/qpdf/bad32-recover.out b/qpdf/qtest/qpdf/bad32-recover.out new file mode 100644 index 00000000..d0fe873b --- /dev/null +++ b/qpdf/qtest/qpdf/bad32-recover.out @@ -0,0 +1,9 @@ +WARNING: bad32.pdf: offset 0: file is damaged +WARNING: bad32.pdf: offset 307: expected 4 0 obj +WARNING: Attempting to reconstruct cross-reference table +/QTest is implicit +/QTest is indirect +/QTest is null +unparse: 4 0 R +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/bad32.out b/qpdf/qtest/qpdf/bad32.out new file mode 100644 index 00000000..3212ea02 --- /dev/null +++ b/qpdf/qtest/qpdf/bad32.out @@ -0,0 +1 @@ +bad32.pdf: offset 307: expected 4 0 obj diff --git a/qpdf/qtest/qpdf/bad32.pdf b/qpdf/qtest/qpdf/bad32.pdf new file mode 100644 index 00000000..25819933 --- /dev/null +++ b/qpdf/qtest/qpdf/bad32.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +9 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest 4 0 R +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/bad4-recover.out b/qpdf/qtest/qpdf/bad4-recover.out new file mode 100644 index 00000000..f7c56522 --- /dev/null +++ b/qpdf/qtest/qpdf/bad4-recover.out @@ -0,0 +1,9 @@ +WARNING: bad4.pdf: offset 0: file is damaged +WARNING: bad4.pdf: offset 547: xref syntax invalid +WARNING: Attempting to reconstruct cross-reference table +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/bad4.out b/qpdf/qtest/qpdf/bad4.out new file mode 100644 index 00000000..c29db5f4 --- /dev/null +++ b/qpdf/qtest/qpdf/bad4.out @@ -0,0 +1 @@ +bad4.pdf: offset 547: xref syntax invalid diff --git a/qpdf/qtest/qpdf/bad4.pdf b/qpdf/qtest/qpdf/bad4.pdf new file mode 100644 index 00000000..ed833b92 --- /dev/null +++ b/qpdf/qtest/qpdf/bad4.pdf @@ -0,0 +1,77 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +x0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000128 00000 n +0000000300 00000 n +0000000389 00000 n +0000000424 00000 n +trailer << + /Size 7 + /Root 1 0 R +>> +startxref +542 +%%EOF diff --git a/qpdf/qtest/qpdf/bad5-recover.out b/qpdf/qtest/qpdf/bad5-recover.out new file mode 100644 index 00000000..44f76aed --- /dev/null +++ b/qpdf/qtest/qpdf/bad5-recover.out @@ -0,0 +1,9 @@ +WARNING: bad5.pdf: offset 0: file is damaged +WARNING: bad5.pdf: offset 591: invalid xref entry (obj=2) +WARNING: Attempting to reconstruct cross-reference table +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/bad5.out b/qpdf/qtest/qpdf/bad5.out new file mode 100644 index 00000000..5a9d8a13 --- /dev/null +++ b/qpdf/qtest/qpdf/bad5.out @@ -0,0 +1 @@ +bad5.pdf: offset 591: invalid xref entry (obj=2) diff --git a/qpdf/qtest/qpdf/bad5.pdf b/qpdf/qtest/qpdf/bad5.pdf new file mode 100644 index 00000000..d6b0871f --- /dev/null +++ b/qpdf/qtest/qpdf/bad5.pdf @@ -0,0 +1,77 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +000x000063 00000 n +0000000128 00000 n +0000000300 00000 n +0000000389 00000 n +0000000424 00000 n +trailer << + /Size 7 + /Root 1 0 R +>> +startxref +542 +%%EOF diff --git a/qpdf/qtest/qpdf/bad6-recover.out b/qpdf/qtest/qpdf/bad6-recover.out new file mode 100644 index 00000000..1d31025f --- /dev/null +++ b/qpdf/qtest/qpdf/bad6-recover.out @@ -0,0 +1,6 @@ +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/bad6.out b/qpdf/qtest/qpdf/bad6.out new file mode 100644 index 00000000..26b50cb6 --- /dev/null +++ b/qpdf/qtest/qpdf/bad6.out @@ -0,0 +1,6 @@ +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 0 done diff --git a/qpdf/qtest/qpdf/bad6.pdf b/qpdf/qtest/qpdf/bad6.pdf new file mode 100644 index 00000000..50238b21 --- /dev/null +++ b/qpdf/qtest/qpdf/bad6.pdf @@ -0,0 +1,122 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000128 00000 n +0000000300 00000 n +0000000389 00000 n +0000000424 00000 n +trailer << + /Size 7 + /Root 1 0 R +>> +startxref +542 +%%EOF + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 7 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +7 0 obj +<< + /Length 48 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Sandwiches) Tj +ET +endstream +endobj + +xref +0 1 +0000000006 65535 f +3 2 +0000000750 00000 n +0000000000 00000 f +7 1 +0000000922 00000 n +trailer << + /Size 8 + /Root 1 0 R + /Prev 542 +>> +startxref +1022 +%%EOF diff --git a/qpdf/qtest/qpdf/bad7-recover.out b/qpdf/qtest/qpdf/bad7-recover.out new file mode 100644 index 00000000..56b99f9d --- /dev/null +++ b/qpdf/qtest/qpdf/bad7-recover.out @@ -0,0 +1,4 @@ +WARNING: bad7.pdf: offset 0: file is damaged +WARNING: bad7.pdf: offset 698: expected trailer dictionary +WARNING: Attempting to reconstruct cross-reference table +bad7.pdf: unable to find trailer dictionary while recovering damanged file diff --git a/qpdf/qtest/qpdf/bad7.out b/qpdf/qtest/qpdf/bad7.out new file mode 100644 index 00000000..aac77151 --- /dev/null +++ b/qpdf/qtest/qpdf/bad7.out @@ -0,0 +1 @@ +bad7.pdf: offset 698: expected trailer dictionary diff --git a/qpdf/qtest/qpdf/bad7.pdf b/qpdf/qtest/qpdf/bad7.pdf new file mode 100644 index 00000000..f44c1e66 --- /dev/null +++ b/qpdf/qtest/qpdf/bad7.pdf @@ -0,0 +1,77 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000128 00000 n +0000000300 00000 n +0000000389 00000 n +0000000424 00000 n +trailer 3 << + /Size 7 + /Root 1 0 R +>> +startxref +542 +%%EOF diff --git a/qpdf/qtest/qpdf/bad8-recover.out b/qpdf/qtest/qpdf/bad8-recover.out new file mode 100644 index 00000000..e9144d42 --- /dev/null +++ b/qpdf/qtest/qpdf/bad8-recover.out @@ -0,0 +1,9 @@ +WARNING: bad8.pdf: offset 0: file is damaged +WARNING: bad8.pdf: offset 543: xref not found +WARNING: Attempting to reconstruct cross-reference table +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/bad8.out b/qpdf/qtest/qpdf/bad8.out new file mode 100644 index 00000000..a3338ed4 --- /dev/null +++ b/qpdf/qtest/qpdf/bad8.out @@ -0,0 +1 @@ +bad8.pdf: offset 543: xref not found diff --git a/qpdf/qtest/qpdf/bad8.pdf b/qpdf/qtest/qpdf/bad8.pdf new file mode 100644 index 00000000..9f424af1 --- /dev/null +++ b/qpdf/qtest/qpdf/bad8.pdf @@ -0,0 +1,104 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000128 00000 n +0000000300 00000 n +0000000389 00000 n +0000000424 00000 n +trailer << + /Size 7 + /Root 1 0 R +>> +startxref +542 +%%EOF + +4 0 obj +<< + /Length 43 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Salad) Tj +ET +endstream +endobj + +xref +0 1 +0000000000 65535 f +4 1 +0000000750 00000 n +trailer << + /Size 7 + /Root 1 0 R + /Prev 543 +>> +startxref +845 +%%EOF diff --git a/qpdf/qtest/qpdf/bad9-recover.out b/qpdf/qtest/qpdf/bad9-recover.out new file mode 100644 index 00000000..424b47cf --- /dev/null +++ b/qpdf/qtest/qpdf/bad9-recover.out @@ -0,0 +1,9 @@ +WARNING: bad9.pdf: offset 0: file is damaged +WARNING: bad9.pdf: offset 712: trailer dictionary lacks /Size key +WARNING: Attempting to reconstruct cross-reference table +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/bad9.out b/qpdf/qtest/qpdf/bad9.out new file mode 100644 index 00000000..6799ccd9 --- /dev/null +++ b/qpdf/qtest/qpdf/bad9.out @@ -0,0 +1 @@ +bad9.pdf: offset 712: trailer dictionary lacks /Size key diff --git a/qpdf/qtest/qpdf/bad9.pdf b/qpdf/qtest/qpdf/bad9.pdf new file mode 100644 index 00000000..a52b15fa --- /dev/null +++ b/qpdf/qtest/qpdf/bad9.pdf @@ -0,0 +1,79 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Siqe 7 + /Root 1 0 R +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/badlin1.out b/qpdf/qtest/qpdf/badlin1.out new file mode 100644 index 00000000..8ad4bfd5 --- /dev/null +++ b/qpdf/qtest/qpdf/badlin1.out @@ -0,0 +1,380 @@ +ERROR: first page object (/O) mismatch +ERROR: space before first xref item (/T) mismatch (computed = 11777; file = 11771 +WARNING: end of first page section (/E) mismatch: /E = 1827; computed = 3889..3891 +WARNING: page 0 has shared identifier entries +WARNING: page 0: shared object 62: in hint table but not computed list +badlin1.pdf: linearization data: + +file_size: 13103 +first_page_object: 63 +first_page_end: 1827 +npages: 30 +xref_zero_offset: 11770 +first_page: 0 +H_offset: 1211 +H_length: 203 + +Page Offsets Hint Table + +min_nobjects: 2 +first_page_offset: 1414 +nbits_delta_nobjects: 4 +min_page_length: 259 +nbits_delta_page_length: 12 +min_content_offset: 0 +nbits_delta_content_offset: 0 +min_content_length: 0 +nbits_delta_content_length: 12 +nbits_nshared_objects: 2 +nbits_shared_identifier: 2 +nbits_shared_numerator: 4 +shared_denominator: 8 +Page 0: + nobjects: 16 + length: 2477 + content_offset: 0 + content_length: 2218 + nshared_objects: 2 + identifier 0: 0 + numerator 0: 0 + identifier 1: 0 + numerator 1: 0 +Page 1: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 2: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 3: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 4: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 5: + nobjects: 2 + length: 261 + content_offset: 0 + content_length: 2 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 6: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 7: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 8: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 9: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 10: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 11: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 12: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 13: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 14: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 15: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 16: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 17: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 18: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 19: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 20: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 21: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 22: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 23: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 24: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 25: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 26: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 27: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 28: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 29: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + +Shared Objects Hint Table + +first_shared_obj: 0 +first_shared_offset: 0 +nshared_first_page: 16 +nshared_total: 16 +nbits_nobjects: 0 +min_group_length: 34 +nbits_delta_group_length: 9 +Shared Object 0: + group length: 157 +Shared Object 1: + group length: 105 +Shared Object 2: + group length: 117 +Shared Object 3: + group length: 34 +Shared Object 4: + group length: 82 +Shared Object 5: + group length: 191 +Shared Object 6: + group length: 144 +Shared Object 7: + group length: 168 +Shared Object 8: + group length: 291 +Shared Object 9: + group length: 165 +Shared Object 10: + group length: 162 +Shared Object 11: + group length: 182 +Shared Object 12: + group length: 201 +Shared Object 13: + group length: 150 +Shared Object 14: + group length: 164 +Shared Object 15: + group length: 164 + +Outlines Hint Table + +first_object: 66 +first_object_offset: 1827 +nobjects: 12 +group_length: 2064 diff --git a/qpdf/qtest/qpdf/badlin1.pdf b/qpdf/qtest/qpdf/badlin1.pdf Binary files differnew file mode 100644 index 00000000..8539ac4b --- /dev/null +++ b/qpdf/qtest/qpdf/badlin1.pdf diff --git a/qpdf/qtest/qpdf/check-ID.pl b/qpdf/qtest/qpdf/check-ID.pl new file mode 100644 index 00000000..963b48fe --- /dev/null +++ b/qpdf/qtest/qpdf/check-ID.pl @@ -0,0 +1,20 @@ +use strict; +$^W=1; + +my $okay = 0; +my $id = '31415926535897932384626433832795'; +while (<>) +{ + if ((m,/ID ?\[<([[:xdigit:]]{32})><$id>\],) && ($1 ne $id)) + { + $okay = 1; + } +} +if ($okay) +{ + print "ID okay\n"; +} +else +{ + print "ID bad\n"; +} diff --git a/qpdf/qtest/qpdf/delete-and-reuse.pdf b/qpdf/qtest/qpdf/delete-and-reuse.pdf new file mode 100644 index 00000000..53a89ae5 --- /dev/null +++ b/qpdf/qtest/qpdf/delete-and-reuse.pdf @@ -0,0 +1,1573 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /PageLabels 107 0 R + /Pages 2 0 R + /Type /Catalog + /PageMode /UseOutlines + /Outlines 95 0 R +>> +endobj + +2 0 obj +<< + /Count 30 + /Kids [ + 3 0 R + 4 0 R + 5 0 R + 6 0 R + 7 0 R + 8 0 R + 9 0 R + 10 0 R + 11 0 R + 12 0 R + 13 0 R + 14 0 R + 15 0 R + 16 0 R + 17 0 R + 18 0 R + 19 0 R + 20 0 R + 21 0 R + 22 0 R + 23 0 R + 24 0 R + 25 0 R + 26 0 R + 27 0 R + 28 0 R + 29 0 R + 30 0 R + 31 0 R + 32 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 33 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 2 +4 0 obj +<< + /Contents 37 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 3 +5 0 obj +<< + /Contents 39 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 4 +6 0 obj +<< + /Contents 41 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 5 +7 0 obj +<< + /Contents 43 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 6 +8 0 obj +<< + /Contents 45 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 7 +9 0 obj +<< + /Contents 47 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 8 +10 0 obj +<< + /Contents 49 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 9 +11 0 obj +<< + /Contents 51 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 10 +12 0 obj +<< + /Contents 53 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 11 +13 0 obj +<< + /Contents 55 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 12 +14 0 obj +<< + /Contents 57 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 13 +15 0 obj +<< + /Contents 59 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 14 +16 0 obj +<< + /Contents 61 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 15 +17 0 obj +<< + /Contents 63 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 16 +18 0 obj +<< + /Contents 65 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 17 +19 0 obj +<< + /Contents 67 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 18 +20 0 obj +<< + /Contents 69 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 19 +21 0 obj +<< + /Contents 71 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 20 +22 0 obj +<< + /Contents 73 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 21 +23 0 obj +<< + /Contents 75 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 22 +24 0 obj +<< + /Contents 77 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 23 +25 0 obj +<< + /Contents 79 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 24 +26 0 obj +<< + /Contents 81 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 25 +27 0 obj +<< + /Contents 83 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 26 +28 0 obj +<< + /Contents 85 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 27 +29 0 obj +<< + /Contents 87 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 28 +30 0 obj +<< + /Contents 89 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 29 +31 0 obj +<< + /Contents 91 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 30 +32 0 obj +<< + /Contents 93 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +33 0 obj +<< + /Length 34 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 0) Tj +ET +endstream +endobj + +34 0 obj +46 +endobj + +35 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +36 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 2 +37 0 obj +<< + /Length 38 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 1) Tj +ET +endstream +endobj + +38 0 obj +46 +endobj + +%% Contents for page 3 +39 0 obj +<< + /Length 40 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 2) Tj +ET +endstream +endobj + +40 0 obj +46 +endobj + +%% Contents for page 4 +41 0 obj +<< + /Length 42 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 3) Tj +ET +endstream +endobj + +42 0 obj +46 +endobj + +%% Contents for page 5 +43 0 obj +<< + /Length 44 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 4) Tj +ET +endstream +endobj + +44 0 obj +46 +endobj + +%% Contents for page 6 +45 0 obj +<< + /Length 46 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 5) Tj +ET +endstream +endobj + +46 0 obj +46 +endobj + +%% Contents for page 7 +47 0 obj +<< + /Length 48 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 6) Tj +ET +endstream +endobj + +48 0 obj +46 +endobj + +%% Contents for page 8 +49 0 obj +<< + /Length 50 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 7) Tj +ET +endstream +endobj + +50 0 obj +46 +endobj + +%% Contents for page 9 +51 0 obj +<< + /Length 52 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 8) Tj +ET +endstream +endobj + +52 0 obj +46 +endobj + +%% Contents for page 10 +53 0 obj +<< + /Length 54 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 9) Tj +ET +endstream +endobj + +54 0 obj +46 +endobj + +%% Contents for page 11 +55 0 obj +<< + /Length 56 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 10) Tj +ET +endstream +endobj + +56 0 obj +47 +endobj + +%% Contents for page 12 +57 0 obj +<< + /Length 58 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 11) Tj +ET +endstream +endobj + +58 0 obj +47 +endobj + +%% Contents for page 13 +59 0 obj +<< + /Length 60 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 12) Tj +ET +endstream +endobj + +60 0 obj +47 +endobj + +%% Contents for page 14 +61 0 obj +<< + /Length 62 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 13) Tj +ET +endstream +endobj + +62 0 obj +47 +endobj + +%% Contents for page 15 +63 0 obj +<< + /Length 64 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 14) Tj +ET +endstream +endobj + +64 0 obj +47 +endobj + +%% Contents for page 16 +65 0 obj +<< + /Length 66 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 15) Tj +ET +endstream +endobj + +66 0 obj +47 +endobj + +%% Contents for page 17 +67 0 obj +<< + /Length 68 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 16) Tj +ET +endstream +endobj + +68 0 obj +47 +endobj + +%% Contents for page 18 +69 0 obj +<< + /Length 70 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 17) Tj +ET +endstream +endobj + +70 0 obj +47 +endobj + +%% Contents for page 19 +71 0 obj +<< + /Length 72 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 18) Tj +ET +endstream +endobj + +72 0 obj +47 +endobj + +%% Contents for page 20 +73 0 obj +<< + /Length 74 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 19) Tj +ET +endstream +endobj + +74 0 obj +47 +endobj + +%% Contents for page 21 +75 0 obj +<< + /Length 76 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 20) Tj +ET +endstream +endobj + +76 0 obj +47 +endobj + +%% Contents for page 22 +77 0 obj +<< + /Length 78 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 21) Tj +ET +endstream +endobj + +78 0 obj +47 +endobj + +%% Contents for page 23 +79 0 obj +<< + /Length 80 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 22) Tj +ET +endstream +endobj + +80 0 obj +47 +endobj + +%% Contents for page 24 +81 0 obj +<< + /Length 82 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 23) Tj +ET +endstream +endobj + +82 0 obj +47 +endobj + +%% Contents for page 25 +83 0 obj +<< + /Length 84 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 24) Tj +ET +endstream +endobj + +84 0 obj +47 +endobj + +%% Contents for page 26 +85 0 obj +<< + /Length 86 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 25) Tj +ET +endstream +endobj + +86 0 obj +47 +endobj + +%% Contents for page 27 +87 0 obj +<< + /Length 88 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 26) Tj +ET +endstream +endobj + +88 0 obj +47 +endobj + +%% Contents for page 28 +89 0 obj +<< + /Length 90 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 27) Tj +ET +endstream +endobj + +90 0 obj +47 +endobj + +%% Contents for page 29 +91 0 obj +<< + /Length 92 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 28) Tj +ET +endstream +endobj + +92 0 obj +47 +endobj + +%% Contents for page 30 +93 0 obj +<< + /Length 94 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 29) Tj +ET +endstream +endobj + +94 0 obj +47 +endobj + +95 0 obj +<< + /Type /Outlines + /First 96 0 R + /Last 97 0 R + /Count 6 +>> +endobj + +96 0 obj +<< + /Type /Outline + /Title (Isís 1 -> 5: /XYZ null null null) + /Parent 95 0 R + /Count 4 + /Next 97 0 R + /First 98 0 R + /Last 99 0 R + /Dest [ 8 0 R /XYZ null null null ] +>> +endobj + +97 0 obj +<< + /Type /Outline + /Title (Trepak 2 -> 15: /XYZ 66 756 3) + /Parent 95 0 R + /Prev 96 0 R + /Dest [ 18 0 R /XYZ 66 756 3 ] +>> +endobj + +98 0 obj +<< + /Type /Outline + /Title (Amanda 1.1 -> 11: /Fit) + /Parent 96 0 R + /Next 99 0 R + /First 100 0 R + /Last 101 0 R + /Count -3 + /Dest [ 14 0 R /Fit ] +>> +endobj + +99 0 obj +<< + /Type /Outline + % /Title (Sandy (Sandy [Greek]) 1.2 -> 13: /FitH 792) + /Title <feff00530061006e00640079002000f703a303b103bd03b403b900f700200031002e00320020002d003e002000310033003a0020002f00460069007400480020003700390032> + /Parent 96 0 R + /Prev 98 0 R + /First 105 0 R + /Last 106 0 R + /Count 2 + /Dest [ 16 0 R /FitH 792 ] +>> +endobj + +100 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.1 -> 12: /FitV 100) + /Parent 98 0 R + /Next 101 0 R + /First 102 0 R + /Last 103 0 R + /Count -2 + /Dest [ 15 0 R /FitV 100 ] +>> +endobj + +101 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.2 -> 12: /XYZ null null null) + /Parent 98 0 R + /Prev 100 0 R + /First 104 0 R + /Last 104 0 R + /Count 1 + /Dest [ 15 0 R /XYZ null null null ] +>> +endobj + +102 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.1.1 -> 18: /XYZ null null null) + /Parent 100 0 R + /Next 103 0 R + /Dest [ 21 0 R /XYZ null null null ] +>> +endobj + +103 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.1.2 -> 19: /XYZ null null null) + /Parent 100 0 R + /Prev 102 0 R + /Dest [ 22 0 R /XYZ null null null ] +>> +endobj + +104 0 obj +<< + /Type /Outline + /Title (Isosicle 1.1.2.1 -> 22: /XYZ null null null) + /Parent 101 0 R + /Dest [ 25 0 R /XYZ null null null ] +>> +endobj + +105 0 obj +<< + /Type /Outline + /Title (Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770) + /Parent 99 0 R + /Next 106 0 R + /Dest [ 4 0 R /FitR 66 714 180 770 ] +>> +endobj + +106 0 obj +<< + /Type /Outline + /Title (Trepsicle 1.2.2 -> 0: /XYZ null null null) + /Parent 99 0 R + /Prev 105 0 R + /Dest [ 3 0 R /XYZ null null null ] +>> +endobj + +107 0 obj + << /Nums [ + 0 << /P () >> + 2 << /S /r /St 1 >> + 7 << /P () >> + 9 << /S /r /St 6 >> + 11 << /P () >> + 12 << /S /D /St 2 >> + 15 << /S /D /St 6 >> + 19 << /P () >> + 20 << /S /D /St 12 >> + 22 << /S /D /St 16059 >> + 23 << /S /r /St 50 >> + 29 << /S /r /St 54 >> + ] >> +endobj + +xref +0 108 +0000000000 65535 f +0000000025 00000 n +0000000145 00000 n +0000000541 00000 n +0000000746 00000 n +0000000951 00000 n +0000001156 00000 n +0000001361 00000 n +0000001566 00000 n +0000001771 00000 n +0000001976 00000 n +0000002182 00000 n +0000002389 00000 n +0000002596 00000 n +0000002803 00000 n +0000003010 00000 n +0000003217 00000 n +0000003424 00000 n +0000003631 00000 n +0000003838 00000 n +0000004045 00000 n +0000004252 00000 n +0000004459 00000 n +0000004666 00000 n +0000004873 00000 n +0000005080 00000 n +0000005287 00000 n +0000005494 00000 n +0000005701 00000 n +0000005908 00000 n +0000006115 00000 n +0000006322 00000 n +0000006529 00000 n +0000006748 00000 n +0000006851 00000 n +0000006871 00000 n +0000006990 00000 n +0000007049 00000 n +0000007152 00000 n +0000007195 00000 n +0000007298 00000 n +0000007341 00000 n +0000007444 00000 n +0000007487 00000 n +0000007590 00000 n +0000007633 00000 n +0000007736 00000 n +0000007779 00000 n +0000007882 00000 n +0000007925 00000 n +0000008028 00000 n +0000008071 00000 n +0000008174 00000 n +0000008218 00000 n +0000008321 00000 n +0000008365 00000 n +0000008469 00000 n +0000008513 00000 n +0000008617 00000 n +0000008661 00000 n +0000008765 00000 n +0000008809 00000 n +0000008913 00000 n +0000008957 00000 n +0000009061 00000 n +0000009105 00000 n +0000009209 00000 n +0000009253 00000 n +0000009357 00000 n +0000009401 00000 n +0000009505 00000 n +0000009549 00000 n +0000009653 00000 n +0000009697 00000 n +0000009801 00000 n +0000009845 00000 n +0000009949 00000 n +0000009993 00000 n +0000010097 00000 n +0000010141 00000 n +0000010245 00000 n +0000010289 00000 n +0000010393 00000 n +0000010437 00000 n +0000010541 00000 n +0000010585 00000 n +0000010689 00000 n +0000010733 00000 n +0000010837 00000 n +0000010881 00000 n +0000010985 00000 n +0000011029 00000 n +0000011133 00000 n +0000011177 00000 n +0000011281 00000 n +0000011301 00000 n +0000011388 00000 n +0000011584 00000 n +0000011730 00000 n +0000011905 00000 n +0000012258 00000 n +0000012449 00000 n +0000012659 00000 n +0000012828 00000 n +0000012997 00000 n +0000013150 00000 n +0000013319 00000 n +0000013484 00000 n +trailer << + /Root 1 0 R + /Size 108 +>> +startxref +13801 +%%EOF + +% 1. Delete page labels +xref +0 1 +0000000107 65535 f +107 1 +0000000000 00001 f +trailer << /Root 1 0 R /Size 108 /Prev 13801 >> +startxref +16059 +%%EOF + +% 2. Delete outlines, reuse page labels. + +107 1 obj + << /Nums [ + 0 << /P () >> + 2 << /S /D /St 1 >> + 7 << /P () >> + 9 << /S /R /St 6 >> + 11 << /P () >> + 12 << /S /r /St 2 >> + 15 << /S /r /St 6 >> + 19 << /P () >> + 20 << /S /R /St 12 >> + 22 << /S /D /St 16059 >> + 23 << /S /r /St 50 >> + 29 << /S /r /St 54 >> + ] >> +endobj + +% Reuse object 1 with the same generation number. Leave outlines +% there pointing to a deleted object. +1 0 obj +<< + /PageLabels 107 1 R + /Pages 2 0 R + /Type /Catalog + /PageMode /UseOutlines + /Outlines 95 0 R +>> +endobj + +xref +0 2 +0000000095 65535 f +0000016648 00000 n +95 13 +0000000096 00001 f +0000000097 00001 f +0000000098 00001 f +0000000099 00001 f +0000000100 00001 f +0000000101 00001 f +0000000102 00001 f +0000000103 00001 f +0000000104 00001 f +0000000105 00001 f +0000000106 00001 f +0000000000 00001 f +0000016227 00001 n +trailer << /Size 108 /Prev 16059 /Root 1 0 R >> +startxref +16768 +%%EOF diff --git a/qpdf/qtest/qpdf/delete-and-reuse.qdf b/qpdf/qtest/qpdf/delete-and-reuse.qdf new file mode 100644 index 00000000..14fbbdb5 --- /dev/null +++ b/qpdf/qtest/qpdf/delete-and-reuse.qdf @@ -0,0 +1,1408 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /PageLabels 2 0 R + /PageMode /UseOutlines + /Pages 3 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Nums [ + 0 + << + /P () + >> + 2 + << + /S /D + /St 1 + >> + 7 + << + /P () + >> + 9 + << + /S /R + /St 6 + >> + 11 + << + /P () + >> + 12 + << + /S /r + /St 2 + >> + 15 + << + /S /r + /St 6 + >> + 19 + << + /P () + >> + 20 + << + /S /R + /St 12 + >> + 22 + << + /S /D + /St 16059 + >> + 23 + << + /S /r + /St 50 + >> + 29 + << + /S /r + /St 54 + >> + ] +>> +endobj + +3 0 obj +<< + /Count 30 + /Kids [ + 4 0 R + 5 0 R + 6 0 R + 7 0 R + 8 0 R + 9 0 R + 10 0 R + 11 0 R + 12 0 R + 13 0 R + 14 0 R + 15 0 R + 16 0 R + 17 0 R + 18 0 R + 19 0 R + 20 0 R + 21 0 R + 22 0 R + 23 0 R + 24 0 R + 25 0 R + 26 0 R + 27 0 R + 28 0 R + 29 0 R + 30 0 R + 31 0 R + 32 0 R + 33 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +4 0 obj +<< + /Contents 34 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 2 +5 0 obj +<< + /Contents 38 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 3 +6 0 obj +<< + /Contents 40 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 4 +7 0 obj +<< + /Contents 42 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 5 +8 0 obj +<< + /Contents 44 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 6 +9 0 obj +<< + /Contents 46 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 7 +10 0 obj +<< + /Contents 48 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 8 +11 0 obj +<< + /Contents 50 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 9 +12 0 obj +<< + /Contents 52 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 10 +13 0 obj +<< + /Contents 54 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 11 +14 0 obj +<< + /Contents 56 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 12 +15 0 obj +<< + /Contents 58 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 13 +16 0 obj +<< + /Contents 60 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 14 +17 0 obj +<< + /Contents 62 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 15 +18 0 obj +<< + /Contents 64 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 16 +19 0 obj +<< + /Contents 66 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 17 +20 0 obj +<< + /Contents 68 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 18 +21 0 obj +<< + /Contents 70 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 19 +22 0 obj +<< + /Contents 72 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 20 +23 0 obj +<< + /Contents 74 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 21 +24 0 obj +<< + /Contents 76 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 22 +25 0 obj +<< + /Contents 78 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 23 +26 0 obj +<< + /Contents 80 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 24 +27 0 obj +<< + /Contents 82 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 25 +28 0 obj +<< + /Contents 84 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 26 +29 0 obj +<< + /Contents 86 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 27 +30 0 obj +<< + /Contents 88 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 28 +31 0 obj +<< + /Contents 90 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 29 +32 0 obj +<< + /Contents 92 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Page 30 +33 0 obj +<< + /Contents 94 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 36 0 R + >> + /ProcSet 37 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +34 0 obj +<< + /Length 35 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 0) Tj +ET +endstream +endobj + +35 0 obj +46 +endobj + +36 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +37 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 2 +38 0 obj +<< + /Length 39 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 1) Tj +ET +endstream +endobj + +39 0 obj +46 +endobj + +%% Contents for page 3 +40 0 obj +<< + /Length 41 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 2) Tj +ET +endstream +endobj + +41 0 obj +46 +endobj + +%% Contents for page 4 +42 0 obj +<< + /Length 43 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 3) Tj +ET +endstream +endobj + +43 0 obj +46 +endobj + +%% Contents for page 5 +44 0 obj +<< + /Length 45 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 4) Tj +ET +endstream +endobj + +45 0 obj +46 +endobj + +%% Contents for page 6 +46 0 obj +<< + /Length 47 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 5) Tj +ET +endstream +endobj + +47 0 obj +46 +endobj + +%% Contents for page 7 +48 0 obj +<< + /Length 49 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 6) Tj +ET +endstream +endobj + +49 0 obj +46 +endobj + +%% Contents for page 8 +50 0 obj +<< + /Length 51 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 7) Tj +ET +endstream +endobj + +51 0 obj +46 +endobj + +%% Contents for page 9 +52 0 obj +<< + /Length 53 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 8) Tj +ET +endstream +endobj + +53 0 obj +46 +endobj + +%% Contents for page 10 +54 0 obj +<< + /Length 55 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 9) Tj +ET +endstream +endobj + +55 0 obj +46 +endobj + +%% Contents for page 11 +56 0 obj +<< + /Length 57 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 10) Tj +ET +endstream +endobj + +57 0 obj +47 +endobj + +%% Contents for page 12 +58 0 obj +<< + /Length 59 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 11) Tj +ET +endstream +endobj + +59 0 obj +47 +endobj + +%% Contents for page 13 +60 0 obj +<< + /Length 61 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 12) Tj +ET +endstream +endobj + +61 0 obj +47 +endobj + +%% Contents for page 14 +62 0 obj +<< + /Length 63 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 13) Tj +ET +endstream +endobj + +63 0 obj +47 +endobj + +%% Contents for page 15 +64 0 obj +<< + /Length 65 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 14) Tj +ET +endstream +endobj + +65 0 obj +47 +endobj + +%% Contents for page 16 +66 0 obj +<< + /Length 67 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 15) Tj +ET +endstream +endobj + +67 0 obj +47 +endobj + +%% Contents for page 17 +68 0 obj +<< + /Length 69 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 16) Tj +ET +endstream +endobj + +69 0 obj +47 +endobj + +%% Contents for page 18 +70 0 obj +<< + /Length 71 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 17) Tj +ET +endstream +endobj + +71 0 obj +47 +endobj + +%% Contents for page 19 +72 0 obj +<< + /Length 73 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 18) Tj +ET +endstream +endobj + +73 0 obj +47 +endobj + +%% Contents for page 20 +74 0 obj +<< + /Length 75 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 19) Tj +ET +endstream +endobj + +75 0 obj +47 +endobj + +%% Contents for page 21 +76 0 obj +<< + /Length 77 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 20) Tj +ET +endstream +endobj + +77 0 obj +47 +endobj + +%% Contents for page 22 +78 0 obj +<< + /Length 79 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 21) Tj +ET +endstream +endobj + +79 0 obj +47 +endobj + +%% Contents for page 23 +80 0 obj +<< + /Length 81 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 22) Tj +ET +endstream +endobj + +81 0 obj +47 +endobj + +%% Contents for page 24 +82 0 obj +<< + /Length 83 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 23) Tj +ET +endstream +endobj + +83 0 obj +47 +endobj + +%% Contents for page 25 +84 0 obj +<< + /Length 85 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 24) Tj +ET +endstream +endobj + +85 0 obj +47 +endobj + +%% Contents for page 26 +86 0 obj +<< + /Length 87 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 25) Tj +ET +endstream +endobj + +87 0 obj +47 +endobj + +%% Contents for page 27 +88 0 obj +<< + /Length 89 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 26) Tj +ET +endstream +endobj + +89 0 obj +47 +endobj + +%% Contents for page 28 +90 0 obj +<< + /Length 91 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 27) Tj +ET +endstream +endobj + +91 0 obj +47 +endobj + +%% Contents for page 29 +92 0 obj +<< + /Length 93 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 28) Tj +ET +endstream +endobj + +93 0 obj +47 +endobj + +%% Contents for page 30 +94 0 obj +<< + /Length 95 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 29) Tj +ET +endstream +endobj + +95 0 obj +47 +endobj + +xref +0 96 +0000000000 65535 f +0000000025 00000 n +0000000124 00000 n +0000000655 00000 n +0000001052 00000 n +0000001257 00000 n +0000001462 00000 n +0000001667 00000 n +0000001872 00000 n +0000002077 00000 n +0000002282 00000 n +0000002488 00000 n +0000002694 00000 n +0000002901 00000 n +0000003108 00000 n +0000003315 00000 n +0000003522 00000 n +0000003729 00000 n +0000003936 00000 n +0000004143 00000 n +0000004350 00000 n +0000004557 00000 n +0000004764 00000 n +0000004971 00000 n +0000005178 00000 n +0000005385 00000 n +0000005592 00000 n +0000005799 00000 n +0000006006 00000 n +0000006213 00000 n +0000006420 00000 n +0000006627 00000 n +0000006834 00000 n +0000007041 00000 n +0000007260 00000 n +0000007363 00000 n +0000007383 00000 n +0000007502 00000 n +0000007561 00000 n +0000007664 00000 n +0000007707 00000 n +0000007810 00000 n +0000007853 00000 n +0000007956 00000 n +0000007999 00000 n +0000008102 00000 n +0000008145 00000 n +0000008248 00000 n +0000008291 00000 n +0000008394 00000 n +0000008437 00000 n +0000008540 00000 n +0000008583 00000 n +0000008686 00000 n +0000008730 00000 n +0000008833 00000 n +0000008877 00000 n +0000008981 00000 n +0000009025 00000 n +0000009129 00000 n +0000009173 00000 n +0000009277 00000 n +0000009321 00000 n +0000009425 00000 n +0000009469 00000 n +0000009573 00000 n +0000009617 00000 n +0000009721 00000 n +0000009765 00000 n +0000009869 00000 n +0000009913 00000 n +0000010017 00000 n +0000010061 00000 n +0000010165 00000 n +0000010209 00000 n +0000010313 00000 n +0000010357 00000 n +0000010461 00000 n +0000010505 00000 n +0000010609 00000 n +0000010653 00000 n +0000010757 00000 n +0000010801 00000 n +0000010905 00000 n +0000010949 00000 n +0000011053 00000 n +0000011097 00000 n +0000011201 00000 n +0000011245 00000 n +0000011349 00000 n +0000011393 00000 n +0000011497 00000 n +0000011541 00000 n +0000011645 00000 n +0000011689 00000 n +0000011793 00000 n +trailer << + /Root 1 0 R + /Size 96 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +11813 +%%EOF diff --git a/qpdf/qtest/qpdf/diff-encrypted b/qpdf/qtest/qpdf/diff-encrypted new file mode 100755 index 00000000..64c0b2a8 --- /dev/null +++ b/qpdf/qtest/qpdf/diff-encrypted @@ -0,0 +1,7 @@ +#!/bin/sh +lines=$(expr + $(diff $1 $2 | egrep '^[<>]' | egrep -v 'Date' | wc -l)) +if [ "$lines" == "0" ]; then + echo okay +else + diff -a -U 0 $1 $2 +fi diff --git a/qpdf/qtest/qpdf/enc-R2,V1,O=master.pdf b/qpdf/qtest/qpdf/enc-R2,V1,O=master.pdf Binary files differnew file mode 100644 index 00000000..bac7eaec --- /dev/null +++ b/qpdf/qtest/qpdf/enc-R2,V1,O=master.pdf diff --git a/qpdf/qtest/qpdf/enc-R2,V1,U=view,O=master.pdf b/qpdf/qtest/qpdf/enc-R2,V1,U=view,O=master.pdf Binary files differnew file mode 100644 index 00000000..d5492134 --- /dev/null +++ b/qpdf/qtest/qpdf/enc-R2,V1,U=view,O=master.pdf diff --git a/qpdf/qtest/qpdf/enc-R2,V1,U=view.pdf b/qpdf/qtest/qpdf/enc-R2,V1,U=view.pdf Binary files differnew file mode 100644 index 00000000..d99bf6f8 --- /dev/null +++ b/qpdf/qtest/qpdf/enc-R2,V1,U=view.pdf diff --git a/qpdf/qtest/qpdf/enc-R2,V1.pdf b/qpdf/qtest/qpdf/enc-R2,V1.pdf Binary files differnew file mode 100644 index 00000000..dec9e6d7 --- /dev/null +++ b/qpdf/qtest/qpdf/enc-R2,V1.pdf diff --git a/qpdf/qtest/qpdf/enc-R3,V2,O=master.pdf b/qpdf/qtest/qpdf/enc-R3,V2,O=master.pdf Binary files differnew file mode 100644 index 00000000..88585663 --- /dev/null +++ b/qpdf/qtest/qpdf/enc-R3,V2,O=master.pdf diff --git a/qpdf/qtest/qpdf/enc-R3,V2,U=view,O=master.pdf b/qpdf/qtest/qpdf/enc-R3,V2,U=view,O=master.pdf Binary files differnew file mode 100644 index 00000000..9b95ae36 --- /dev/null +++ b/qpdf/qtest/qpdf/enc-R3,V2,U=view,O=master.pdf diff --git a/qpdf/qtest/qpdf/enc-R3,V2,U=view.pdf b/qpdf/qtest/qpdf/enc-R3,V2,U=view.pdf Binary files differnew file mode 100644 index 00000000..a4efba7a --- /dev/null +++ b/qpdf/qtest/qpdf/enc-R3,V2,U=view.pdf diff --git a/qpdf/qtest/qpdf/enc-R3,V2.pdf b/qpdf/qtest/qpdf/enc-R3,V2.pdf Binary files differnew file mode 100644 index 00000000..80727887 --- /dev/null +++ b/qpdf/qtest/qpdf/enc-R3,V2.pdf diff --git a/qpdf/qtest/qpdf/enc-base.pdf b/qpdf/qtest/qpdf/enc-base.pdf Binary files differnew file mode 100644 index 00000000..bac51307 --- /dev/null +++ b/qpdf/qtest/qpdf/enc-base.pdf diff --git a/qpdf/qtest/qpdf/enc-long-password.pdf b/qpdf/qtest/qpdf/enc-long-password.pdf Binary files differnew file mode 100755 index 00000000..ef064fe9 --- /dev/null +++ b/qpdf/qtest/qpdf/enc-long-password.pdf diff --git a/qpdf/qtest/qpdf/encrypted-with-images.pdf b/qpdf/qtest/qpdf/encrypted-with-images.pdf Binary files differnew file mode 100644 index 00000000..dbceb445 --- /dev/null +++ b/qpdf/qtest/qpdf/encrypted-with-images.pdf diff --git a/qpdf/qtest/qpdf/encrypted1.out b/qpdf/qtest/qpdf/encrypted1.out new file mode 100644 index 00000000..f3946c2f --- /dev/null +++ b/qpdf/qtest/qpdf/encrypted1.out @@ -0,0 +1,578 @@ +D:20000914005716 +Acrobat Distiller 4.05 for Windows +(hs[¨.<7µ¸"\205\020º~?ö¥zßù\220\024\203Þ#W\230\214\nBªH) +(ó*Øý¢¬:F\027\21177\nov\007\031 I\235\205\n\225ñw¹\b\233n Ê) +1 g +/GS1 gs +1 i +178.226 60.781 344.491 -11.279 re +f +BT +/F4 1 Tf +9.999 0 0 9.999 178.2259 51.9016 Tm +0 g +0.003 Tc +0 Tw +[(T)7(h)-1(e)-249(U)5(ni)5(code)-249(St)5(andar)8(d)-253(3)-1(.0,)-251(C)10(opyr)8(i)5(ght)-247(©)-221(1991-2000,)-251(U)5(n)-1(i)5(c)3(ode,)-251(I)0(nc.)-251(A)2(l)5(l)-247(r)8(i)5(ght)5(s)-244(r)8(es)8(er)8(ved)]TJ +ET +1 g +72.035 60.781 15.119 -11.279 re +f +BT +9.999 0 0 9.999 72.0347 51.9016 Tm +0 g +0.004 Tc +(542)Tj +ET +1 g +490.8 769.802 31.197 -15.959 re +f +BT +/F5 1 Tf +13.9985 0 0 13.9985 490.7998 756.9629 Tm +0 g +0.0057 Tc +[(25F)8.1(F)]TJ +ET +1 g +242.541 769.802 108.831 -15.959 re +f +BT +13.9985 0 0 13.9985 242.5405 756.9629 Tm +0 g +0.0027 Tc +[(Geom)12.8(etric)-247.6(Shapes)]TJ +ET +1 g +72.035 769.802 31.317 -15.959 re +f +BT +13.9985 0 0 13.9985 72.0347 756.9629 Tm +0 g +0.0057 Tc +[(25A)7.7(0)]TJ +ET +0 G +2 J 1 j 1.49 w 10 M []0 d +202.104 727.685 m +202.104 79.259 l +391.928 727.685 m +391.928 79.259 l +202.104 712.807 m +391.928 712.807 l +202.104 79.259 m +391.928 79.259 l +S +BT +/F6 1 Tf +9.999 0 0 9.999 209.0633 719.286 Tm +-0.004 Tc +[(25A)-1389(25B)-1377(25C)-1346(25D)-1370(25E)-1413(25F)]TJ +ET +1 g +360.371 396.033 31.557 -39.597 re +f +/Cs9 cs 0 /P1 scn +360.371 396.033 31.557 -39.597 re +f +1 g +360.371 356.436 31.557 -39.597 re +f +/Cs9 cs 0 /P1 scn +360.371 356.436 31.557 -39.597 re +f +1 g +360.371 316.84 31.557 -39.597 re +f +/Cs9 cs 0 /P1 scn +360.371 316.84 31.557 -39.597 re +f +1 g +360.371 277.243 31.557 -39.597 re +f +/Cs9 cs 0 /P1 scn +360.371 277.243 31.557 -39.597 re +f +1 g +360.371 237.646 31.557 -39.597 re +f +/Cs9 cs 0 /P1 scn +360.371 237.646 31.557 -39.597 re +f +1 g +360.371 198.049 31.557 -39.597 re +f +/Cs9 cs 0 /P1 scn +360.371 198.049 31.557 -39.597 re +f +1 g +360.371 158.453 31.557 -39.597 re +f +/Cs9 cs 0 /P1 scn +360.371 158.453 31.557 -39.597 re +f +1 g +360.371 118.856 31.557 -39.597 re +f +/Cs9 cs 0 /P1 scn +360.371 118.856 31.557 -39.597 re +f +0.248 w +202.104 712.807 m +202.104 79.259 l +233.781 712.807 m +233.781 79.259 l +265.339 712.807 m +265.339 79.259 l +297.016 712.807 m +297.016 79.259 l +328.693 712.807 m +328.693 79.259 l +360.371 712.807 m +360.371 79.259 l +391.928 712.807 m +391.928 79.259 l +202.104 712.807 m +391.928 712.807 l +202.104 673.21 m +391.928 673.21 l +202.104 633.613 m +391.928 633.613 l +202.104 594.016 m +391.928 594.016 l +202.104 554.42 m +391.928 554.42 l +202.104 514.823 m +391.928 514.823 l +202.104 475.226 m +391.928 475.226 l +202.104 435.63 m +391.928 435.63 l +202.104 396.033 m +391.928 396.033 l +202.104 356.436 m +391.928 356.436 l +202.104 316.84 m +391.928 316.84 l +202.104 277.243 m +391.928 277.243 l +202.104 237.646 m +391.928 237.646 l +202.104 198.049 m +391.928 198.049 l +202.104 158.453 m +391.928 158.453 l +202.104 118.856 m +391.928 118.856 l +202.104 79.259 m +391.928 79.259 l +S +BT +/F7 1 Tf +21.998 0 0 21.998 209.6633 687.6086 Tm +0 g +0 Tc +()Tj +0 -1.8 TD +()Tj +T* +()Tj +T* +()Tj +T* +()Tj +T* +()Tj +T* +()Tj +T* +()Tj +T* +( )Tj +T* +(\012)Tj +/F9 1 Tf +0.2673 -1.8 TD +()Tj +T* +()Tj +/F7 1 Tf +-0.3436 -1.8 TD +()Tj +T* +()Tj +0.2018 -1.8 TD +(\015)Tj +T* +()Tj +1.2491 27.0002 TD +()Tj +0 -1.8 TD +()Tj +0.06 -1.8 TD +()Tj +T* +()Tj +0.2127 -1.8 TD +()Tj +T* +()Tj +-0.1636 -1.8 TD +()Tj +T* +()Tj +0.1855 -1.8 TD +()Tj +T* +()Tj +-0.1418 -1.8 TD +()Tj +T* +()Tj +-0.0927 -1.8 TD +()Tj +T* +()Tj +0.2127 -1.8 TD +()Tj +T* +()Tj +1.2764 27.0002 TD +()Tj +0 -1.8 TD +( )Tj +0.1855 -1.8 TD +(!)Tj +T* +(")Tj +-0.1418 -1.8 TD +(#)Tj +T* +($)Tj +-0.0927 -1.8 TD +(%)Tj +T* +(&)Tj +T* +(')Tj +T* +(\()Tj +0.0927 -1.8 TD +(\))Tj +-0.0927 -1.8 TD +(*)Tj +T* +(+)Tj +T* +(,)Tj +T* +(-)Tj +T* +(.)Tj +1.44 27.0002 TD +(/)Tj +0 -1.8 TD +(0)Tj +T* +(1)Tj +T* +(2)Tj +T* +(3)Tj +T* +(4)Tj +T* +(5)Tj +T* +(6)Tj +0.2018 -1.8 TD +(7)Tj +-0.2018 -1.8 TD +(8)Tj +T* +(9)Tj +T* +(:)Tj +T* +(;)Tj +T* +(<)Tj +T* +(=)Tj +T* +(>)Tj +1.44 27.0002 TD +(?)Tj +0 -1.8 TD +(@)Tj +T* +(A)Tj +T* +(B)Tj +T* +(C)Tj +T* +(D)Tj +0.2018 -1.8 TD +(E)Tj +-0.2018 -1.8 TD +(F)Tj +T* +(G)Tj +T* +(H)Tj +T* +(I)Tj +T* +(J)Tj +T* +(K)Tj +T* +(L)Tj +T* +(M)Tj +T* +(N)Tj +1.4346 27.0002 TD +(O)Tj +0 -1.8 TD +(P)Tj +T* +(Q)Tj +T* +(R)Tj +T* +(S)Tj +T* +(T)Tj +T* +(U)Tj +T* +(V)Tj +/F11 1 Tf +5.9995 0 0 5.9995 212.183 675.2496 Tm +0.004 Tc +[(25A)11(0)]TJ +0 -6.6 TD +[(25A)11(1)]TJ +T* +[(25A)11(2)]TJ +T* +[(25A)11(3)]TJ +T* +[(25A)11(4)]TJ +T* +[(25A)11(5)]TJ +T* +[(25A)11(6)]TJ +T* +[(25A)11(7)]TJ +T* +[(25A)11(8)]TJ +T* +[(25A)11(9)]TJ +-0.04 -6.6 TD +[(25A)11(A)]TJ +T* +[(25A)11(B)]TJ +-0.04 -6.6 TD +[(25A)11(C)]TJ +T* +[(25A)11(D)]TJ +0.04 -6.6 TD +[(25A)11(E)]TJ +0.02 -6.6 TD +[(25A)11(F)]TJ +5.28 99 TD +[(25B)11(0)]TJ +0 -6.6 TD +[(25B)11(1)]TJ +T* +[(25B)11(2)]TJ +T* +[(25B)11(3)]TJ +T* +[(25B)11(4)]TJ +T* +[(25B)11(5)]TJ +T* +[(25B)11(6)]TJ +T* +[(25B)11(7)]TJ +T* +[(25B)11(8)]TJ +T* +[(25B)11(9)]TJ +-0.04 -6.6 TD +[(25B)11(A)]TJ +T* +[(25B)11(B)]TJ +-0.04 -6.6 TD +[(25B)11(C)]TJ +T* +[(25B)11(D)]TJ +0.04 -6.6 TD +[(25B)11(E)]TJ +0.02 -6.6 TD +[(25B)11(F)]TJ +5.26 99 TD +0.0053 Tc +(25C0)Tj +0 -6.6 TD +(25C1)Tj +T* +(25C2)Tj +T* +(25C3)Tj +T* +(25C4)Tj +T* +(25C5)Tj +T* +(25C6)Tj +T* +(25C7)Tj +T* +(25C8)Tj +T* +(25C9)Tj +-0.04 -6.6 TD +(25CA)Tj +T* +(25CB)Tj +-0.02 -6.6 TD +(25CC)Tj +T* +(25CD)Tj +0.02 -6.6 TD +(25CE)Tj +0.02 -6.6 TD +(25CF)Tj +5.3 99 TD +(25D0)Tj +0 -6.6 TD +(25D1)Tj +T* +(25D2)Tj +T* +(25D3)Tj +T* +(25D4)Tj +T* +(25D5)Tj +T* +(25D6)Tj +T* +(25D7)Tj +T* +(25D8)Tj +T* +(25D9)Tj +-0.04 -6.6 TD +(25DA)Tj +T* +(25DB)Tj +-0.02 -6.6 TD +(25DC)Tj +T* +(25DD)Tj +0.02 -6.6 TD +(25DE)Tj +0.02 -6.6 TD +(25DF)Tj +5.34 99 TD +0.004 Tc +[(25E)11(0)]TJ +0 -6.6 TD +[(25E)11(1)]TJ +T* +[(25E)11(2)]TJ +T* +[(25E)11(3)]TJ +T* +[(25E)11(4)]TJ +T* +[(25E)11(5)]TJ +T* +[(25E)11(6)]TJ +T* +[(25E)11(7)]TJ +T* +[(25E)11(8)]TJ +T* +[(25E)11(9)]TJ +-0.04 -6.6 TD +[(25E)11(A)]TJ +T* +[(25E)11(B)]TJ +-0.04 -6.6 TD +[(25E)11(C)]TJ +T* +[(25E)11(D)]TJ +0.04 -6.6 TD +[(25E)11(E)]TJ +0.02 -6.6 TD +[(25E)11(F)]TJ +5.3 99 TD +0.0023 Tc +(25F0)Tj +0 -6.6 TD +(25F1)Tj +T* +(25F2)Tj +T* +(25F3)Tj +T* +(25F4)Tj +T* +(25F5)Tj +T* +(25F6)Tj +T* +(25F7)Tj +/F6 1 Tf +9.999 0 0 9.999 191.4248 687.6086 Tm +0 Tc +(0)Tj +0 -3.9601 TD +(1)Tj +T* +(2)Tj +T* +(3)Tj +T* +(4)Tj +T* +(5)Tj +T* +(6)Tj +T* +(7)Tj +T* +(8)Tj +T* +(9)Tj +-0.06 -3.9601 TD +(A)Tj +T* +(B)Tj +-0.024 -3.9601 TD +(C)Tj +T* +(D)Tj +0.024 -3.9601 TD +(E)Tj +0.024 -3.9601 TD +(F)Tj +ET +1.49 w +202.104 727.685 m +202.104 79.259 l +391.928 727.685 m +391.928 79.259 l +202.104 712.807 m +391.928 712.807 l +202.104 79.259 m +391.928 79.259 l +S +test 2 done diff --git a/qpdf/qtest/qpdf/fix1.qdf b/qpdf/qtest/qpdf/fix1.qdf new file mode 100644 index 00000000..091372fc --- /dev/null +++ b/qpdf/qtest/qpdf/fix1.qdf @@ -0,0 +1,111 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents [ 4 0 R 8 0 R ] + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato Soup) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +8 0 obj +<< + /Length 9 0 R +>> +stream +BT + /F1 24 Tf + 72 648 Td + (and Salad) Tj +ET +endstream +endobj + +9 0 obj +0 +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +trailer << + /Root 1 0 R + /Size 8 +>> +startxref +647 +%%EOF diff --git a/qpdf/qtest/qpdf/fix1.qdf.out b/qpdf/qtest/qpdf/fix1.qdf.out new file mode 100644 index 00000000..d436bce7 --- /dev/null +++ b/qpdf/qtest/qpdf/fix1.qdf.out @@ -0,0 +1,113 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents [ 4 0 R 8 0 R ] + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato Soup) Tj +ET +endstream +endobj + +5 0 obj +49 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +8 0 obj +<< + /Length 9 0 R +>> +stream +BT + /F1 24 Tf + 72 648 Td + (and Salad) Tj +ET +endstream +endobj + +9 0 obj +47 +endobj + +xref +0 10 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000386 00000 n +0000000490 00000 n +0000000509 00000 n +0000000627 00000 n +0000000662 00000 n +0000000764 00000 n +trailer << + /Root 1 0 R + /Size 10 +>> +startxref +783 +%%EOF diff --git a/qpdf/qtest/qpdf/fix2.qdf b/qpdf/qtest/qpdf/fix2.qdf Binary files differnew file mode 100644 index 00000000..c368523e --- /dev/null +++ b/qpdf/qtest/qpdf/fix2.qdf diff --git a/qpdf/qtest/qpdf/fix2.qdf.out b/qpdf/qtest/qpdf/fix2.qdf.out Binary files differnew file mode 100644 index 00000000..ccccaa9e --- /dev/null +++ b/qpdf/qtest/qpdf/fix2.qdf.out diff --git a/qpdf/qtest/qpdf/good1.out b/qpdf/qtest/qpdf/good1.out new file mode 100644 index 00000000..1d31025f --- /dev/null +++ b/qpdf/qtest/qpdf/good1.out @@ -0,0 +1,6 @@ +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/good1.pdf b/qpdf/qtest/qpdf/good1.pdf Binary files differnew file mode 100644 index 00000000..55b7a764 --- /dev/null +++ b/qpdf/qtest/qpdf/good1.pdf diff --git a/qpdf/qtest/qpdf/good1.qdf b/qpdf/qtest/qpdf/good1.qdf new file mode 100644 index 00000000..976ed2b2 --- /dev/null +++ b/qpdf/qtest/qpdf/good1.qdf @@ -0,0 +1,95 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +trailer << + /Root 1 0 R + /Size 8 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +647 +%%EOF diff --git a/qpdf/qtest/qpdf/good10.out b/qpdf/qtest/qpdf/good10.out new file mode 100644 index 00000000..3c0bed95 --- /dev/null +++ b/qpdf/qtest/qpdf/good10.out @@ -0,0 +1,8 @@ +/QTest is direct +/QTest is an array with 3 items + item 0 is direct + item 1 is direct + item 2 is indirect +unparse: [ 1 (2) 8 0 R ] +unparseResolved: [ 1 (2) 8 0 R ] +test 1 done diff --git a/qpdf/qtest/qpdf/good10.pdf b/qpdf/qtest/qpdf/good10.pdf new file mode 100644 index 00000000..13a88101 --- /dev/null +++ b/qpdf/qtest/qpdf/good10.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest [1 (2) 8 0 R] +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/good10.qdf b/qpdf/qtest/qpdf/good10.qdf new file mode 100644 index 00000000..c2e7a50c --- /dev/null +++ b/qpdf/qtest/qpdf/good10.qdf @@ -0,0 +1,100 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +trailer << + /QTest [ + 1 + (2) + null + ] + /Root 1 0 R + /Size 8 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +647 +%%EOF diff --git a/qpdf/qtest/qpdf/good11.out b/qpdf/qtest/qpdf/good11.out new file mode 100644 index 00000000..676a0343 --- /dev/null +++ b/qpdf/qtest/qpdf/good11.out @@ -0,0 +1,6 @@ +/QTest is direct +/QTest is a dictionary + /a is direct +unparse: << /a (a) /b 8 0 R >> +unparseResolved: << /a (a) /b 8 0 R >> +test 1 done diff --git a/qpdf/qtest/qpdf/good11.pdf b/qpdf/qtest/qpdf/good11.pdf new file mode 100644 index 00000000..4e18be7b --- /dev/null +++ b/qpdf/qtest/qpdf/good11.pdf @@ -0,0 +1,81 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest << /a(a) + /b 8 0 R >> +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/good11.qdf b/qpdf/qtest/qpdf/good11.qdf new file mode 100644 index 00000000..3d673b04 --- /dev/null +++ b/qpdf/qtest/qpdf/good11.qdf @@ -0,0 +1,98 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +trailer << + /QTest << + /a (a) + >> + /Root 1 0 R + /Size 8 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +647 +%%EOF diff --git a/qpdf/qtest/qpdf/good12.out b/qpdf/qtest/qpdf/good12.out new file mode 100644 index 00000000..b75d27b1 --- /dev/null +++ b/qpdf/qtest/qpdf/good12.out @@ -0,0 +1,13 @@ +/QTest is indirect +/QTest is a stream. Dictionary: << /Filter /FlateDecode /Length 123 >> +Raw stream data: +xœ%11û¼b;tà4| wXIDì Øå÷8G·«Í>rQ¨uŠOÒêEŒ:©IWìÃPlíµII)Ãr´p4~;§ÎAs/òÒ…jcúú¾÷Žs§åözû»žT.?®uŽæ§<Ž¼…Ð*6ä +Uncompressed stream data: +This stream is not very interesting, but it is long enough that +compressing shrinks it somewhat. Or maybe not. But it doesn't really +matter that much. + +End of stream data +unparse: 7 0 R +unparseResolved: 7 0 R +test 1 done diff --git a/qpdf/qtest/qpdf/good12.pdf b/qpdf/qtest/qpdf/good12.pdf new file mode 100644 index 00000000..8d91aef8 --- /dev/null +++ b/qpdf/qtest/qpdf/good12.pdf @@ -0,0 +1,93 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +7 0 obj +<< + % Comment + /Length + 123 + /Filter /FlateDecode +>> +stream +xœ%11û¼b;tà4| wXIDì Øå÷8G·«Í>rQ¨uŠOÒêEŒ:©IWìÃPlíµII)Ãr´p4~;§ÎAs/òÒ…jcúú¾÷Žs§åözû»žT.?®uŽæ§<Ž¼…Ð*6ä +endstream +endobj + +xref +0 8 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +0000000556 00000 n +trailer << + /Size 8 + /Root 1 0 R + /QTest 7 0 R +>> +startxref +770 +%%EOF diff --git a/qpdf/qtest/qpdf/good12.qdf b/qpdf/qtest/qpdf/good12.qdf new file mode 100644 index 00000000..107f3d04 --- /dev/null +++ b/qpdf/qtest/qpdf/good12.qdf @@ -0,0 +1,113 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 4 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Length 3 0 R +>> +stream +This stream is not very interesting, but it is long enough that +compressing shrinks it somewhat. Or maybe not. But it doesn't really +matter that much. +endstream +endobj + +3 0 obj +153 +endobj + +4 0 obj +<< + /Count 1 + /Kids [ + 5 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +5 0 obj +<< + /Contents 6 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 4 0 R + /Resources << + /Font << + /F1 8 0 R + >> + /ProcSet 9 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +6 0 obj +<< + /Length 7 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +7 0 obj +44 +endobj + +8 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +9 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 10 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000287 00000 n +0000000307 00000 n +0000000389 00000 n +0000000604 00000 n +0000000703 00000 n +0000000722 00000 n +0000000840 00000 n +trailer << + /QTest 2 0 R + /Root 1 0 R + /Size 10 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +875 +%%EOF diff --git a/qpdf/qtest/qpdf/good13.out b/qpdf/qtest/qpdf/good13.out new file mode 100644 index 00000000..a75f68c5 --- /dev/null +++ b/qpdf/qtest/qpdf/good13.out @@ -0,0 +1,9 @@ +/QTest is indirect +/QTest is a dictionary + /hex strings is direct + /indirect is indirect + /nesting is direct + /strings is direct +unparse: 7 0 R +unparseResolved: << /hex#20strings [ (Potato) <01020300040560> (AB) ] /indirect 8 0 R /nesting << /a [ 1 2 << /x (y) >> [ (z) ] ] /b << / (legal) /a [ 1 2 ] >> >> /strings [ (one) ($¢) () (\(\)) (\() (\)) (a\f\b\t\r\nb) <410042> (a\nb) (a b) ] >> +test 1 done diff --git a/qpdf/qtest/qpdf/good13.pdf b/qpdf/qtest/qpdf/good13.pdf new file mode 100644 index 00000000..516774c5 --- /dev/null +++ b/qpdf/qtest/qpdf/good13.pdf @@ -0,0 +1,101 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +7 0 obj +<< + /strings [(one) ($\242) () (()) (\() (\)) (a\f\b\t\r\nb) (A\000B) (a +b) (a \ +b)] + /hex#20strings [<506F7461746f> <010 203 0004056> <41 +42>] + /indirect 8 0 R + /n#65sting << + /a [1 2 << /x (y) >> [(z)]] + /b <</a [1 2] / (legal)>> + >> +>> +endobj + +8 0 obj +(hello) +endobj + +xref +0 9 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +0000000556 00000 n +0000000822 00000 n +trailer << + /Size 9 + /Root 1 0 R + /QTest 7 0 R +>> +startxref +846 +%%EOF diff --git a/qpdf/qtest/qpdf/good13.qdf b/qpdf/qtest/qpdf/good13.qdf new file mode 100644 index 00000000..c2f50c0f --- /dev/null +++ b/qpdf/qtest/qpdf/good13.qdf @@ -0,0 +1,139 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 3 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /hex#20strings [ + (Potato) + <01020300040560> + (AB) + ] + /indirect (hello) + /nesting << + /a [ + 1 + 2 + << + /x (y) + >> + [ + (z) + ] + ] + /b << + / (legal) + /a [ + 1 + 2 + ] + >> + >> + /strings [ + (one) + ($¢) + () + (\(\)) + (\() + (\)) + (a\f\b\t\r\nb) + <410042> + (a\nb) + (a b) + ] +>> +endobj + +3 0 obj +<< + /Count 1 + /Kids [ + 4 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +4 0 obj +<< + /Contents 5 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 7 0 R + >> + /ProcSet 8 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +5 0 obj +<< + /Length 6 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +6 0 obj +44 +endobj + +7 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +8 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 9 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000495 00000 n +0000000577 00000 n +0000000792 00000 n +0000000891 00000 n +0000000910 00000 n +0000001028 00000 n +trailer << + /QTest 2 0 R + /Root 1 0 R + /Size 9 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +1063 +%%EOF diff --git a/qpdf/qtest/qpdf/good14.out b/qpdf/qtest/qpdf/good14.out new file mode 100644 index 00000000..c8e5fc9b --- /dev/null +++ b/qpdf/qtest/qpdf/good14.out @@ -0,0 +1,39 @@ +-- stream 0 -- +A %here is a comment +B % here is another with CR +A B + +one +two +three lines +(string with \r\nCRNL) + and another + indentation +(\001B%DEF)<01> +<8a8b> +(ab) +<8c>(Ý) ) > +<610062> (MOO) +-- stream 1 -- +This stream does end with a newline. +// tests: +// bad tokens preserved +// comments +// indentation +// CR/NL inside string literal -- changed to \r or \n, newline follows +// whitespace in hexstring (removed) +// strings normalized +// newlines normalized +// names normalized +// trailing space (preserved) +// final newline added + +/bad#name + +/good name +/bad#00name +-- stream 2 -- +(This stream ends with a \001 bad token +-- stream 3 -- +<AB X +test 3 done diff --git a/qpdf/qtest/qpdf/good14.pdf b/qpdf/qtest/qpdf/good14.pdf new file mode 100644 index 00000000..a6cd4bee --- /dev/null +++ b/qpdf/qtest/qpdf/good14.pdf @@ -0,0 +1,142 @@ +%PDF-1.3 -*- coding: no-conversion -*- +%¿›þ¢ +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +7 0 obj +<< /Length 9 0 R >> +stream
+A %here is a comment +B % here is another with CR
+A B
+one
two
three lines +(string with
+CRNL) and another + indentation +(B%DEF)() +<8A +8B><61
62><8c><DD> ) > +(a\000b) <4D4F4F>endstream
endobj + +8 0 obj +<< /Length 385 >> +stream +This stream does end with a newline. +// tests: +// bad tokens preserved +// comments +// indentation +// CR/NL inside string literal -- changed to \r or \n, newline follows +// whitespace in hexstring (removed) +// strings normalized +// newlines normalized +// names normalized +// trailing space (preserved) +// final newline added + +/bad#name + +/g#6f#6Fd name +/bad#00name +endstream +endobj + +9 0 obj +181 +endobj + +10 0 obj +<< /Length 40 >> +stream +(This stream ends with a \001 bad token +endstream +endobj + +11 0 obj +<< /Length 5 >> +stream +<AB X +endstream +endobj + +xref +0 12 +0000000000 65535 f +0000000045 00000 n +0000000099 00000 n +0000000171 00000 n +0000000343 00000 n +0000000439 00000 n +0000000474 00000 n +0000000592 00000 n +0000000827 00000 n +0000001263 00000 n +0000001283 00000 n +0000001374 00000 n +trailer << + /Size 12 + /Root 1 0 R + /QStreams [ 7 0 R 8 0 R 10 0 R 11 0 R ] +>> +startxref +1430 +%%EOF diff --git a/qpdf/qtest/qpdf/good14.qdf b/qpdf/qtest/qpdf/good14.qdf new file mode 100644 index 00000000..07ac0240 --- /dev/null +++ b/qpdf/qtest/qpdf/good14.qdf @@ -0,0 +1,189 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 10 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Length 3 0 R +>> +stream +A %here is a comment +B % here is another with CR
+A B
+one
two
three lines +(string with
+CRNL) and another + indentation +(B%DEF)() +<8A +8B><61
62><8c><DD> ) > +(a\000b) <4D4F4F> +endstream +endobj + +%QDF: ignore_newline +3 0 obj +181 +endobj + +4 0 obj +<< + /Length 5 0 R +>> +stream +This stream does end with a newline. +// tests: +// bad tokens preserved +// comments +// indentation +// CR/NL inside string literal -- changed to \r or \n, newline follows +// whitespace in hexstring (removed) +// strings normalized +// newlines normalized +// names normalized +// trailing space (preserved) +// final newline added + +/bad#name + +/g#6f#6Fd name +/bad#00name +endstream +endobj + +5 0 obj +385 +endobj + +6 0 obj +<< + /Length 7 0 R +>> +stream +(This stream ends with a \001 bad token +endstream +endobj + +7 0 obj +40 +endobj + +8 0 obj +<< + /Length 9 0 R +>> +stream +<AB X +endstream +endobj + +%QDF: ignore_newline +9 0 obj +5 +endobj + +10 0 obj +<< + /Count 1 + /Kids [ + 11 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +11 0 obj +<< + /Contents 12 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 10 0 R + /Resources << + /Font << + /F1 14 0 R + >> + /ProcSet 15 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +12 0 obj +<< + /Length 13 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +13 0 obj +44 +endobj + +14 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +15 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 16 +0000000000 65535 f +0000000025 00000 n +0000000080 00000 n +0000000338 00000 n +0000000358 00000 n +0000000798 00000 n +0000000818 00000 n +0000000913 00000 n +0000000932 00000 n +0000001014 00000 n +0000001032 00000 n +0000001116 00000 n +0000001336 00000 n +0000001437 00000 n +0000001457 00000 n +0000001576 00000 n +trailer << + /QStreams [ + 2 0 R + 4 0 R + 6 0 R + 8 0 R + ] + /Root 1 0 R + /Size 16 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +1612 +%%EOF diff --git a/qpdf/qtest/qpdf/good15.out b/qpdf/qtest/qpdf/good15.out new file mode 100644 index 00000000..884ea6ed --- /dev/null +++ b/qpdf/qtest/qpdf/good15.out @@ -0,0 +1,5 @@ +/QTest is direct +/QTest is a name with value /oink +unparse: /oink +unparseResolved: /oink +test 1 done diff --git a/qpdf/qtest/qpdf/good15.pdf b/qpdf/qtest/qpdf/good15.pdf new file mode 100644 index 00000000..5981765a --- /dev/null +++ b/qpdf/qtest/qpdf/good15.pdf @@ -0,0 +1,79 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream + +BT +/F1 24 Tf
72 720 Td
+ (Potato) Tj
ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest /oink +>> +startxref
+556 +%%EOF diff --git a/qpdf/qtest/qpdf/good15.qdf b/qpdf/qtest/qpdf/good15.qdf new file mode 100644 index 00000000..c60469c1 --- /dev/null +++ b/qpdf/qtest/qpdf/good15.qdf @@ -0,0 +1,97 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream + +BT +/F1 24 Tf +72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +43 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000474 00000 n +0000000493 00000 n +0000000611 00000 n +trailer << + /QTest /oink + /Root 1 0 R + /Size 8 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +646 +%%EOF diff --git a/qpdf/qtest/qpdf/good16.out b/qpdf/qtest/qpdf/good16.out new file mode 100644 index 00000000..1d31025f --- /dev/null +++ b/qpdf/qtest/qpdf/good16.out @@ -0,0 +1,6 @@ +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/good16.pdf b/qpdf/qtest/qpdf/good16.pdf Binary files differnew file mode 100644 index 00000000..1a468202 --- /dev/null +++ b/qpdf/qtest/qpdf/good16.pdf diff --git a/qpdf/qtest/qpdf/good16.qdf b/qpdf/qtest/qpdf/good16.qdf Binary files differnew file mode 100644 index 00000000..b98326ae --- /dev/null +++ b/qpdf/qtest/qpdf/good16.qdf diff --git a/qpdf/qtest/qpdf/good17-not-qdf.pdf b/qpdf/qtest/qpdf/good17-not-qdf.pdf Binary files differnew file mode 100644 index 00000000..53eadd79 --- /dev/null +++ b/qpdf/qtest/qpdf/good17-not-qdf.pdf diff --git a/qpdf/qtest/qpdf/good17-not-recompressed.pdf b/qpdf/qtest/qpdf/good17-not-recompressed.pdf Binary files differnew file mode 100644 index 00000000..b6e3a530 --- /dev/null +++ b/qpdf/qtest/qpdf/good17-not-recompressed.pdf diff --git a/qpdf/qtest/qpdf/good17.out b/qpdf/qtest/qpdf/good17.out new file mode 100644 index 00000000..1d31025f --- /dev/null +++ b/qpdf/qtest/qpdf/good17.out @@ -0,0 +1,6 @@ +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/good17.pdf b/qpdf/qtest/qpdf/good17.pdf new file mode 100644 index 00000000..f0c66b35 --- /dev/null +++ b/qpdf/qtest/qpdf/good17.pdf @@ -0,0 +1,1550 @@ +%PDF-1.5 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /PageLabels 107 0 R + /Pages 2 0 R + /Type /Catalog + /PageMode /UseOutlines + /Outlines 95 0 R +>> +endobj + +2 0 obj +<< + /Count 30 + /Kids [ + 3 0 R + 4 0 R + 5 0 R + 6 0 R + 7 0 R + 8 0 R + 9 0 R + 10 0 R + 11 0 R + 12 0 R + 13 0 R + 14 0 R + 15 0 R + 16 0 R + 17 0 R + 18 0 R + 19 0 R + 20 0 R + 21 0 R + 22 0 R + 23 0 R + 24 0 R + 25 0 R + 26 0 R + 27 0 R + 28 0 R + 29 0 R + 30 0 R + 31 0 R + 32 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 33 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 2 +4 0 obj +<< + /Contents 37 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 3 +5 0 obj +<< + /Contents 39 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 4 +6 0 obj +<< + /Contents 41 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 5 +7 0 obj +<< + /Contents 43 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 6 +8 0 obj +<< + /Contents 45 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 7 +9 0 obj +<< + /Contents 47 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 8 +10 0 obj +<< + /Contents 49 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 9 +11 0 obj +<< + /Contents 51 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 10 +12 0 obj +<< + /Contents 53 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 11 +13 0 obj +<< + /Contents 55 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 12 +14 0 obj +<< + /Contents 57 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 13 +15 0 obj +<< + /Contents 59 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 14 +16 0 obj +<< + /Contents 61 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 15 +17 0 obj +<< + /Contents 63 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 16 +18 0 obj +<< + /Contents 65 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 17 +19 0 obj +<< + /Contents 67 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 18 +20 0 obj +<< + /Contents 69 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 19 +21 0 obj +<< + /Contents 71 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 20 +22 0 obj +<< + /Contents 73 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 21 +23 0 obj +<< + /Contents 75 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 22 +24 0 obj +<< + /Contents 77 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 23 +25 0 obj +<< + /Contents 79 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 24 +26 0 obj +<< + /Contents 81 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 25 +27 0 obj +<< + /Contents 83 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 26 +28 0 obj +<< + /Contents 85 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 27 +29 0 obj +<< + /Contents 87 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 28 +30 0 obj +<< + /Contents 89 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 29 +31 0 obj +<< + /Contents 91 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 30 +32 0 obj +<< + /Contents 93 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +33 0 obj +<< + /Length 34 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 0) Tj +ET +endstream +endobj + +34 0 obj +46 +endobj + +35 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +36 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 2 +37 0 obj +<< + /Length 38 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 1) Tj +ET +endstream +endobj + +38 0 obj +46 +endobj + +%% Contents for page 3 +39 0 obj +<< + /Length 40 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 2) Tj +ET +endstream +endobj + +40 0 obj +46 +endobj + +%% Contents for page 4 +41 0 obj +<< + /Length 42 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 3) Tj +ET +endstream +endobj + +42 0 obj +46 +endobj + +%% Contents for page 5 +43 0 obj +<< + /Length 44 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 4) Tj +ET +endstream +endobj + +44 0 obj +46 +endobj + +%% Contents for page 6 +45 0 obj +<< + /Length 46 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 5) Tj +ET +endstream +endobj + +46 0 obj +46 +endobj + +%% Contents for page 7 +47 0 obj +<< + /Length 48 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 6) Tj +ET +endstream +endobj + +48 0 obj +46 +endobj + +%% Contents for page 8 +49 0 obj +<< + /Length 50 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 7) Tj +ET +endstream +endobj + +50 0 obj +46 +endobj + +%% Contents for page 9 +51 0 obj +<< + /Length 52 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 8) Tj +ET +endstream +endobj + +52 0 obj +46 +endobj + +%% Contents for page 10 +53 0 obj +<< + /Length 54 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 9) Tj +ET +endstream +endobj + +54 0 obj +46 +endobj + +%% Contents for page 11 +55 0 obj +<< + /Length 56 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 10) Tj +ET +endstream +endobj + +56 0 obj +47 +endobj + +%% Contents for page 12 +57 0 obj +<< + /Length 58 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 11) Tj +ET +endstream +endobj + +58 0 obj +47 +endobj + +%% Contents for page 13 +59 0 obj +<< + /Length 60 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 12) Tj +ET +endstream +endobj + +60 0 obj +47 +endobj + +%% Contents for page 14 +61 0 obj +<< + /Length 62 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 13) Tj +ET +endstream +endobj + +62 0 obj +47 +endobj + +%% Contents for page 15 +63 0 obj +<< + /Length 64 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 14) Tj +ET +endstream +endobj + +64 0 obj +47 +endobj + +%% Contents for page 16 +65 0 obj +<< + /Length 66 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 15) Tj +ET +endstream +endobj + +66 0 obj +47 +endobj + +%% Contents for page 17 +67 0 obj +<< + /Length 68 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 16) Tj +ET +endstream +endobj + +68 0 obj +47 +endobj + +%% Contents for page 18 +69 0 obj +<< + /Length 70 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 17) Tj +ET +endstream +endobj + +70 0 obj +47 +endobj + +%% Contents for page 19 +71 0 obj +<< + /Length 72 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 18) Tj +ET +endstream +endobj + +72 0 obj +47 +endobj + +%% Contents for page 20 +73 0 obj +<< + /Length 74 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 19) Tj +ET +endstream +endobj + +74 0 obj +47 +endobj + +%% Contents for page 21 +75 0 obj +<< + /Length 76 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 20) Tj +ET +endstream +endobj + +76 0 obj +47 +endobj + +%% Contents for page 22 +77 0 obj +<< + /Length 78 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 21) Tj +ET +endstream +endobj + +78 0 obj +47 +endobj + +%% Contents for page 23 +79 0 obj +<< + /Length 80 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 22) Tj +ET +endstream +endobj + +80 0 obj +47 +endobj + +%% Contents for page 24 +81 0 obj +<< + /Length 82 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 23) Tj +ET +endstream +endobj + +82 0 obj +47 +endobj + +%% Contents for page 25 +83 0 obj +<< + /Length 84 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 24) Tj +ET +endstream +endobj + +84 0 obj +47 +endobj + +%% Contents for page 26 +85 0 obj +<< + /Length 86 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 25) Tj +ET +endstream +endobj + +86 0 obj +47 +endobj + +%% Contents for page 27 +87 0 obj +<< + /Length 88 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 26) Tj +ET +endstream +endobj + +88 0 obj +47 +endobj + +%% Contents for page 28 +89 0 obj +<< + /Length 90 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 27) Tj +ET +endstream +endobj + +90 0 obj +47 +endobj + +%% Contents for page 29 +91 0 obj +<< + /Length 92 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 28) Tj +ET +endstream +endobj + +92 0 obj +47 +endobj + +%% Contents for page 30 +93 0 obj +<< + /Length 94 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 29) Tj +ET +endstream +endobj + +94 0 obj +47 +endobj + +xref +0 111 +0000000095 65535 f +0000000025 00000 n +0000000145 00000 n +0000000541 00000 n +0000000746 00000 n +0000000951 00000 n +0000001156 00000 n +0000001361 00000 n +0000001566 00000 n +0000001771 00000 n +0000001976 00000 n +0000002182 00000 n +0000002389 00000 n +0000002596 00000 n +0000002803 00000 n +0000003010 00000 n +0000003217 00000 n +0000003424 00000 n +0000003631 00000 n +0000003838 00000 n +0000004045 00000 n +0000004252 00000 n +0000004459 00000 n +0000004666 00000 n +0000004873 00000 n +0000005080 00000 n +0000005287 00000 n +0000005494 00000 n +0000005701 00000 n +0000005908 00000 n +0000006115 00000 n +0000006322 00000 n +0000006529 00000 n +0000006748 00000 n +0000006851 00000 n +0000006871 00000 n +0000006990 00000 n +0000007049 00000 n +0000007152 00000 n +0000007195 00000 n +0000007298 00000 n +0000007341 00000 n +0000007444 00000 n +0000007487 00000 n +0000007590 00000 n +0000007633 00000 n +0000007736 00000 n +0000007779 00000 n +0000007882 00000 n +0000007925 00000 n +0000008028 00000 n +0000008071 00000 n +0000008174 00000 n +0000008218 00000 n +0000008321 00000 n +0000008365 00000 n +0000008469 00000 n +0000008513 00000 n +0000008617 00000 n +0000008661 00000 n +0000008765 00000 n +0000008809 00000 n +0000008913 00000 n +0000008957 00000 n +0000009061 00000 n +0000009105 00000 n +0000009209 00000 n +0000009253 00000 n +0000009357 00000 n +0000009401 00000 n +0000009505 00000 n +0000009549 00000 n +0000009653 00000 n +0000009697 00000 n +0000009801 00000 n +0000009845 00000 n +0000009949 00000 n +0000009993 00000 n +0000010097 00000 n +0000010141 00000 n +0000010245 00000 n +0000010289 00000 n +0000010393 00000 n +0000010437 00000 n +0000010541 00000 n +0000010585 00000 n +0000010689 00000 n +0000010733 00000 n +0000010837 00000 n +0000010881 00000 n +0000010985 00000 n +0000011029 00000 n +0000011133 00000 n +0000011177 00000 n +0000011281 00000 n +0000000096 65535 f +0000000097 65535 f +0000000098 65535 f +0000000099 65535 f +0000000100 65535 f +0000000101 65535 f +0000000102 65535 f +0000000103 65535 f +0000000104 65535 f +0000000105 65535 f +0000000106 65535 f +0000000107 65535 f +0000000108 65535 f +0000000109 65535 f +0000000110 65535 f +0000000000 65535 f +trailer << + /Root 1 0 R + /Size 111 +>> +startxref +11301 +%%EOF + +108 0 obj +<< + /Type /ObjStm + /N 10 + /First 81 + /Length 1806 +>> +stream +95 0 +96 75 +97 260 +98 394 +99 557 +100 899 +101 1078 +102 1276 +103 1433 +104 1590 +% 95 +<< + /Type /Outlines + /First 96 0 R + /Last 97 0 R + /Count 6 +>> +% 96 +<< + /Type /Outline + /Title (Isís 1 -> 5: /XYZ null null null) + /Parent 95 0 R + /Count 4 + /Next 97 0 R + /First 98 0 R + /Last 99 0 R + /Dest [ 8 0 R /XYZ null null null ] +>> +% 97 +<< + /Type /Outline + /Title (Trepak 2 -> 15: /XYZ 66 756 3) + /Parent 95 0 R + /Prev 96 0 R + /Dest [ 18 0 R /XYZ 66 756 3 ] +>> +% 98 +<< + /Type /Outline + /Title (Amanda 1.1 -> 11: /Fit) + /Parent 96 0 R + /Next 99 0 R + /First 100 0 R + /Last 101 0 R + /Count -3 + /Dest [ 14 0 R /Fit ] +>> +% 99 +<< + /Type /Outline + % /Title (Sandy (Sandy [Greek]) 1.2 -> 13: /FitH 792) + /Title <feff00530061006e00640079002000f703a303b103bd03b403b900f700200031002e00320020002d003e002000310033003a0020002f00460069007400480020003700390032> + /Parent 96 0 R + /Prev 98 0 R + /First 105 0 R + /Last 106 0 R + /Count 2 + /Dest [ 16 0 R /FitH 792 ] +>> +% 100 +<< + /Type /Outline + /Title (Isosicle 1.1.1 -> 12: /FitV 100) + /Parent 98 0 R + /Next 101 0 R + /First 102 0 R + /Last 103 0 R + /Count -2 + /Dest [ 15 0 R /FitV 100 ] +>> +% 101 +<< + /Type /Outline + /Title (Isosicle 1.1.2 -> 12: /XYZ null null null) + /Parent 98 0 R + /Prev 100 0 R + /First 104 0 R + /Last 104 0 R + /Count 1 + /Dest [ 15 0 R /XYZ null null null ] +>> +% 102 +<< + /Type /Outline + /Title (Isosicle 1.1.1.1 -> 18: /XYZ null null null) + /Parent 100 0 R + /Next 103 0 R + /Dest [ 21 0 R /XYZ null null null ] +>> +% 103 +<< + /Type /Outline + /Title (Isosicle 1.1.1.2 -> 19: /XYZ null null null) + /Parent 100 0 R + /Prev 102 0 R + /Dest [ 22 0 R /XYZ null null null ] +>> +% 104 +<< + /Type /Outline + /Title (Isosicle 1.1.2.1 -> 22: /XYZ null null null) + /Parent 101 0 R + /Dest [ 25 0 R /XYZ null null null ] +>> +endstream +endobj + +110 0 obj +<< + /Type /ObjStm + /N 3 + /First 28 + /Length 636 + /Extends 108 0 R +>> +stream +105 0 +106 157 +107 310 +% 105 +<< + /Type /Outline + /Title (Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770) + /Parent 99 0 R + /Next 106 0 R + /Dest [ 4 0 R /FitR 66 714 180 770 ] +>> +% 106 +<< + /Type /Outline + /Title (Trepsicle 1.2.2 -> 0: /XYZ null null null) + /Parent 99 0 R + /Prev 105 0 R + /Dest [ 3 0 R /XYZ null null null ] +>> +% 107 + << /Nums [ + 0 << /P () >> + 2 << /S /r /St 1 >> + 7 << /P () >> + 9 << /S /r /St 6 >> + 11 << /P () >> + 12 << /S /D /St 2 >> + 15 << /S /D /St 6 >> + 19 << /P () >> + 20 << /S /D /St 12 >> + 22 << /S /D /St 16059 >> + 23 << /S /r /St 50 >> + 29 << /S /r /St 54 >> + ] >> +endstream +endobj + +109 0 obj +<< + /Type /XRef + /Size 111 + /Index [0 111] + /W [1 2 1] + /Length 444 + /Root 1 0 R +>> +stream + +$ +ó +endstream +endobj + +xref +0 0 +trailer << + /Size 111 + /Root 1 0 R + /Prev 11301 + /XRefStm 16238 +>> + +startxref +16808 +%%EOF diff --git a/qpdf/qtest/qpdf/good17.qdf b/qpdf/qtest/qpdf/good17.qdf new file mode 100644 index 00000000..ddd3a5ce --- /dev/null +++ b/qpdf/qtest/qpdf/good17.qdf @@ -0,0 +1,1523 @@ +%PDF-1.5 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Outlines 3 0 R + /PageLabels 16 0 R + /PageMode /UseOutlines + /Pages 17 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Type /ObjStm + /Length 2179 + /N 10 + /First 102 +>> +stream +3 0 +4 100 +5 335 +6 520 +7 718 +8 1044 +9 1262 +10 1508 +11 1715 +12 1922 +%% Object stream: object 3, index 0 +<< + /Count 6 + /First 4 0 R + /Last 5 0 R + /Type /Outlines +>> +%% Object stream: object 4, index 1 +<< + /Count 4 + /Dest [ + 18 0 R + /XYZ + null + null + null + ] + /First 6 0 R + /Last 7 0 R + /Next 5 0 R + /Parent 3 0 R + /Title (Isís 1 -> 5: /XYZ null null null) + /Type /Outline +>> +%% Object stream: object 5, index 2 +<< + /Dest [ + 19 0 R + /XYZ + 66 + 756 + 3 + ] + /Parent 3 0 R + /Prev 4 0 R + /Title (Trepak 2 -> 15: /XYZ 66 756 3) + /Type /Outline +>> +%% Object stream: object 6, index 3 +<< + /Count -3 + /Dest [ + 20 0 R + /Fit + ] + /First 8 0 R + /Last 9 0 R + /Next 7 0 R + /Parent 4 0 R + /Title (Amanda 1.1 -> 11: /Fit) + /Type /Outline +>> +%% Object stream: object 7, index 4 +<< + /Count 2 + /Dest [ + 21 0 R + /FitH + 792 + ] + /First 14 0 R + /Last 15 0 R + /Parent 4 0 R + /Prev 6 0 R + /Title <feff00530061006e00640079002000f703a303b103bd03b403b900f700200031002e00320020002d003e002000310033003a0020002f00460069007400480020003700390032> + /Type /Outline +>> +%% Object stream: object 8, index 5 +<< + /Count -2 + /Dest [ + 22 0 R + /FitV + 100 + ] + /First 10 0 R + /Last 11 0 R + /Next 9 0 R + /Parent 6 0 R + /Title (Isosicle 1.1.1 -> 12: /FitV 100) + /Type /Outline +>> +%% Object stream: object 9, index 6 +<< + /Count 1 + /Dest [ + 22 0 R + /XYZ + null + null + null + ] + /First 12 0 R + /Last 12 0 R + /Parent 6 0 R + /Prev 8 0 R + /Title (Isosicle 1.1.2 -> 12: /XYZ null null null) + /Type /Outline +>> +%% Object stream: object 10, index 7 +<< + /Dest [ + 23 0 R + /XYZ + null + null + null + ] + /Next 11 0 R + /Parent 8 0 R + /Title (Isosicle 1.1.1.1 -> 18: /XYZ null null null) + /Type /Outline +>> +%% Object stream: object 11, index 8 +<< + /Dest [ + 24 0 R + /XYZ + null + null + null + ] + /Parent 8 0 R + /Prev 10 0 R + /Title (Isosicle 1.1.1.2 -> 19: /XYZ null null null) + /Type /Outline +>> +%% Object stream: object 12, index 9 +<< + /Dest [ + 25 0 R + /XYZ + null + null + null + ] + /Parent 9 0 R + /Title (Isosicle 1.1.2.1 -> 22: /XYZ null null null) + /Type /Outline +>> +endstream +endobj + +13 0 obj +<< + /Type /ObjStm + /Length 989 + /N 3 + /First 56 + /Extends 2 0 R +>> +stream +14 0 +15 213 +16 418 +%% Object stream: object 14, index 0 +<< + /Dest [ + 26 0 R + /FitR + 66 + 714 + 180 + 770 + ] + /Next 15 0 R + /Parent 7 0 R + /Title (Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770) + /Type /Outline +>> +%% Object stream: object 15, index 1 +<< + /Dest [ + 27 0 R + /XYZ + null + null + null + ] + /Parent 7 0 R + /Prev 14 0 R + /Title (Trepsicle 1.2.2 -> 0: /XYZ null null null) + /Type /Outline +>> +%% Object stream: object 16, index 2 +<< + /Nums [ + 0 + << + /P () + >> + 2 + << + /S /r + /St 1 + >> + 7 + << + /P () + >> + 9 + << + /S /r + /St 6 + >> + 11 + << + /P () + >> + 12 + << + /S /D + /St 2 + >> + 15 + << + /S /D + /St 6 + >> + 19 + << + /P () + >> + 20 + << + /S /D + /St 12 + >> + 22 + << + /S /D + /St 16059 + >> + 23 + << + /S /r + /St 50 + >> + 29 + << + /S /r + /St 54 + >> + ] +>> +endstream +endobj + +17 0 obj +<< + /Count 30 + /Kids [ + 27 0 R + 26 0 R + 28 0 R + 29 0 R + 30 0 R + 18 0 R + 31 0 R + 32 0 R + 33 0 R + 34 0 R + 35 0 R + 20 0 R + 22 0 R + 21 0 R + 36 0 R + 19 0 R + 37 0 R + 38 0 R + 23 0 R + 24 0 R + 39 0 R + 40 0 R + 25 0 R + 41 0 R + 42 0 R + 43 0 R + 44 0 R + 45 0 R + 46 0 R + 47 0 R + ] + /Type /Pages +>> +endobj + +%% Page 6 +18 0 obj +<< + /Contents 48 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 16 +19 0 obj +<< + /Contents 52 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 12 +20 0 obj +<< + /Contents 54 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 14 +21 0 obj +<< + /Contents 56 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 13 +22 0 obj +<< + /Contents 58 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 19 +23 0 obj +<< + /Contents 60 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 20 +24 0 obj +<< + /Contents 62 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 23 +25 0 obj +<< + /Contents 64 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 2 +26 0 obj +<< + /Contents 66 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 1 +27 0 obj +<< + /Contents 68 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 3 +28 0 obj +<< + /Contents 70 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 4 +29 0 obj +<< + /Contents 72 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 5 +30 0 obj +<< + /Contents 74 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 7 +31 0 obj +<< + /Contents 76 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 8 +32 0 obj +<< + /Contents 78 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 9 +33 0 obj +<< + /Contents 80 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 10 +34 0 obj +<< + /Contents 82 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 11 +35 0 obj +<< + /Contents 84 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 15 +36 0 obj +<< + /Contents 86 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 17 +37 0 obj +<< + /Contents 88 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 18 +38 0 obj +<< + /Contents 90 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 21 +39 0 obj +<< + /Contents 92 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 22 +40 0 obj +<< + /Contents 94 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 24 +41 0 obj +<< + /Contents 96 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 25 +42 0 obj +<< + /Contents 98 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 26 +43 0 obj +<< + /Contents 100 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 27 +44 0 obj +<< + /Contents 102 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 28 +45 0 obj +<< + /Contents 104 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 29 +46 0 obj +<< + /Contents 106 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Page 30 +47 0 obj +<< + /Contents 108 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 17 0 R + /Resources << + /Font << + /F1 50 0 R + >> + /ProcSet 51 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 6 +48 0 obj +<< + /Length 49 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 5) Tj +ET +endstream +endobj + +49 0 obj +46 +endobj + +50 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +51 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 16 +52 0 obj +<< + /Length 53 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 15) Tj +ET +endstream +endobj + +53 0 obj +47 +endobj + +%% Contents for page 12 +54 0 obj +<< + /Length 55 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 11) Tj +ET +endstream +endobj + +55 0 obj +47 +endobj + +%% Contents for page 14 +56 0 obj +<< + /Length 57 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 13) Tj +ET +endstream +endobj + +57 0 obj +47 +endobj + +%% Contents for page 13 +58 0 obj +<< + /Length 59 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 12) Tj +ET +endstream +endobj + +59 0 obj +47 +endobj + +%% Contents for page 19 +60 0 obj +<< + /Length 61 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 18) Tj +ET +endstream +endobj + +61 0 obj +47 +endobj + +%% Contents for page 20 +62 0 obj +<< + /Length 63 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 19) Tj +ET +endstream +endobj + +63 0 obj +47 +endobj + +%% Contents for page 23 +64 0 obj +<< + /Length 65 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 22) Tj +ET +endstream +endobj + +65 0 obj +47 +endobj + +%% Contents for page 2 +66 0 obj +<< + /Length 67 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 1) Tj +ET +endstream +endobj + +67 0 obj +46 +endobj + +%% Contents for page 1 +68 0 obj +<< + /Length 69 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 0) Tj +ET +endstream +endobj + +69 0 obj +46 +endobj + +%% Contents for page 3 +70 0 obj +<< + /Length 71 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 2) Tj +ET +endstream +endobj + +71 0 obj +46 +endobj + +%% Contents for page 4 +72 0 obj +<< + /Length 73 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 3) Tj +ET +endstream +endobj + +73 0 obj +46 +endobj + +%% Contents for page 5 +74 0 obj +<< + /Length 75 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 4) Tj +ET +endstream +endobj + +75 0 obj +46 +endobj + +%% Contents for page 7 +76 0 obj +<< + /Length 77 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 6) Tj +ET +endstream +endobj + +77 0 obj +46 +endobj + +%% Contents for page 8 +78 0 obj +<< + /Length 79 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 7) Tj +ET +endstream +endobj + +79 0 obj +46 +endobj + +%% Contents for page 9 +80 0 obj +<< + /Length 81 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 8) Tj +ET +endstream +endobj + +81 0 obj +46 +endobj + +%% Contents for page 10 +82 0 obj +<< + /Length 83 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 9) Tj +ET +endstream +endobj + +83 0 obj +46 +endobj + +%% Contents for page 11 +84 0 obj +<< + /Length 85 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 10) Tj +ET +endstream +endobj + +85 0 obj +47 +endobj + +%% Contents for page 15 +86 0 obj +<< + /Length 87 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 14) Tj +ET +endstream +endobj + +87 0 obj +47 +endobj + +%% Contents for page 17 +88 0 obj +<< + /Length 89 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 16) Tj +ET +endstream +endobj + +89 0 obj +47 +endobj + +%% Contents for page 18 +90 0 obj +<< + /Length 91 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 17) Tj +ET +endstream +endobj + +91 0 obj +47 +endobj + +%% Contents for page 21 +92 0 obj +<< + /Length 93 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 20) Tj +ET +endstream +endobj + +93 0 obj +47 +endobj + +%% Contents for page 22 +94 0 obj +<< + /Length 95 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 21) Tj +ET +endstream +endobj + +95 0 obj +47 +endobj + +%% Contents for page 24 +96 0 obj +<< + /Length 97 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 23) Tj +ET +endstream +endobj + +97 0 obj +47 +endobj + +%% Contents for page 25 +98 0 obj +<< + /Length 99 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 24) Tj +ET +endstream +endobj + +99 0 obj +47 +endobj + +%% Contents for page 26 +100 0 obj +<< + /Length 101 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 25) Tj +ET +endstream +endobj + +101 0 obj +47 +endobj + +%% Contents for page 27 +102 0 obj +<< + /Length 103 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 26) Tj +ET +endstream +endobj + +103 0 obj +47 +endobj + +%% Contents for page 28 +104 0 obj +<< + /Length 105 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 27) Tj +ET +endstream +endobj + +105 0 obj +47 +endobj + +%% Contents for page 29 +106 0 obj +<< + /Length 107 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 28) Tj +ET +endstream +endobj + +107 0 obj +47 +endobj + +%% Contents for page 30 +108 0 obj +<< + /Length 109 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 29) Tj +ET +endstream +endobj + +109 0 obj +47 +endobj + +110 0 obj +<< + /Type /XRef + /Length 444 + /W [ 1 2 1 ] + /Root 1 0 R + /Size 111 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +stream + +endstream +endobj + +startxref +14730 +%%EOF diff --git a/qpdf/qtest/qpdf/good18.out b/qpdf/qtest/qpdf/good18.out new file mode 100644 index 00000000..1d31025f --- /dev/null +++ b/qpdf/qtest/qpdf/good18.out @@ -0,0 +1,6 @@ +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/good18.pdf b/qpdf/qtest/qpdf/good18.pdf new file mode 100644 index 00000000..7563574f --- /dev/null +++ b/qpdf/qtest/qpdf/good18.pdf @@ -0,0 +1,1538 @@ +%PDF-1.5 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /PageLabels 107 0 R + /Pages 2 0 R + /Type /Catalog + /PageMode /UseOutlines + /Outlines 95 0 R +>> +endobj + +2 0 obj +<< + /Count 30 + /Kids [ + 3 0 R + 4 0 R + 5 0 R + 6 0 R + 7 0 R + 8 0 R + 9 0 R + 10 0 R + 11 0 R + 12 0 R + 13 0 R + 14 0 R + 15 0 R + 16 0 R + 17 0 R + 18 0 R + 19 0 R + 20 0 R + 21 0 R + 22 0 R + 23 0 R + 24 0 R + 25 0 R + 26 0 R + 27 0 R + 28 0 R + 29 0 R + 30 0 R + 31 0 R + 32 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 33 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 2 +4 0 obj +<< + /Contents 37 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 3 +5 0 obj +<< + /Contents 39 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 4 +6 0 obj +<< + /Contents 41 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 5 +7 0 obj +<< + /Contents 43 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 6 +8 0 obj +<< + /Contents 45 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 7 +9 0 obj +<< + /Contents 47 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 8 +10 0 obj +<< + /Contents 49 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 9 +11 0 obj +<< + /Contents 51 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 10 +12 0 obj +<< + /Contents 53 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 11 +13 0 obj +<< + /Contents 55 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 12 +14 0 obj +<< + /Contents 57 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 13 +15 0 obj +<< + /Contents 59 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 14 +16 0 obj +<< + /Contents 61 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 15 +17 0 obj +<< + /Contents 63 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 16 +18 0 obj +<< + /Contents 65 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 17 +19 0 obj +<< + /Contents 67 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 18 +20 0 obj +<< + /Contents 69 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 19 +21 0 obj +<< + /Contents 71 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 20 +22 0 obj +<< + /Contents 73 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 21 +23 0 obj +<< + /Contents 75 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 22 +24 0 obj +<< + /Contents 77 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 23 +25 0 obj +<< + /Contents 79 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 24 +26 0 obj +<< + /Contents 81 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 25 +27 0 obj +<< + /Contents 83 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 26 +28 0 obj +<< + /Contents 85 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 27 +29 0 obj +<< + /Contents 87 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 28 +30 0 obj +<< + /Contents 89 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 29 +31 0 obj +<< + /Contents 91 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 30 +32 0 obj +<< + /Contents 93 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +33 0 obj +<< + /Length 34 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 0) Tj +ET +endstream +endobj + +34 0 obj +46 +endobj + +35 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +36 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 2 +37 0 obj +<< + /Length 38 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 1) Tj +ET +endstream +endobj + +38 0 obj +46 +endobj + +%% Contents for page 3 +39 0 obj +<< + /Length 40 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 2) Tj +ET +endstream +endobj + +40 0 obj +46 +endobj + +%% Contents for page 4 +41 0 obj +<< + /Length 42 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 3) Tj +ET +endstream +endobj + +42 0 obj +46 +endobj + +%% Contents for page 5 +43 0 obj +<< + /Length 44 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 4) Tj +ET +endstream +endobj + +44 0 obj +46 +endobj + +%% Contents for page 6 +45 0 obj +<< + /Length 46 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 5) Tj +ET +endstream +endobj + +46 0 obj +46 +endobj + +%% Contents for page 7 +47 0 obj +<< + /Length 48 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 6) Tj +ET +endstream +endobj + +48 0 obj +46 +endobj + +%% Contents for page 8 +49 0 obj +<< + /Length 50 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 7) Tj +ET +endstream +endobj + +50 0 obj +46 +endobj + +%% Contents for page 9 +51 0 obj +<< + /Length 52 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 8) Tj +ET +endstream +endobj + +52 0 obj +46 +endobj + +%% Contents for page 10 +53 0 obj +<< + /Length 54 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 9) Tj +ET +endstream +endobj + +54 0 obj +46 +endobj + +%% Contents for page 11 +55 0 obj +<< + /Length 56 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 10) Tj +ET +endstream +endobj + +56 0 obj +47 +endobj + +%% Contents for page 12 +57 0 obj +<< + /Length 58 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 11) Tj +ET +endstream +endobj + +58 0 obj +47 +endobj + +%% Contents for page 13 +59 0 obj +<< + /Length 60 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 12) Tj +ET +endstream +endobj + +60 0 obj +47 +endobj + +%% Contents for page 14 +61 0 obj +<< + /Length 62 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 13) Tj +ET +endstream +endobj + +62 0 obj +47 +endobj + +%% Contents for page 15 +63 0 obj +<< + /Length 64 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 14) Tj +ET +endstream +endobj + +64 0 obj +47 +endobj + +%% Contents for page 16 +65 0 obj +<< + /Length 66 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 15) Tj +ET +endstream +endobj + +66 0 obj +47 +endobj + +%% Contents for page 17 +67 0 obj +<< + /Length 68 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 16) Tj +ET +endstream +endobj + +68 0 obj +47 +endobj + +%% Contents for page 18 +69 0 obj +<< + /Length 70 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 17) Tj +ET +endstream +endobj + +70 0 obj +47 +endobj + +%% Contents for page 19 +71 0 obj +<< + /Length 72 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 18) Tj +ET +endstream +endobj + +72 0 obj +47 +endobj + +%% Contents for page 20 +73 0 obj +<< + /Length 74 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 19) Tj +ET +endstream +endobj + +74 0 obj +47 +endobj + +%% Contents for page 21 +75 0 obj +<< + /Length 76 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 20) Tj +ET +endstream +endobj + +76 0 obj +47 +endobj + +%% Contents for page 22 +77 0 obj +<< + /Length 78 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 21) Tj +ET +endstream +endobj + +78 0 obj +47 +endobj + +%% Contents for page 23 +79 0 obj +<< + /Length 80 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 22) Tj +ET +endstream +endobj + +80 0 obj +47 +endobj + +%% Contents for page 24 +81 0 obj +<< + /Length 82 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 23) Tj +ET +endstream +endobj + +82 0 obj +47 +endobj + +%% Contents for page 25 +83 0 obj +<< + /Length 84 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 24) Tj +ET +endstream +endobj + +84 0 obj +47 +endobj + +%% Contents for page 26 +85 0 obj +<< + /Length 86 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 25) Tj +ET +endstream +endobj + +86 0 obj +47 +endobj + +%% Contents for page 27 +87 0 obj +<< + /Length 88 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 26) Tj +ET +endstream +endobj + +88 0 obj +47 +endobj + +%% Contents for page 28 +89 0 obj +<< + /Length 90 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 27) Tj +ET +endstream +endobj + +90 0 obj +47 +endobj + +%% Contents for page 29 +91 0 obj +<< + /Length 92 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 28) Tj +ET +endstream +endobj + +92 0 obj +47 +endobj + +%% Contents for page 30 +93 0 obj +<< + /Length 94 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 29) Tj +ET +endstream +endobj + +94 0 obj +47 +endobj + +xref +0 110 +0000000095 65535 f +0000000025 00000 n +0000000145 00000 n +0000000541 00000 n +0000000746 00000 n +0000000951 00000 n +0000001156 00000 n +0000001361 00000 n +0000001566 00000 n +0000001771 00000 n +0000001976 00000 n +0000002182 00000 n +0000002389 00000 n +0000002596 00000 n +0000002803 00000 n +0000003010 00000 n +0000003217 00000 n +0000003424 00000 n +0000003631 00000 n +0000003838 00000 n +0000004045 00000 n +0000004252 00000 n +0000004459 00000 n +0000004666 00000 n +0000004873 00000 n +0000005080 00000 n +0000005287 00000 n +0000005494 00000 n +0000005701 00000 n +0000005908 00000 n +0000006115 00000 n +0000006322 00000 n +0000006529 00000 n +0000006748 00000 n +0000006851 00000 n +0000006871 00000 n +0000006990 00000 n +0000007049 00000 n +0000007152 00000 n +0000007195 00000 n +0000007298 00000 n +0000007341 00000 n +0000007444 00000 n +0000007487 00000 n +0000007590 00000 n +0000007633 00000 n +0000007736 00000 n +0000007779 00000 n +0000007882 00000 n +0000007925 00000 n +0000008028 00000 n +0000008071 00000 n +0000008174 00000 n +0000008218 00000 n +0000008321 00000 n +0000008365 00000 n +0000008469 00000 n +0000008513 00000 n +0000008617 00000 n +0000008661 00000 n +0000008765 00000 n +0000008809 00000 n +0000008913 00000 n +0000008957 00000 n +0000009061 00000 n +0000009105 00000 n +0000009209 00000 n +0000009253 00000 n +0000009357 00000 n +0000009401 00000 n +0000009505 00000 n +0000009549 00000 n +0000009653 00000 n +0000009697 00000 n +0000009801 00000 n +0000009845 00000 n +0000009949 00000 n +0000009993 00000 n +0000010097 00000 n +0000010141 00000 n +0000010245 00000 n +0000010289 00000 n +0000010393 00000 n +0000010437 00000 n +0000010541 00000 n +0000010585 00000 n +0000010689 00000 n +0000010733 00000 n +0000010837 00000 n +0000010881 00000 n +0000010985 00000 n +0000011029 00000 n +0000011133 00000 n +0000011177 00000 n +0000011281 00000 n +0000000096 65535 f +0000000097 65535 f +0000000098 65535 f +0000000099 65535 f +0000000100 65535 f +0000000101 65535 f +0000000102 65535 f +0000000103 65535 f +0000000104 65535 f +0000000105 65535 f +0000000106 65535 f +0000000107 65535 f +0000000108 65535 f +0000000109 65535 f +0000000000 65535 f +trailer << + /Root 1 0 R + /Size 110 +>> +startxref +11301 +%%EOF + +108 0 obj +<< + /Type /ObjStm + /N 13 + /First 107 + /Length 2445 +>> +stream +95 0 +96 74 +97 259 +98 393 +99 556 +100 898 +101 1077 +102 1275 +103 1432 +104 1589 +105 1730 +106 1887 +107 2040 +%95 +<< + /Type /Outlines + /First 96 0 R + /Last 97 0 R + /Count 6 +>> +%96 +<< + /Type /Outline + /Title (Isís 1 -> 5: /XYZ null null null) + /Parent 95 0 R + /Count 4 + /Next 97 0 R + /First 98 0 R + /Last 99 0 R + /Dest [ 8 0 R /XYZ null null null ] +>> +% 97 +<< + /Type /Outline + /Title (Trepak 2 -> 15: /XYZ 66 756 3) + /Parent 95 0 R + /Prev 96 0 R + /Dest [ 18 0 R /XYZ 66 756 3 ] +>> +% 98 +<< + /Type /Outline + /Title (Amanda 1.1 -> 11: /Fit) + /Parent 96 0 R + /Next 99 0 R + /First 100 0 R + /Last 101 0 R + /Count -3 + /Dest [ 14 0 R /Fit ] +>> +% 99 +<< + /Type /Outline + % /Title (Sandy (Sandy [Greek]) 1.2 -> 13: /FitH 792) + /Title <feff00530061006e00640079002000f703a303b103bd03b403b900f700200031002e00320020002d003e002000310033003a0020002f00460069007400480020003700390032> + /Parent 96 0 R + /Prev 98 0 R + /First 105 0 R + /Last 106 0 R + /Count 2 + /Dest [ 16 0 R /FitH 792 ] +>> +% 100 +<< + /Type /Outline + /Title (Isosicle 1.1.1 -> 12: /FitV 100) + /Parent 98 0 R + /Next 101 0 R + /First 102 0 R + /Last 103 0 R + /Count -2 + /Dest [ 15 0 R /FitV 100 ] +>> +% 101 +<< + /Type /Outline + /Title (Isosicle 1.1.2 -> 12: /XYZ null null null) + /Parent 98 0 R + /Prev 100 0 R + /First 104 0 R + /Last 104 0 R + /Count 1 + /Dest [ 15 0 R /XYZ null null null ] +>> +% 102 +<< + /Type /Outline + /Title (Isosicle 1.1.1.1 -> 18: /XYZ null null null) + /Parent 100 0 R + /Next 103 0 R + /Dest [ 21 0 R /XYZ null null null ] +>> +% 103 +<< + /Type /Outline + /Title (Isosicle 1.1.1.2 -> 19: /XYZ null null null) + /Parent 100 0 R + /Prev 102 0 R + /Dest [ 22 0 R /XYZ null null null ] +>> +% 104 +<< + /Type /Outline + /Title (Isosicle 1.1.2.1 -> 22: /XYZ null null null) + /Parent 101 0 R + /Dest [ 25 0 R /XYZ null null null ] +>> +% 105 +<< + /Type /Outline + /Title (Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770) + /Parent 99 0 R + /Next 106 0 R + /Dest [ 4 0 R /FitR 66 714 180 770 ] +>> +% 106 +<< + /Type /Outline + /Title (Trepsicle 1.2.2 -> 0: /XYZ null null null) + /Parent 99 0 R + /Prev 105 0 R + /Dest [ 3 0 R /XYZ null null null ] +>> +% 107 + << /Nums [ + 0 << /P () >> + 2 << /S /r /St 1 >> + 7 << /P () >> + 9 << /S /r /St 6 >> + 11 << /P () >> + 12 << /S /D /St 2 >> + 15 << /S /D /St 6 >> + 19 << /P () >> + 20 << /S /D /St 12 >> + 22 << /S /D /St 16059 >> + 23 << /S /r /St 50 >> + 29 << /S /r /St 54 >> + ] >> +endstream +endobj + +109 0 obj +<< + /Type /XRef + /Size 110 + /Index [0 110] + /W [1 2 1] + /Length 110 + /Root 1 0 R + /Filter /FlateDecode + /DecodeParms << /Columns 4 /Predictor 12 >> +>> +stream +xœcb + ÁÔbŒX$‰s â<Œ`8Â%B‚4m·Abé BÄ-±¬abŒÚpY‹Î"IŒQ.b1fÀX$ˆ1ÒA‘¦0^‰qÉ%þ›ÎþÂÄÀùŠ +endstream +endobj + +xref +0 0 +trailer << + /Size 110 + /Root 1 0 R + /Prev 11301 + /XRefStm 16113 +>> + +startxref +16418 +%%EOF diff --git a/qpdf/qtest/qpdf/good18.qdf b/qpdf/qtest/qpdf/good18.qdf new file mode 100644 index 00000000..58e17b82 --- /dev/null +++ b/qpdf/qtest/qpdf/good18.qdf @@ -0,0 +1,1343 @@ +%PDF-1.5 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /PageMode /UseOutlines + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 30 + /Kids [ + 3 0 R + 4 0 R + 5 0 R + 6 0 R + 7 0 R + 8 0 R + 9 0 R + 10 0 R + 11 0 R + 12 0 R + 13 0 R + 14 0 R + 15 0 R + 16 0 R + 17 0 R + 18 0 R + 19 0 R + 20 0 R + 21 0 R + 22 0 R + 23 0 R + 24 0 R + 25 0 R + 26 0 R + 27 0 R + 28 0 R + 29 0 R + 30 0 R + 31 0 R + 32 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 33 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 2 +4 0 obj +<< + /Contents 37 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 3 +5 0 obj +<< + /Contents 39 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 4 +6 0 obj +<< + /Contents 41 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 5 +7 0 obj +<< + /Contents 43 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 6 +8 0 obj +<< + /Contents 45 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 7 +9 0 obj +<< + /Contents 47 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 8 +10 0 obj +<< + /Contents 49 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 9 +11 0 obj +<< + /Contents 51 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 10 +12 0 obj +<< + /Contents 53 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 11 +13 0 obj +<< + /Contents 55 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 12 +14 0 obj +<< + /Contents 57 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 13 +15 0 obj +<< + /Contents 59 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 14 +16 0 obj +<< + /Contents 61 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 15 +17 0 obj +<< + /Contents 63 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 16 +18 0 obj +<< + /Contents 65 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 17 +19 0 obj +<< + /Contents 67 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 18 +20 0 obj +<< + /Contents 69 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 19 +21 0 obj +<< + /Contents 71 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 20 +22 0 obj +<< + /Contents 73 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 21 +23 0 obj +<< + /Contents 75 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 22 +24 0 obj +<< + /Contents 77 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 23 +25 0 obj +<< + /Contents 79 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 24 +26 0 obj +<< + /Contents 81 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 25 +27 0 obj +<< + /Contents 83 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 26 +28 0 obj +<< + /Contents 85 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 27 +29 0 obj +<< + /Contents 87 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 28 +30 0 obj +<< + /Contents 89 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 29 +31 0 obj +<< + /Contents 91 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 30 +32 0 obj +<< + /Contents 93 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +33 0 obj +<< + /Length 34 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 0) Tj +ET +endstream +endobj + +34 0 obj +46 +endobj + +35 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +36 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 2 +37 0 obj +<< + /Length 38 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 1) Tj +ET +endstream +endobj + +38 0 obj +46 +endobj + +%% Contents for page 3 +39 0 obj +<< + /Length 40 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 2) Tj +ET +endstream +endobj + +40 0 obj +46 +endobj + +%% Contents for page 4 +41 0 obj +<< + /Length 42 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 3) Tj +ET +endstream +endobj + +42 0 obj +46 +endobj + +%% Contents for page 5 +43 0 obj +<< + /Length 44 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 4) Tj +ET +endstream +endobj + +44 0 obj +46 +endobj + +%% Contents for page 6 +45 0 obj +<< + /Length 46 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 5) Tj +ET +endstream +endobj + +46 0 obj +46 +endobj + +%% Contents for page 7 +47 0 obj +<< + /Length 48 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 6) Tj +ET +endstream +endobj + +48 0 obj +46 +endobj + +%% Contents for page 8 +49 0 obj +<< + /Length 50 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 7) Tj +ET +endstream +endobj + +50 0 obj +46 +endobj + +%% Contents for page 9 +51 0 obj +<< + /Length 52 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 8) Tj +ET +endstream +endobj + +52 0 obj +46 +endobj + +%% Contents for page 10 +53 0 obj +<< + /Length 54 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 9) Tj +ET +endstream +endobj + +54 0 obj +46 +endobj + +%% Contents for page 11 +55 0 obj +<< + /Length 56 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 10) Tj +ET +endstream +endobj + +56 0 obj +47 +endobj + +%% Contents for page 12 +57 0 obj +<< + /Length 58 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 11) Tj +ET +endstream +endobj + +58 0 obj +47 +endobj + +%% Contents for page 13 +59 0 obj +<< + /Length 60 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 12) Tj +ET +endstream +endobj + +60 0 obj +47 +endobj + +%% Contents for page 14 +61 0 obj +<< + /Length 62 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 13) Tj +ET +endstream +endobj + +62 0 obj +47 +endobj + +%% Contents for page 15 +63 0 obj +<< + /Length 64 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 14) Tj +ET +endstream +endobj + +64 0 obj +47 +endobj + +%% Contents for page 16 +65 0 obj +<< + /Length 66 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 15) Tj +ET +endstream +endobj + +66 0 obj +47 +endobj + +%% Contents for page 17 +67 0 obj +<< + /Length 68 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 16) Tj +ET +endstream +endobj + +68 0 obj +47 +endobj + +%% Contents for page 18 +69 0 obj +<< + /Length 70 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 17) Tj +ET +endstream +endobj + +70 0 obj +47 +endobj + +%% Contents for page 19 +71 0 obj +<< + /Length 72 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 18) Tj +ET +endstream +endobj + +72 0 obj +47 +endobj + +%% Contents for page 20 +73 0 obj +<< + /Length 74 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 19) Tj +ET +endstream +endobj + +74 0 obj +47 +endobj + +%% Contents for page 21 +75 0 obj +<< + /Length 76 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 20) Tj +ET +endstream +endobj + +76 0 obj +47 +endobj + +%% Contents for page 22 +77 0 obj +<< + /Length 78 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 21) Tj +ET +endstream +endobj + +78 0 obj +47 +endobj + +%% Contents for page 23 +79 0 obj +<< + /Length 80 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 22) Tj +ET +endstream +endobj + +80 0 obj +47 +endobj + +%% Contents for page 24 +81 0 obj +<< + /Length 82 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 23) Tj +ET +endstream +endobj + +82 0 obj +47 +endobj + +%% Contents for page 25 +83 0 obj +<< + /Length 84 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 24) Tj +ET +endstream +endobj + +84 0 obj +47 +endobj + +%% Contents for page 26 +85 0 obj +<< + /Length 86 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 25) Tj +ET +endstream +endobj + +86 0 obj +47 +endobj + +%% Contents for page 27 +87 0 obj +<< + /Length 88 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 26) Tj +ET +endstream +endobj + +88 0 obj +47 +endobj + +%% Contents for page 28 +89 0 obj +<< + /Length 90 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 27) Tj +ET +endstream +endobj + +90 0 obj +47 +endobj + +%% Contents for page 29 +91 0 obj +<< + /Length 92 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 28) Tj +ET +endstream +endobj + +92 0 obj +47 +endobj + +%% Contents for page 30 +93 0 obj +<< + /Length 94 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 29) Tj +ET +endstream +endobj + +94 0 obj +47 +endobj + +xref +0 95 +0000000000 65535 f +0000000025 00000 n +0000000104 00000 n +0000000500 00000 n +0000000705 00000 n +0000000910 00000 n +0000001115 00000 n +0000001320 00000 n +0000001525 00000 n +0000001730 00000 n +0000001935 00000 n +0000002141 00000 n +0000002348 00000 n +0000002555 00000 n +0000002762 00000 n +0000002969 00000 n +0000003176 00000 n +0000003383 00000 n +0000003590 00000 n +0000003797 00000 n +0000004004 00000 n +0000004211 00000 n +0000004418 00000 n +0000004625 00000 n +0000004832 00000 n +0000005039 00000 n +0000005246 00000 n +0000005453 00000 n +0000005660 00000 n +0000005867 00000 n +0000006074 00000 n +0000006281 00000 n +0000006488 00000 n +0000006707 00000 n +0000006810 00000 n +0000006830 00000 n +0000006949 00000 n +0000007008 00000 n +0000007111 00000 n +0000007154 00000 n +0000007257 00000 n +0000007300 00000 n +0000007403 00000 n +0000007446 00000 n +0000007549 00000 n +0000007592 00000 n +0000007695 00000 n +0000007738 00000 n +0000007841 00000 n +0000007884 00000 n +0000007987 00000 n +0000008030 00000 n +0000008133 00000 n +0000008177 00000 n +0000008280 00000 n +0000008324 00000 n +0000008428 00000 n +0000008472 00000 n +0000008576 00000 n +0000008620 00000 n +0000008724 00000 n +0000008768 00000 n +0000008872 00000 n +0000008916 00000 n +0000009020 00000 n +0000009064 00000 n +0000009168 00000 n +0000009212 00000 n +0000009316 00000 n +0000009360 00000 n +0000009464 00000 n +0000009508 00000 n +0000009612 00000 n +0000009656 00000 n +0000009760 00000 n +0000009804 00000 n +0000009908 00000 n +0000009952 00000 n +0000010056 00000 n +0000010100 00000 n +0000010204 00000 n +0000010248 00000 n +0000010352 00000 n +0000010396 00000 n +0000010500 00000 n +0000010544 00000 n +0000010648 00000 n +0000010692 00000 n +0000010796 00000 n +0000010840 00000 n +0000010944 00000 n +0000010988 00000 n +0000011092 00000 n +0000011136 00000 n +0000011240 00000 n +trailer << + /Root 1 0 R + /Size 95 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +11260 +%%EOF diff --git a/qpdf/qtest/qpdf/good19.out b/qpdf/qtest/qpdf/good19.out new file mode 100644 index 00000000..1d31025f --- /dev/null +++ b/qpdf/qtest/qpdf/good19.out @@ -0,0 +1,6 @@ +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/good19.pdf b/qpdf/qtest/qpdf/good19.pdf Binary files differnew file mode 100644 index 00000000..3ffc2db0 --- /dev/null +++ b/qpdf/qtest/qpdf/good19.pdf diff --git a/qpdf/qtest/qpdf/good19.qdf b/qpdf/qtest/qpdf/good19.qdf Binary files differnew file mode 100644 index 00000000..1716fc75 --- /dev/null +++ b/qpdf/qtest/qpdf/good19.qdf diff --git a/qpdf/qtest/qpdf/good2.out b/qpdf/qtest/qpdf/good2.out new file mode 100644 index 00000000..1d31025f --- /dev/null +++ b/qpdf/qtest/qpdf/good2.out @@ -0,0 +1,6 @@ +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/good2.pdf b/qpdf/qtest/qpdf/good2.pdf new file mode 100644 index 00000000..535f369c --- /dev/null +++ b/qpdf/qtest/qpdf/good2.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest null +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/good2.qdf b/qpdf/qtest/qpdf/good2.qdf new file mode 100644 index 00000000..976ed2b2 --- /dev/null +++ b/qpdf/qtest/qpdf/good2.qdf @@ -0,0 +1,95 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +trailer << + /Root 1 0 R + /Size 8 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +647 +%%EOF diff --git a/qpdf/qtest/qpdf/good20.out b/qpdf/qtest/qpdf/good20.out new file mode 100644 index 00000000..1d31025f --- /dev/null +++ b/qpdf/qtest/qpdf/good20.out @@ -0,0 +1,6 @@ +/QTest is implicit +/QTest is direct +/QTest is null +unparse: null +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/good20.pdf b/qpdf/qtest/qpdf/good20.pdf new file mode 100644 index 00000000..91c3f2b3 --- /dev/null +++ b/qpdf/qtest/qpdf/good20.pdf @@ -0,0 +1,901 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> + /OtherStuff [ + 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R + 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R + 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R + 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R + 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R + 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R + 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R + 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R + 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R + 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R + 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R + 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R + 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R + 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R + 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R + 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R + 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R + 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R + 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R + 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R + ] +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +7 0 obj +[/Object-7] +endobj + +8 0 obj +[/Object-8] +endobj + +9 0 obj +[/Object-9] +endobj + +10 0 obj +[/Object-10] +endobj + +11 0 obj +[/Object-11] +endobj + +12 0 obj +[/Object-12] +endobj + +13 0 obj +[/Object-13] +endobj + +14 0 obj +[/Object-14] +endobj + +15 0 obj +[/Object-15] +endobj + +16 0 obj +[/Object-16] +endobj + +17 0 obj +[/Object-17] +endobj + +18 0 obj +[/Object-18] +endobj + +19 0 obj +[/Object-19] +endobj + +20 0 obj +[/Object-20] +endobj + +21 0 obj +[/Object-21] +endobj + +22 0 obj +[/Object-22] +endobj + +23 0 obj +[/Object-23] +endobj + +24 0 obj +[/Object-24] +endobj + +25 0 obj +[/Object-25] +endobj + +26 0 obj +[/Object-26] +endobj + +27 0 obj +[/Object-27] +endobj + +28 0 obj +[/Object-28] +endobj + +29 0 obj +[/Object-29] +endobj + +30 0 obj +[/Object-30] +endobj + +31 0 obj +[/Object-31] +endobj + +32 0 obj +[/Object-32] +endobj + +33 0 obj +[/Object-33] +endobj + +34 0 obj +[/Object-34] +endobj + +35 0 obj +[/Object-35] +endobj + +36 0 obj +[/Object-36] +endobj + +37 0 obj +[/Object-37] +endobj + +38 0 obj +[/Object-38] +endobj + +39 0 obj +[/Object-39] +endobj + +40 0 obj +[/Object-40] +endobj + +41 0 obj +[/Object-41] +endobj + +42 0 obj +[/Object-42] +endobj + +43 0 obj +[/Object-43] +endobj + +44 0 obj +[/Object-44] +endobj + +45 0 obj +[/Object-45] +endobj + +46 0 obj +[/Object-46] +endobj + +47 0 obj +[/Object-47] +endobj + +48 0 obj +[/Object-48] +endobj + +49 0 obj +[/Object-49] +endobj + +50 0 obj +[/Object-50] +endobj + +51 0 obj +[/Object-51] +endobj + +52 0 obj +[/Object-52] +endobj + +53 0 obj +[/Object-53] +endobj + +54 0 obj +[/Object-54] +endobj + +55 0 obj +[/Object-55] +endobj + +56 0 obj +[/Object-56] +endobj + +57 0 obj +[/Object-57] +endobj + +58 0 obj +[/Object-58] +endobj + +59 0 obj +[/Object-59] +endobj + +60 0 obj +[/Object-60] +endobj + +61 0 obj +[/Object-61] +endobj + +62 0 obj +[/Object-62] +endobj + +63 0 obj +[/Object-63] +endobj + +64 0 obj +[/Object-64] +endobj + +65 0 obj +[/Object-65] +endobj + +66 0 obj +[/Object-66] +endobj + +67 0 obj +[/Object-67] +endobj + +68 0 obj +[/Object-68] +endobj + +69 0 obj +[/Object-69] +endobj + +70 0 obj +[/Object-70] +endobj + +71 0 obj +[/Object-71] +endobj + +72 0 obj +[/Object-72] +endobj + +73 0 obj +[/Object-73] +endobj + +74 0 obj +[/Object-74] +endobj + +75 0 obj +[/Object-75] +endobj + +76 0 obj +[/Object-76] +endobj + +77 0 obj +[/Object-77] +endobj + +78 0 obj +[/Object-78] +endobj + +79 0 obj +[/Object-79] +endobj + +80 0 obj +[/Object-80] +endobj + +81 0 obj +[/Object-81] +endobj + +82 0 obj +[/Object-82] +endobj + +83 0 obj +[/Object-83] +endobj + +84 0 obj +[/Object-84] +endobj + +85 0 obj +[/Object-85] +endobj + +86 0 obj +[/Object-86] +endobj + +87 0 obj +[/Object-87] +endobj + +88 0 obj +[/Object-88] +endobj + +89 0 obj +[/Object-89] +endobj + +90 0 obj +[/Object-90] +endobj + +91 0 obj +[/Object-91] +endobj + +92 0 obj +[/Object-92] +endobj + +93 0 obj +[/Object-93] +endobj + +94 0 obj +[/Object-94] +endobj + +95 0 obj +[/Object-95] +endobj + +96 0 obj +[/Object-96] +endobj + +97 0 obj +[/Object-97] +endobj + +98 0 obj +[/Object-98] +endobj + +99 0 obj +[/Object-99] +endobj + +100 0 obj +[/Object-100] +endobj + +101 0 obj +[/Object-101] +endobj + +102 0 obj +[/Object-102] +endobj + +103 0 obj +[/Object-103] +endobj + +104 0 obj +[/Object-104] +endobj + +105 0 obj +[/Object-105] +endobj + +106 0 obj +[/Object-106] +endobj + +107 0 obj +[/Object-107] +endobj + +108 0 obj +[/Object-108] +endobj + +109 0 obj +[/Object-109] +endobj + +110 0 obj +[/Object-110] +endobj + +111 0 obj +[/Object-111] +endobj + +112 0 obj +[/Object-112] +endobj + +113 0 obj +[/Object-113] +endobj + +114 0 obj +[/Object-114] +endobj + +115 0 obj +[/Object-115] +endobj + +116 0 obj +[/Object-116] +endobj + +117 0 obj +[/Object-117] +endobj + +118 0 obj +[/Object-118] +endobj + +119 0 obj +[/Object-119] +endobj + +120 0 obj +[/Object-120] +endobj + +121 0 obj +[/Object-121] +endobj + +122 0 obj +[/Object-122] +endobj + +123 0 obj +[/Object-123] +endobj + +124 0 obj +[/Object-124] +endobj + +125 0 obj +[/Object-125] +endobj + +126 0 obj +[/Object-126] +endobj + +127 0 obj +[/Object-127] +endobj + +128 0 obj +[/Object-128] +endobj + +129 0 obj +[/Object-129] +endobj + +130 0 obj +[/Object-130] +endobj + +131 0 obj +[/Object-131] +endobj + +132 0 obj +[/Object-132] +endobj + +133 0 obj +[/Object-133] +endobj + +134 0 obj +[/Object-134] +endobj + +135 0 obj +[/Object-135] +endobj + +136 0 obj +[/Object-136] +endobj + +137 0 obj +[/Object-137] +endobj + +138 0 obj +[/Object-138] +endobj + +139 0 obj +[/Object-139] +endobj + +140 0 obj +[/Object-140] +endobj + +141 0 obj +[/Object-141] +endobj + +142 0 obj +[/Object-142] +endobj + +143 0 obj +[/Object-143] +endobj + +144 0 obj +[/Object-144] +endobj + +145 0 obj +[/Object-145] +endobj + +146 0 obj +[/Object-146] +endobj + +147 0 obj +[/Object-147] +endobj + +148 0 obj +[/Object-148] +endobj + +149 0 obj +[/Object-149] +endobj + +150 0 obj +[/Object-150] +endobj + +151 0 obj +[/Object-151] +endobj + +152 0 obj +[/Object-152] +endobj + +153 0 obj +[/Object-153] +endobj + +154 0 obj +[/Object-154] +endobj + +155 0 obj +[/Object-155] +endobj + +156 0 obj +[/Object-156] +endobj + +157 0 obj +[/Object-157] +endobj + +158 0 obj +[/Object-158] +endobj + +159 0 obj +[/Object-159] +endobj + +160 0 obj +[/Object-160] +endobj + +161 0 obj +[/Object-161] +endobj + +162 0 obj +[/Object-162] +endobj + +163 0 obj +[/Object-163] +endobj + +164 0 obj +[/Object-164] +endobj + +165 0 obj +[/Object-165] +endobj + +166 0 obj +[/Object-166] +endobj + +xref +0 167 +0000006875 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000001687 00000 n +0000001783 00000 n +0000001818 00000 n +0000001936 00000 n +0000001964 00000 n +0000001992 00000 n +0000002020 00000 n +0000002050 00000 n +0000002080 00000 n +0000002110 00000 n +0000002140 00000 n +0000002170 00000 n +0000002200 00000 n +0000002230 00000 n +0000002260 00000 n +0000002290 00000 n +0000002320 00000 n +0000002350 00000 n +0000002380 00000 n +0000002410 00000 n +0000002440 00000 n +0000002470 00000 n +0000002500 00000 n +0000002530 00000 n +0000002560 00000 n +0000002590 00000 n +0000002620 00000 n +0000002650 00000 n +0000002680 00000 n +0000002710 00000 n +0000002740 00000 n +0000002770 00000 n +0000002800 00000 n +0000002830 00000 n +0000002860 00000 n +0000002890 00000 n +0000002920 00000 n +0000002950 00000 n +0000002980 00000 n +0000003010 00000 n +0000003040 00000 n +0000003070 00000 n +0000003100 00000 n +0000003130 00000 n +0000003160 00000 n +0000003190 00000 n +0000003220 00000 n +0000003250 00000 n +0000003280 00000 n +0000003310 00000 n +0000003340 00000 n +0000003370 00000 n +0000003400 00000 n +0000003430 00000 n +0000003460 00000 n +0000003490 00000 n +0000003520 00000 n +0000003550 00000 n +0000003580 00000 n +0000003610 00000 n +0000003640 00000 n +0000003670 00000 n +0000003700 00000 n +0000003730 00000 n +0000003760 00000 n +0000003790 00000 n +0000003820 00000 n +0000003850 00000 n +0000003880 00000 n +0000003910 00000 n +0000003940 00000 n +0000003970 00000 n +0000004000 00000 n +0000004030 00000 n +0000004060 00000 n +0000004090 00000 n +0000004120 00000 n +0000004150 00000 n +0000004180 00000 n +0000004210 00000 n +0000004240 00000 n +0000004270 00000 n +0000004300 00000 n +0000004330 00000 n +0000004360 00000 n +0000004390 00000 n +0000004420 00000 n +0000004450 00000 n +0000004480 00000 n +0000004510 00000 n +0000004540 00000 n +0000004570 00000 n +0000004600 00000 n +0000004630 00000 n +0000004660 00000 n +0000004690 00000 n +0000004720 00000 n +0000004752 00000 n +0000004784 00000 n +0000004816 00000 n +0000004848 00000 n +0000004880 00000 n +0000004912 00000 n +0000004944 00000 n +0000004976 00000 n +0000005008 00000 n +0000005040 00000 n +0000005072 00000 n +0000005104 00000 n +0000005136 00000 n +0000005168 00000 n +0000005200 00000 n +0000005232 00000 n +0000005264 00000 n +0000005296 00000 n +0000005328 00000 n +0000005360 00000 n +0000005392 00000 n +0000005424 00000 n +0000005456 00000 n +0000005488 00000 n +0000005520 00000 n +0000005552 00000 n +0000005584 00000 n +0000005616 00000 n +0000005648 00000 n +0000005680 00000 n +0000005712 00000 n +0000005744 00000 n +0000005776 00000 n +0000005808 00000 n +0000005840 00000 n +0000005872 00000 n +0000005904 00000 n +0000005936 00000 n +0000005968 00000 n +0000006000 00000 n +0000006032 00000 n +0000006064 00000 n +0000006096 00000 n +0000006128 00000 n +0000006160 00000 n +0000006192 00000 n +0000006224 00000 n +0000006256 00000 n +0000006288 00000 n +0000006320 00000 n +0000006352 00000 n +0000006384 00000 n +0000006416 00000 n +0000006448 00000 n +0000006480 00000 n +0000006512 00000 n +0000006544 00000 n +0000006576 00000 n +0000006608 00000 n +0000006640 00000 n +0000006672 00000 n +0000006704 00000 n +0000006736 00000 n +0000006768 00000 n +0000006800 00000 n +0000006832 00000 n +trailer << + /Size 167 + /Root 1 0 R +>> +startxref +6864 +%%EOF diff --git a/qpdf/qtest/qpdf/good20.qdf b/qpdf/qtest/qpdf/good20.qdf new file mode 100644 index 00000000..f4c8cad9 --- /dev/null +++ b/qpdf/qtest/qpdf/good20.qdf @@ -0,0 +1,1075 @@ +%PDF-1.5 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Type /ObjStm + /Length 7271 + /N 83 + /First 686 +>> +stream +2 0 +3 74 +4 166 +5 2236 +6 2288 +7 2340 +8 2392 +9 2445 +10 2499 +11 2553 +12 2608 +13 2663 +14 2718 +15 2773 +16 2828 +17 2883 +18 2938 +19 2993 +20 3048 +21 3103 +22 3158 +23 3213 +24 3268 +25 3323 +26 3378 +27 3433 +28 3488 +29 3543 +30 3598 +31 3653 +32 3708 +33 3763 +34 3818 +35 3873 +36 3928 +37 3983 +38 4038 +39 4093 +40 4148 +41 4203 +42 4258 +43 4313 +44 4368 +45 4423 +46 4478 +47 4533 +48 4588 +49 4643 +50 4698 +51 4753 +52 4808 +53 4863 +54 4918 +55 4973 +56 5028 +57 5083 +58 5138 +59 5193 +60 5248 +61 5303 +62 5358 +63 5413 +64 5468 +65 5523 +66 5578 +67 5633 +68 5688 +69 5743 +70 5798 +71 5853 +72 5908 +73 5963 +74 6018 +75 6073 +76 6128 +77 6183 +78 6238 +79 6293 +80 6348 +81 6403 +82 6458 +83 6513 +84 6568 +%% Object stream: object 2, index 0 +<< + /Pages 3 0 R + /Type /Catalog +>> +%% Object stream: object 3, index 1 +<< + /Count 1 + /Kids [ + 4 0 R + ] + /Type /Pages +>> +%% Object stream: object 4, index 2 +%% Page 1 +<< + /Contents 85 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /OtherStuff [ + 5 0 R + 6 0 R + 7 0 R + 8 0 R + 9 0 R + 10 0 R + 11 0 R + 12 0 R + 13 0 R + 14 0 R + 15 0 R + 16 0 R + 17 0 R + 18 0 R + 19 0 R + 20 0 R + 21 0 R + 22 0 R + 23 0 R + 24 0 R + 25 0 R + 26 0 R + 27 0 R + 28 0 R + 29 0 R + 30 0 R + 31 0 R + 32 0 R + 33 0 R + 34 0 R + 35 0 R + 36 0 R + 37 0 R + 38 0 R + 39 0 R + 40 0 R + 41 0 R + 42 0 R + 43 0 R + 44 0 R + 45 0 R + 46 0 R + 47 0 R + 48 0 R + 49 0 R + 50 0 R + 51 0 R + 52 0 R + 53 0 R + 54 0 R + 55 0 R + 56 0 R + 57 0 R + 58 0 R + 59 0 R + 60 0 R + 61 0 R + 62 0 R + 63 0 R + 64 0 R + 65 0 R + 66 0 R + 67 0 R + 68 0 R + 69 0 R + 70 0 R + 71 0 R + 72 0 R + 73 0 R + 74 0 R + 75 0 R + 76 0 R + 77 0 R + 78 0 R + 79 0 R + 80 0 R + 81 0 R + 82 0 R + 83 0 R + 84 0 R + 90 0 R + 91 0 R + 92 0 R + 93 0 R + 94 0 R + 95 0 R + 96 0 R + 97 0 R + 98 0 R + 99 0 R + 100 0 R + 101 0 R + 102 0 R + 103 0 R + 104 0 R + 105 0 R + 106 0 R + 107 0 R + 108 0 R + 109 0 R + 110 0 R + 111 0 R + 112 0 R + 113 0 R + 114 0 R + 115 0 R + 116 0 R + 117 0 R + 118 0 R + 119 0 R + 120 0 R + 121 0 R + 122 0 R + 123 0 R + 124 0 R + 125 0 R + 126 0 R + 127 0 R + 128 0 R + 129 0 R + 130 0 R + 131 0 R + 132 0 R + 133 0 R + 134 0 R + 135 0 R + 136 0 R + 137 0 R + 138 0 R + 139 0 R + 140 0 R + 141 0 R + 142 0 R + 143 0 R + 144 0 R + 145 0 R + 146 0 R + 147 0 R + 148 0 R + 149 0 R + 150 0 R + 151 0 R + 152 0 R + 153 0 R + 154 0 R + 155 0 R + 156 0 R + 157 0 R + 158 0 R + 159 0 R + 160 0 R + 161 0 R + 162 0 R + 163 0 R + 164 0 R + 165 0 R + 166 0 R + 167 0 R + 168 0 R + 169 0 R + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 89 0 R + >> + /ProcSet 88 0 R + >> + /Type /Page +>> +%% Object stream: object 5, index 3 +[ + /Object-7 +] +%% Object stream: object 6, index 4 +[ + /Object-8 +] +%% Object stream: object 7, index 5 +[ + /Object-9 +] +%% Object stream: object 8, index 6 +[ + /Object-10 +] +%% Object stream: object 9, index 7 +[ + /Object-11 +] +%% Object stream: object 10, index 8 +[ + /Object-12 +] +%% Object stream: object 11, index 9 +[ + /Object-13 +] +%% Object stream: object 12, index 10 +[ + /Object-14 +] +%% Object stream: object 13, index 11 +[ + /Object-15 +] +%% Object stream: object 14, index 12 +[ + /Object-16 +] +%% Object stream: object 15, index 13 +[ + /Object-17 +] +%% Object stream: object 16, index 14 +[ + /Object-18 +] +%% Object stream: object 17, index 15 +[ + /Object-19 +] +%% Object stream: object 18, index 16 +[ + /Object-20 +] +%% Object stream: object 19, index 17 +[ + /Object-21 +] +%% Object stream: object 20, index 18 +[ + /Object-22 +] +%% Object stream: object 21, index 19 +[ + /Object-23 +] +%% Object stream: object 22, index 20 +[ + /Object-24 +] +%% Object stream: object 23, index 21 +[ + /Object-25 +] +%% Object stream: object 24, index 22 +[ + /Object-26 +] +%% Object stream: object 25, index 23 +[ + /Object-27 +] +%% Object stream: object 26, index 24 +[ + /Object-28 +] +%% Object stream: object 27, index 25 +[ + /Object-29 +] +%% Object stream: object 28, index 26 +[ + /Object-30 +] +%% Object stream: object 29, index 27 +[ + /Object-31 +] +%% Object stream: object 30, index 28 +[ + /Object-32 +] +%% Object stream: object 31, index 29 +[ + /Object-33 +] +%% Object stream: object 32, index 30 +[ + /Object-34 +] +%% Object stream: object 33, index 31 +[ + /Object-35 +] +%% Object stream: object 34, index 32 +[ + /Object-36 +] +%% Object stream: object 35, index 33 +[ + /Object-37 +] +%% Object stream: object 36, index 34 +[ + /Object-38 +] +%% Object stream: object 37, index 35 +[ + /Object-39 +] +%% Object stream: object 38, index 36 +[ + /Object-40 +] +%% Object stream: object 39, index 37 +[ + /Object-41 +] +%% Object stream: object 40, index 38 +[ + /Object-42 +] +%% Object stream: object 41, index 39 +[ + /Object-43 +] +%% Object stream: object 42, index 40 +[ + /Object-44 +] +%% Object stream: object 43, index 41 +[ + /Object-45 +] +%% Object stream: object 44, index 42 +[ + /Object-46 +] +%% Object stream: object 45, index 43 +[ + /Object-47 +] +%% Object stream: object 46, index 44 +[ + /Object-48 +] +%% Object stream: object 47, index 45 +[ + /Object-49 +] +%% Object stream: object 48, index 46 +[ + /Object-50 +] +%% Object stream: object 49, index 47 +[ + /Object-51 +] +%% Object stream: object 50, index 48 +[ + /Object-52 +] +%% Object stream: object 51, index 49 +[ + /Object-53 +] +%% Object stream: object 52, index 50 +[ + /Object-54 +] +%% Object stream: object 53, index 51 +[ + /Object-55 +] +%% Object stream: object 54, index 52 +[ + /Object-56 +] +%% Object stream: object 55, index 53 +[ + /Object-57 +] +%% Object stream: object 56, index 54 +[ + /Object-58 +] +%% Object stream: object 57, index 55 +[ + /Object-59 +] +%% Object stream: object 58, index 56 +[ + /Object-60 +] +%% Object stream: object 59, index 57 +[ + /Object-61 +] +%% Object stream: object 60, index 58 +[ + /Object-62 +] +%% Object stream: object 61, index 59 +[ + /Object-63 +] +%% Object stream: object 62, index 60 +[ + /Object-64 +] +%% Object stream: object 63, index 61 +[ + /Object-65 +] +%% Object stream: object 64, index 62 +[ + /Object-66 +] +%% Object stream: object 65, index 63 +[ + /Object-67 +] +%% Object stream: object 66, index 64 +[ + /Object-68 +] +%% Object stream: object 67, index 65 +[ + /Object-69 +] +%% Object stream: object 68, index 66 +[ + /Object-70 +] +%% Object stream: object 69, index 67 +[ + /Object-71 +] +%% Object stream: object 70, index 68 +[ + /Object-72 +] +%% Object stream: object 71, index 69 +[ + /Object-73 +] +%% Object stream: object 72, index 70 +[ + /Object-74 +] +%% Object stream: object 73, index 71 +[ + /Object-75 +] +%% Object stream: object 74, index 72 +[ + /Object-76 +] +%% Object stream: object 75, index 73 +[ + /Object-77 +] +%% Object stream: object 76, index 74 +[ + /Object-78 +] +%% Object stream: object 77, index 75 +[ + /Object-79 +] +%% Object stream: object 78, index 76 +[ + /Object-80 +] +%% Object stream: object 79, index 77 +[ + /Object-81 +] +%% Object stream: object 80, index 78 +[ + /Object-82 +] +%% Object stream: object 81, index 79 +[ + /Object-83 +] +%% Object stream: object 82, index 80 +[ + /Object-84 +] +%% Object stream: object 83, index 81 +[ + /Object-85 +] +%% Object stream: object 84, index 82 +[ + /Object-86 +] +endstream +endobj + +%% Contents for page 1 +85 0 obj +<< + /Length 86 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +86 0 obj +44 +endobj + +87 0 obj +<< + /Type /ObjStm + /Length 5430 + /N 82 + /First 743 +>> +stream +88 0 +89 56 +90 195 +91 249 +92 303 +93 357 +94 411 +95 465 +96 519 +97 573 +98 628 +99 683 +100 739 +101 795 +102 851 +103 907 +104 964 +105 1021 +106 1078 +107 1135 +108 1192 +109 1249 +110 1306 +111 1363 +112 1420 +113 1477 +114 1534 +115 1591 +116 1648 +117 1705 +118 1762 +119 1819 +120 1876 +121 1933 +122 1990 +123 2047 +124 2104 +125 2161 +126 2218 +127 2275 +128 2332 +129 2389 +130 2446 +131 2503 +132 2560 +133 2617 +134 2674 +135 2731 +136 2788 +137 2845 +138 2902 +139 2959 +140 3016 +141 3073 +142 3130 +143 3187 +144 3244 +145 3301 +146 3358 +147 3415 +148 3472 +149 3529 +150 3586 +151 3643 +152 3700 +153 3757 +154 3814 +155 3871 +156 3928 +157 3985 +158 4042 +159 4099 +160 4156 +161 4213 +162 4270 +163 4327 +164 4384 +165 4441 +166 4498 +167 4555 +168 4612 +169 4669 +%% Object stream: object 88, index 0 +[ + /PDF + /Text +] +%% Object stream: object 89, index 1 +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +%% Object stream: object 90, index 2 +[ + /Object-87 +] +%% Object stream: object 91, index 3 +[ + /Object-88 +] +%% Object stream: object 92, index 4 +[ + /Object-89 +] +%% Object stream: object 93, index 5 +[ + /Object-90 +] +%% Object stream: object 94, index 6 +[ + /Object-91 +] +%% Object stream: object 95, index 7 +[ + /Object-92 +] +%% Object stream: object 96, index 8 +[ + /Object-93 +] +%% Object stream: object 97, index 9 +[ + /Object-94 +] +%% Object stream: object 98, index 10 +[ + /Object-95 +] +%% Object stream: object 99, index 11 +[ + /Object-96 +] +%% Object stream: object 100, index 12 +[ + /Object-97 +] +%% Object stream: object 101, index 13 +[ + /Object-98 +] +%% Object stream: object 102, index 14 +[ + /Object-99 +] +%% Object stream: object 103, index 15 +[ + /Object-100 +] +%% Object stream: object 104, index 16 +[ + /Object-101 +] +%% Object stream: object 105, index 17 +[ + /Object-102 +] +%% Object stream: object 106, index 18 +[ + /Object-103 +] +%% Object stream: object 107, index 19 +[ + /Object-104 +] +%% Object stream: object 108, index 20 +[ + /Object-105 +] +%% Object stream: object 109, index 21 +[ + /Object-106 +] +%% Object stream: object 110, index 22 +[ + /Object-107 +] +%% Object stream: object 111, index 23 +[ + /Object-108 +] +%% Object stream: object 112, index 24 +[ + /Object-109 +] +%% Object stream: object 113, index 25 +[ + /Object-110 +] +%% Object stream: object 114, index 26 +[ + /Object-111 +] +%% Object stream: object 115, index 27 +[ + /Object-112 +] +%% Object stream: object 116, index 28 +[ + /Object-113 +] +%% Object stream: object 117, index 29 +[ + /Object-114 +] +%% Object stream: object 118, index 30 +[ + /Object-115 +] +%% Object stream: object 119, index 31 +[ + /Object-116 +] +%% Object stream: object 120, index 32 +[ + /Object-117 +] +%% Object stream: object 121, index 33 +[ + /Object-118 +] +%% Object stream: object 122, index 34 +[ + /Object-119 +] +%% Object stream: object 123, index 35 +[ + /Object-120 +] +%% Object stream: object 124, index 36 +[ + /Object-121 +] +%% Object stream: object 125, index 37 +[ + /Object-122 +] +%% Object stream: object 126, index 38 +[ + /Object-123 +] +%% Object stream: object 127, index 39 +[ + /Object-124 +] +%% Object stream: object 128, index 40 +[ + /Object-125 +] +%% Object stream: object 129, index 41 +[ + /Object-126 +] +%% Object stream: object 130, index 42 +[ + /Object-127 +] +%% Object stream: object 131, index 43 +[ + /Object-128 +] +%% Object stream: object 132, index 44 +[ + /Object-129 +] +%% Object stream: object 133, index 45 +[ + /Object-130 +] +%% Object stream: object 134, index 46 +[ + /Object-131 +] +%% Object stream: object 135, index 47 +[ + /Object-132 +] +%% Object stream: object 136, index 48 +[ + /Object-133 +] +%% Object stream: object 137, index 49 +[ + /Object-134 +] +%% Object stream: object 138, index 50 +[ + /Object-135 +] +%% Object stream: object 139, index 51 +[ + /Object-136 +] +%% Object stream: object 140, index 52 +[ + /Object-137 +] +%% Object stream: object 141, index 53 +[ + /Object-138 +] +%% Object stream: object 142, index 54 +[ + /Object-139 +] +%% Object stream: object 143, index 55 +[ + /Object-140 +] +%% Object stream: object 144, index 56 +[ + /Object-141 +] +%% Object stream: object 145, index 57 +[ + /Object-142 +] +%% Object stream: object 146, index 58 +[ + /Object-143 +] +%% Object stream: object 147, index 59 +[ + /Object-144 +] +%% Object stream: object 148, index 60 +[ + /Object-145 +] +%% Object stream: object 149, index 61 +[ + /Object-146 +] +%% Object stream: object 150, index 62 +[ + /Object-147 +] +%% Object stream: object 151, index 63 +[ + /Object-148 +] +%% Object stream: object 152, index 64 +[ + /Object-149 +] +%% Object stream: object 153, index 65 +[ + /Object-150 +] +%% Object stream: object 154, index 66 +[ + /Object-151 +] +%% Object stream: object 155, index 67 +[ + /Object-152 +] +%% Object stream: object 156, index 68 +[ + /Object-153 +] +%% Object stream: object 157, index 69 +[ + /Object-154 +] +%% Object stream: object 158, index 70 +[ + /Object-155 +] +%% Object stream: object 159, index 71 +[ + /Object-156 +] +%% Object stream: object 160, index 72 +[ + /Object-157 +] +%% Object stream: object 161, index 73 +[ + /Object-158 +] +%% Object stream: object 162, index 74 +[ + /Object-159 +] +%% Object stream: object 163, index 75 +[ + /Object-160 +] +%% Object stream: object 164, index 76 +[ + /Object-161 +] +%% Object stream: object 165, index 77 +[ + /Object-162 +] +%% Object stream: object 166, index 78 +[ + /Object-163 +] +%% Object stream: object 167, index 79 +[ + /Object-164 +] +%% Object stream: object 168, index 80 +[ + /Object-165 +] +%% Object stream: object 169, index 81 +[ + /Object-166 +] +endstream +endobj + +170 0 obj +<< + /Type /XRef + /Length 684 + /W [ 1 2 1 ] + /Root 2 0 R + /Size 171 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +stream + + + +endstream +endobj + +startxref +13053 +%%EOF diff --git a/qpdf/qtest/qpdf/good3.out b/qpdf/qtest/qpdf/good3.out new file mode 100644 index 00000000..7982e109 --- /dev/null +++ b/qpdf/qtest/qpdf/good3.out @@ -0,0 +1,6 @@ +/QTest is implicit +/QTest is indirect +/QTest is null +unparse: 7 0 R +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/good3.pdf b/qpdf/qtest/qpdf/good3.pdf new file mode 100644 index 00000000..068e7968 --- /dev/null +++ b/qpdf/qtest/qpdf/good3.pdf @@ -0,0 +1,80 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest 7 0 R +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/good3.qdf b/qpdf/qtest/qpdf/good3.qdf new file mode 100644 index 00000000..976ed2b2 --- /dev/null +++ b/qpdf/qtest/qpdf/good3.qdf @@ -0,0 +1,95 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +trailer << + /Root 1 0 R + /Size 8 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +647 +%%EOF diff --git a/qpdf/qtest/qpdf/good4.out b/qpdf/qtest/qpdf/good4.out new file mode 100644 index 00000000..7982e109 --- /dev/null +++ b/qpdf/qtest/qpdf/good4.out @@ -0,0 +1,6 @@ +/QTest is implicit +/QTest is indirect +/QTest is null +unparse: 7 0 R +unparseResolved: null +test 1 done diff --git a/qpdf/qtest/qpdf/good4.pdf b/qpdf/qtest/qpdf/good4.pdf new file mode 100644 index 00000000..326d542d --- /dev/null +++ b/qpdf/qtest/qpdf/good4.pdf @@ -0,0 +1,83 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +7 0 obj null endobj + +xref +0 8 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +0000000556 00000 n +trailer << + /Size 8 + /Root 1 0 R + /QTest 7 0 R +>> +startxref +577 +%%EOF diff --git a/qpdf/qtest/qpdf/good4.qdf b/qpdf/qtest/qpdf/good4.qdf new file mode 100644 index 00000000..976ed2b2 --- /dev/null +++ b/qpdf/qtest/qpdf/good4.qdf @@ -0,0 +1,95 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +trailer << + /Root 1 0 R + /Size 8 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +647 +%%EOF diff --git a/qpdf/qtest/qpdf/good5.out b/qpdf/qtest/qpdf/good5.out new file mode 100644 index 00000000..ff2e3fdf --- /dev/null +++ b/qpdf/qtest/qpdf/good5.out @@ -0,0 +1,5 @@ +/QTest is indirect +/QTest is Boolean with value true +unparse: 7 0 R +unparseResolved: true +test 1 done diff --git a/qpdf/qtest/qpdf/good5.pdf b/qpdf/qtest/qpdf/good5.pdf new file mode 100644 index 00000000..0d9b55dd --- /dev/null +++ b/qpdf/qtest/qpdf/good5.pdf @@ -0,0 +1,83 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +7 0 obj true endobj + +xref +0 8 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +0000000556 00000 n +trailer << + /Size 8 + /Root 1 0 R + /QTest 7 0 R +>> +startxref +577 +%%EOF diff --git a/qpdf/qtest/qpdf/good5.qdf b/qpdf/qtest/qpdf/good5.qdf new file mode 100644 index 00000000..3ace3aa8 --- /dev/null +++ b/qpdf/qtest/qpdf/good5.qdf @@ -0,0 +1,96 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +trailer << + /QTest true + /Root 1 0 R + /Size 8 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +647 +%%EOF diff --git a/qpdf/qtest/qpdf/good6.out b/qpdf/qtest/qpdf/good6.out new file mode 100644 index 00000000..17b498d1 --- /dev/null +++ b/qpdf/qtest/qpdf/good6.out @@ -0,0 +1,5 @@ +/QTest is direct +/QTest is Boolean with value false +unparse: false +unparseResolved: false +test 1 done diff --git a/qpdf/qtest/qpdf/good6.pdf b/qpdf/qtest/qpdf/good6.pdf new file mode 100644 index 00000000..790f700a --- /dev/null +++ b/qpdf/qtest/qpdf/good6.pdf @@ -0,0 +1,79 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest false +>> +startxref
556 +%%EOF diff --git a/qpdf/qtest/qpdf/good6.qdf b/qpdf/qtest/qpdf/good6.qdf new file mode 100644 index 00000000..1602336f --- /dev/null +++ b/qpdf/qtest/qpdf/good6.qdf @@ -0,0 +1,96 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +trailer << + /QTest false + /Root 1 0 R + /Size 8 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +647 +%%EOF diff --git a/qpdf/qtest/qpdf/good7-not-normalized.qdf b/qpdf/qtest/qpdf/good7-not-normalized.qdf new file mode 100644 index 00000000..5c6e9caf --- /dev/null +++ b/qpdf/qtest/qpdf/good7-not-normalized.qdf @@ -0,0 +1,95 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream + +BT +/F1 24 Tf
72 720 Td
+ (Potato) Tj
ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +trailer << + /QTest 16059 + /Root 1 0 R + /Size 8 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +647 +%%EOF diff --git a/qpdf/qtest/qpdf/good7.out b/qpdf/qtest/qpdf/good7.out new file mode 100644 index 00000000..ab14fba0 --- /dev/null +++ b/qpdf/qtest/qpdf/good7.out @@ -0,0 +1,5 @@ +/QTest is direct +/QTest is an integer with value 16059 +unparse: 16059 +unparseResolved: 16059 +test 1 done diff --git a/qpdf/qtest/qpdf/good7.pdf b/qpdf/qtest/qpdf/good7.pdf new file mode 100644 index 00000000..e5f2298e --- /dev/null +++ b/qpdf/qtest/qpdf/good7.pdf @@ -0,0 +1,79 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream + +BT +/F1 24 Tf
72 720 Td
+ (Potato) Tj
ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest 16059 +>> +startxref
+556 +%%EOF diff --git a/qpdf/qtest/qpdf/good7.qdf b/qpdf/qtest/qpdf/good7.qdf new file mode 100644 index 00000000..c338e80c --- /dev/null +++ b/qpdf/qtest/qpdf/good7.qdf @@ -0,0 +1,97 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream + +BT +/F1 24 Tf +72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +43 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000474 00000 n +0000000493 00000 n +0000000611 00000 n +trailer << + /QTest 16059 + /Root 1 0 R + /Size 8 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +646 +%%EOF diff --git a/qpdf/qtest/qpdf/good8.out b/qpdf/qtest/qpdf/good8.out new file mode 100644 index 00000000..5087db3f --- /dev/null +++ b/qpdf/qtest/qpdf/good8.out @@ -0,0 +1,5 @@ +/QTest is direct +/QTest is a real number with value 3.14159 +unparse: 3.14159 +unparseResolved: 3.14159 +test 1 done diff --git a/qpdf/qtest/qpdf/good8.pdf b/qpdf/qtest/qpdf/good8.pdf new file mode 100644 index 00000000..f766dba8 --- /dev/null +++ b/qpdf/qtest/qpdf/good8.pdf @@ -0,0 +1,79 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 132 + /Filter /ASCIIHexDecode +>> +stream +42 54 0a 20 20 2f 46 31 20 32 34 20 54 66 0a 20 +20 37 32 20 37 32 30 20 54 64 0a 20 20 28 50 6f +74 61 74 6F 29 20 54 6A 0A 45 540a> +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000518 00000 n +0000000553 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest 3.14159 +>> +startxref +671 +%%EOF diff --git a/qpdf/qtest/qpdf/good8.qdf b/qpdf/qtest/qpdf/good8.qdf new file mode 100644 index 00000000..19c75991 --- /dev/null +++ b/qpdf/qtest/qpdf/good8.qdf @@ -0,0 +1,96 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +trailer << + /QTest 3.14159 + /Root 1 0 R + /Size 8 + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +647 +%%EOF diff --git a/qpdf/qtest/qpdf/good9.out b/qpdf/qtest/qpdf/good9.out new file mode 100644 index 00000000..75c40bc9 --- /dev/null +++ b/qpdf/qtest/qpdf/good9.out @@ -0,0 +1,5 @@ +/QTest is direct +/QTest is a string with value ¡Hola! +unparse: (¡Hola!) +unparseResolved: (¡Hola!) +test 1 done diff --git a/qpdf/qtest/qpdf/good9.pdf b/qpdf/qtest/qpdf/good9.pdf new file mode 100644 index 00000000..881392e0 --- /dev/null +++ b/qpdf/qtest/qpdf/good9.pdf @@ -0,0 +1,81 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R + /QTest (\241Hola!) + /Z ('žyÔãjø׸B^Q\n‹9”\rD|kã¢JZm:½l™\\) +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/good9.qdf b/qpdf/qtest/qpdf/good9.qdf new file mode 100644 index 00000000..c9c3d69b --- /dev/null +++ b/qpdf/qtest/qpdf/good9.qdf @@ -0,0 +1,97 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +trailer << + /QTest (¡Hola!) + /Root 1 0 R + /Size 8 + /Z ('\236yÔ\005\037ãjø׸B^Q\n\2139\224\rD|kã¢JZm:½l\231\002\\) + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] +>> +startxref +647 +%%EOF diff --git a/qpdf/qtest/qpdf/heifer.out b/qpdf/qtest/qpdf/heifer.out new file mode 100644 index 00000000..5a9bb975 --- /dev/null +++ b/qpdf/qtest/qpdf/heifer.out @@ -0,0 +1,4 @@ +WARNING: heifer.pdf: offset 0: file is damaged +WARNING: heifer.pdf: offset 92741: xref not found +WARNING: Attempting to reconstruct cross-reference table +WARNING: heifer.pdf: offset 51: attempting to recover stream length diff --git a/qpdf/qtest/qpdf/heifer.pdf b/qpdf/qtest/qpdf/heifer.pdf Binary files differnew file mode 100644 index 00000000..a3c62422 --- /dev/null +++ b/qpdf/qtest/qpdf/heifer.pdf diff --git a/qpdf/qtest/qpdf/heifer.qdf b/qpdf/qtest/qpdf/heifer.qdf new file mode 100644 index 00000000..0e20c934 --- /dev/null +++ b/qpdf/qtest/qpdf/heifer.qdf @@ -0,0 +1,1349 @@ +%PDF-1.2 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Metadata 3 0 R + /Pages 5 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /CreationDate (D:20020815124312-04'00') + /Creator (Acrobat 4.0 Import Plug-in for Windows) + /ModDate (D:20020815124312-04'00') + /Producer (Acrobat Distiller 5.0.5 \(Windows\)) + /Title (geese_w-anchors.pdf) +>> +endobj + +3 0 obj +<< + /Subtype /XML + /Type /Metadata + /Length 4 0 R +>> +stream +<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d' bytes='992'?><rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'><rdf:Description about='' xmlns='http://ns.adobe.com/pdf/1.3/' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:CreationDate='2002-08-15T16:43:12Z' pdf:ModDate='2002-08-15T16:43:12Z' pdf:Producer='Acrobat Distiller 5.0.5 (Windows)' pdf:Creator='Acrobat 4.0 Import Plug-in for Windows' pdf:Title='geese_w-anchors.pdf'/> +<rdf:Description about='' xmlns='http://ns.adobe.com/xap/1.0/' xmlns:xap='http://ns.adobe.com/xap/1.0/' xap:CreateDate='2002-08-15T16:43:12Z' xap:ModifyDate='2002-08-15T16:43:12Z' xap:MetadataDate='2002-08-15T16:43:12Z'><xap:Title><rdf:Alt><rdf:li xml:lang='x-default'>geese_w-anchors.pdf</rdf:li></rdf:Alt></xap:Title></rdf:Description> +<rdf:Description about='' xmlns='http://purl.org/dc/elements/1.1/' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:title='geese_w-anchors.pdf'/> +</rdf:RDF><?xpacket end='r'?> +endstream +endobj + +4 0 obj +993 +endobj + +5 0 obj +<< + /Count 1 + /Kids [ + 6 0 R + ] + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Type /Pages +>> +endobj + +%% Page 1 +6 0 obj +<< + /Contents 7 0 R + /Parent 5 0 R + /Resources 9 0 R + /Type /Page +>> +endobj + +%% Contents for page 1 +7 0 obj +<< + /Length 8 0 R +>> +stream +q +/RelativeColorimetric ri +1 g +/GS1 gs +1 i +0 792 m +0 792 l +f +q +3.617 790.98 608.383 -787.92 re +W n +q +610.995 0 0 789.113 3.0369 2.5269 cm +/Im1 Do +Q +Q +BT +/F1 1 Tf +16 0 0 16 112.495 255.964 Tm +/Cs5 cs 0.78 0.275 0.157 sc +0 Tc +0 Tw +<01>Tj +/F2 1 Tf +14 0 0 14 164.401 206.964 Tm +0 0 0 sc +0.0003 Tc +[<01>-219.7<02>0<03040506>-24.7<070406>-24.7(\b)0.1<07090a06>-24.7<0b0c0d06>-24.7<0e0a0a0f06>-24.7<0203090a0f06>-24.7<030f06>-24.7<1007111206>-24.7<0f0c130a06>-24.7<0e1006>]TJ +6.7492 -2.889 TD +[<140c1006>-24.7<050b030d06>-24.7<0203040506>-24.7<070406>]TJ +-11.7937 -2.4191 TD +[<0e12030f0206>-24.7<10071106>-24.7<15071006>-24.7<0c0d06>-24.7<030506>-24.7<0e12030f020d06>-24.7<0b07160a06>-24.7<0c0f1706>-24.7<0f071112030d0b130a0f0506>-24.7<05>0.1<0706>-24.7<0c06>-24.7<040c1303081006>-24.7<03>0.1<0f06>-24.7<0f0a0a1718>]TJ +/F3 1 Tf +9.75 0 0 9.75 101.201 106.951 Tm +0 Tc +0.028 Tw +[(Heifer International is a nonpr)30(ofit that alleviates hunger)125(, poverty and envir)30(onmental degradation )]TJ +-1.5183 -1.3026 TD +[(thr)30(ough gifts of food- and income-pr)30(oducing farm animals and training. These animals pr)29.9(ovide a sour)30(ce)]TJ +-0.7968 -1.3026 TD +[(of pr)30(otein, such as eggs and milk, for childr)30(en and generate income for families thr)30(ough the sale of animal )]TJ +0.5957 -1.3026 TD +[(pr)30(oducts. Since 1944, Heifer has helped over 4 million families in 125 countries become self-r)29.9(eliant. Each )]TJ +1.2818 -1.3026 TD +[(family Òpasses on the giftÓ by giving one or mor)30(e of its animalÕ)140(s of)10(fspring to another family in need.)]TJ +/F4 1 Tf +8.1749 -2.1231 TD +0.031 Tw +[(T)80(o)0( learn mor)30(e about Heifer, visit http://www)79.9(.heifer)125(.or)30(g)]TJ +/F5 1 Tf +16 0 0 16 48.2658 742 Tm +/Cs5 cs 0.275 0.275 0.471 sc +0.0002 Tc +0 Tw +( 666)Tj +1.9556 -1.875 TD +( 444)Tj +12 0 0 12 140.128 286.264 Tm +-0.0003 Tc +()Tj +-2.1762 -2.5478 TD +( wwwwwwwwwwwwwwwwwwwwwwwwwwwww )Tj +-4.6179 -1.9108 TD +( wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwww )Tj +7.1656 -3.6623 TD +( 333)Tj +0.0531 -3.4502 TD +( 555)Tj +/F4 1 Tf +9.75 0 0 9.75 117.723 24.2689 Tm +/Cs5 cs 0 0 0 sc +0 Tc +0.031 Tw +(To learn more about the gift you've been given, visit http://www.heifer.org/gift )Tj +ET +q +375 0 0 375 121 317 cm +/Im2 Do +Q +Q +endstream +endobj + +8 0 obj +2338 +endobj + +9 0 obj +<< + /ColorSpace << + /Cs5 10 0 R + >> + /ExtGState << + /GS1 11 0 R + >> + /Font << + /F1 12 0 R + /F2 13 0 R + /F3 14 0 R + /F4 15 0 R + /F5 16 0 R + >> + /ProcSet [ + /PDF + /Text + /ImageC + ] + /XObject << + /Im1 17 0 R + /Im2 19 0 R + >> +>> +endobj + +10 0 obj +[ + /CalRGB + << + /Gamma [ + 2.22222 + 2.22222 + 2.22222 + ] + /Matrix [ + 0.4124 + 0.2126 + 0.0193 + 0.3576 + 0.7152 + 0.1192 + 0.1805 + 0.0722 + 0.9505 + ] + /WhitePoint [ + 0.9505 + 1 + 1.089 + ] + >> +] +endobj + +11 0 obj +<< + /SA false + /SM 0.02 + /TR /Identity + /Type /ExtGState +>> +endobj + +12 0 obj +<< + /BaseFont /KPPLPG+Times-Bold+2 + /Encoding 21 0 R + /FirstChar 1 + /FontDescriptor 22 0 R + /LastChar 1 + /Subtype /Type1 + /Type /Font + /Widths [ + 250 + ] +>> +endobj + +13 0 obj +<< + /BaseFont /KPPMKC+Palatino-Roman+2 + /Encoding 23 0 R + /FirstChar 1 + /FontDescriptor 24 0 R + /LastChar 24 + /Subtype /Type1 + /Type /Font + /Widths [ + 778 + 556 + 291 + 333 + 326 + 250 + 546 + 291 + 565 + 479 + 582 + 500 + 424 + 553 + 582 + 556 + 603 + 395 + 883 + 946 + 234 + 601 + 611 + 250 + ] +>> +endobj + +14 0 obj +<< + /BaseFont /ItcEras-Book + /Encoding /MacRomanEncoding + /FirstChar 32 + /FontDescriptor 25 0 R + /LastChar 213 + /Subtype /Type1 + /Type /Font + /Widths [ + 282 + 214 + 333 + 565 + 565 + 830 + 669 + 195 + 283 + 283 + 518 + 565 + 282 + 243 + 282 + 401 + 565 + 565 + 565 + 565 + 565 + 565 + 565 + 565 + 565 + 565 + 282 + 282 + 565 + 565 + 565 + 453 + 768 + 582 + 569 + 616 + 720 + 536 + 512 + 733 + 710 + 219 + 358 + 520 + 447 + 820 + 732 + 788 + 512 + 788 + 526 + 457 + 475 + 695 + 620 + 926 + 553 + 497 + 551 + 285 + 282 + 285 + 565 + 500 + 268 + 511 + 570 + 461 + 583 + 514 + 271 + 595 + 584 + 205 + 230 + 440 + 205 + 840 + 584 + 572 + 577 + 574 + 329 + 376 + 292 + 579 + 468 + 816 + 445 + 464 + 424 + 287 + 282 + 287 + 565 + 0 + 582 + 582 + 616 + 536 + 732 + 788 + 695 + 511 + 511 + 511 + 511 + 511 + 511 + 461 + 514 + 514 + 514 + 514 + 205 + 205 + 205 + 205 + 584 + 572 + 572 + 572 + 572 + 572 + 579 + 579 + 579 + 579 + 518 + 430 + 565 + 565 + 518 + 565 + 504 + 545 + 768 + 768 + 830 + 268 + 334 + 0 + 795 + 788 + 0 + 565 + 0 + 0 + 565 + 579 + 0 + 0 + 0 + 0 + 0 + 360 + 360 + 0 + 820 + 572 + 453 + 214 + 565 + 0 + 565 + 0 + 0 + 398 + 398 + 1000 + 282 + 582 + 582 + 788 + 1020 + 934 + 500 + 1000 + 333 + 333 + 195 + 195 + ] +>> +endobj + +15 0 obj +<< + /BaseFont /ItcEras-Demi + /Encoding /WinAnsiEncoding + /FirstChar 32 + /FontDescriptor 26 0 R + /LastChar 121 + /Subtype /Type1 + /Type /Font + /Widths [ + 316 + 316 + 389 + 633 + 633 + 883 + 728 + 212 + 351 + 351 + 568 + 633 + 316 + 261 + 316 + 412 + 633 + 633 + 633 + 633 + 633 + 633 + 633 + 633 + 633 + 633 + 316 + 316 + 633 + 633 + 633 + 494 + 824 + 695 + 651 + 649 + 752 + 616 + 574 + 759 + 778 + 296 + 448 + 666 + 531 + 880 + 792 + 835 + 587 + 835 + 630 + 525 + 555 + 752 + 695 + 1073 + 628 + 584 + 619 + 351 + 316 + 351 + 633 + 500 + 339 + 568 + 621 + 489 + 635 + 561 + 352 + 639 + 644 + 272 + 312 + 550 + 272 + 896 + 644 + 618 + 626 + 629 + 389 + 446 + 373 + 629 + 543 + 874 + 560 + 543 + ] +>> +endobj + +16 0 obj +<< + /BaseFont /Courier + /Encoding /WinAnsiEncoding + /FirstChar 0 + /FontDescriptor 27 0 R + /LastChar 255 + /Subtype /Type1 + /Type /Font + /Widths [ + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + 600 + ] +>> +endobj + +17 0 obj +<< + /BitsPerComponent 8 + /ColorSpace 10 0 R + /Filter /DCTDecode + /Height 790 + /Intent /RelativeColorimetric + /Subtype /Image + /Type /XObject + /Width 611 + /Length 18 0 R +>> +stream +ÿØÿî + + + +
ÿÀ + + +„”EF¤´VÓU(òãóÄÔäôeu…•¥µÅÕåõfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêú +&6E'dtU7ò£³Ã()Óã󄔤´ÄÔäôeu…•¥µÅÕåõFVfv†–¦¶ÆÖæöGWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúÿÚ +Ó~¸«±Wb®Å]Š»v*ìUØ«±Wb®ÅVÆüÐ7µìz⫱Wb®Å]Š´@"‡¡Å[Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÝñWbª²É,\¤^. R>F•ÈD¥_$‡aWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅZR§pkŠ·Š»v*ìUØ«±Wb®Å]Š¸N*ÕWøââ®Å]Š»v*ìUØ«±WöÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*î¹UØHWaWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅZU +Žƒov*ìUØ«±Wb®Å]Š»v*ìUØ«»ÿ +÷Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅV’=öÅWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®®*êUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÐP #¾*Þ*ìUتР+…Oߊ¶U„W±ëŠ®$
Î*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å\qWb®Å]Š»v*±Wb®Å]Š»v*ìUØ«±Wb®Å]‚•£…Zb¢•4®Ã]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*Õßov*êo\UØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb«YAÁê1W"ñ@µ;œUv*ìUØ«±V»ôÛov*ìUØ«±Wb®Å]Š»v*ìUØ«±U¡TTŽýqUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»q½™» +Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®®ôÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»Býv‹QÈËND +Ç‘N +¡GAŠ·Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅZR{ŠbøŠŸ£Ü`VÚ´ØT⮩ñuöÂâ®ÅV…¡&§|UÌái^øªá°Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*´- ð8ªìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¸Šâ®Å]Š¨ÃwÏ*DáÚá(²Ô
CôiZ¹$8׶*·zÓµ:↴튷Š»v* pn$WŒT/§%wb~ÖÝ€ÅUñWb®Å]Š»Zå +»v*ìUJxRdàßf Ÿ£|‰¡Tb+²JìUØ«±Wb®Å]Š´¦¢´¦*Þ*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅZÞ¿«ov*ìUØ«±Wb®Å]Š»pÅ]Š»v*ìUØ«±Wb®ïŠ¬ô×Ôõ;ÓÑ×_Š»v*ìUØ««Š»pÅ]Š»v*ìU¡ZœU¼UØ«±Wb®Å]Š»v*ìUØ«±WbmŠ-¨ÜËn!tS*¬Ÿê·ÃúÎS’e²"ѹsªáºn<qUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅZn]±VñWb®Å]Š»v*ìUØ«±Wb®Å]Š»q +ӹ銮Å]Š»ZXLUΤ© +¹*¶Ä*ì*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅTæ…&…¢UQ‡MËn(’(Ö8Å +=†*¿v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WtÅZ +ÔnLU±^ø«±Wb®Å]Š»v*ìUØ«±Wb®ÅZV®*Þ*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUdlç—%¥
zÔxâ«ñWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±W\UØ«±Wb®Å]Š»v*ìUت×jPPší¶*à +»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*±}Q^T;íAM¾óŠ¯Å]Š»[U);žƒåŠ®Å]Š¸€zâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WbªIsÊñ+ƒ"}¤î>Œˆ’ªáV•TtÂâ®Å]Š»v*ÖÜý銷Š»v*ê +×¾*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb«A¨þ¸ªìUØ«ºâ®Å]Š»k¿Ïov*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«\¾*bâ®Å]Šå¹;wÅWb®ëÓv*ìUØ«±Wb®Å]Š»v*¤ÑBÎ%(§Ùjn1U\UØ«±Wb®Å]Š»ukßv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÓØWov*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*×*-N*Þ*ìUØ«±WUØ«±Wb®Å]Š¸â®Å]Š»v*ìUØ«±Wb®Å]ŠµÆ;õÅ[Å]Š»v*ìUØ«±Wb«JÕ)ø⫱Wb®Å]Š»Zî‹ND +|N*»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«‰ ®*ìUØ«±Wb®Å]Š»Y$jåkÑ,U~õöÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb«TMMA;Uv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUتÞË—zR¾ØªìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]ŠµŠ·Š»u:ûâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«Jj:SÛov*ìUتÊý5ü0*ü*ìUØ«±Wb®Å]Š»v*ìUØ«±U‹êónTáû$uúr*¿$®Å]Š»v*±Ä„¯Eý¯U~*ìUØ«±Wb®ÅZ&¾ìU¼UØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUg3êq§ÃJ×_Š»v*ìUØ«±Wb®Å]Š»v*ìU¥$ö¦*Þ*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«F½¶Å[Å]Š¸ì1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*â*)Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±V'~Ø«x«±Wb®ÅV»*)cÐnqW+ƒÐ⫱Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUت›»+ [‘¡§aâqULUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUhêkóÅWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUتÖPÊAèqUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUتÕUU +µcAÜâŠÆ*Þ*ìUØ«±Wb®5튻v*ìUØ«±Wb®Å]Š»v*Õ +…OË^1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«¶Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb +šŸ¼â«À¦*ìUØ«¨+^ø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÀªõŸPpcïZÖ™WÉ«±Wb®Å\kÛv*ìUØ«±Wb®Å]Š»v*ኻv*ìUhåÈ’vì1UØ«±WuÅ]Š»hˆŠbâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±¥RœÊ8zb¿ä?Éï•IUrÕSne‡8oʽ~ŒUSv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»» +»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±V‰s¶*µ%‰‰U`Jý LU}:{b®Å]Š»v*ìUØ«±Wb®ñÅ]Š»v*ìUØ«±W`]…]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅZ«x«©½qWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*Õ~*SéÅ[ÅZ•÷Å[Å]Š»h×ov*ìUÀÓv*ìUØ«±Wb®‚˜«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«Kã㊶MqWb®Å]Š»v*ìUØ«{b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š´¼»â⮨8«±Wb®Å]Š»i–«LU¼UØ«±Wb®Å]Š»w¶*ìUØ«±Wb®¸«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»P–Ýžd“Õ‘D{úh@V?åm_ÇWÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®éŠ»v*ìUØ«±Wb®Å]Š»k~^ÝñW¸Å[Å]Š»v*ìUØ«±Wb®Å]Š»v*§ ˜ÇûàïP¦£ñÅU1Wb«j\?B;øâ«ñU[«{»t¸ùÅ'Ùa÷bªØ«±Wb2ÕiŠ·óÅ]Š»v*ìUØ«±Wb®Å]Š´9TøvÅ[Å]Š»iZ¸«Jªµ ¥w8ªìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ë¸Å]Š»v*ìU ÛÓ¦*Þ*ìUØ«±Wb®Å]Nþ«±Wb®Å]Š»v*ìUØ«±Wb®ÅVs_áׄÒü(v*êb®Å]Š»v*ìUªÕj7ðÅ[Å]Š»v*ìUØ«±Wb®Å]Š¬Ž4"…QÑFÃ_Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±V늷Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WSv*ìUKêð¾×¯.ƒ¯Ž + µ\(v*ìUØ«±WQ\UØ«±Wb®Å]Š»v*ìUØ«±WtÅ]Š»v*ìUØ«€¦*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±V›¦Ý{b!$EqŠ®Å]Š»v*ìU®#•i¿Ž*Þ*ìUØ«±Wb®Å]Óv*ìUÕü1Wb®ÅVSÐ׶Þ##Äš_Q’mإث±Wb®Å]Š»v*ìUØ«½†*ìUÛ×ÛÃv*ìUØ«±Wb(aÔ×ovø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±U¤Fô§Q㊮Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«Ž*ìUØ«±Wb®Å]Š»u\UØ«±Wb®Å]Š¡l ·yÞ GÖ$õdÛ•’jÓ#›DÓ$Ó±K±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ««^˜«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]ŠµŠ¬šOJ%â_€-Áw&ƒ ÅTìîâÚ9š'€È+éK@ãçBqTF*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®˜«C +»v*ìUØ«±Wb®Å]Š»h×·ÑŠ·Š»i¹Sn¸«x«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb«O.@·sŠ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÛ×ÛÇv*Öü©M¼qVñWb®Å]\UØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUkóÛˆ}ëኮÅ]Š»v*ìUØ«\‡*WU¼UØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb«Qh V´ïŠ®Å]Ói]OLU¼UØ«‡LUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUت’ÛB.à(õ™eÿ +V©5 +nqU\UØ«±Wb®Å]Š»v*ìUØ«±V«ñRŸN*Þ*ìUØ«±Wb®Å]Šä¼¸÷ëLUv*ìUØ«±Wb®Å]Š»v*ìUÞø«±Wb®Å]Š»j›ââ®Å]Š»u1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUتޕ6ûñUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»i–´ö5Å[ÅZ:×ßov*ìUØ«±Wb®Å]Š»v*ìUØ«±Wbª~´~=øý9M*dìUØ«±Wb®ÅZ {ô®*Þ*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š´Â½éŠ·Š»v*ìUØ«±Wb®8ªÉK +Õ“jÕ|†*Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»i–¸«x«±Wb®Å]Š»v*Ð5®*Þ*ìUØ«±Wb®Å]Š»v*ìUØ«MŠ·Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*µùÓá¥{W[”'ï;xAüqULUØ«±Wb®ÅV…´®çÜ⫱Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ZW ¥M~“Š®Å]Š»qÅ]Š»v*ìUØ«±Wb®Å\1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*íñWb®Å]Š»v*ìU¡ZoŠ·Š»v*ìU¦åQNð+xUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]€v%\M0«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅV¨"µ5ÅWb®Å]Š»v*ìUjÖŸ+튮Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«Ž*ìUØ«±Wb®Å]Š»v*ìUتÄpÕ¥vÛpGëÀ«ð«±Wb®Å]Š»v*ìUØ«±WLUØ«±T£ÍêÍÇ£V/t#+‰fQ½²Æ늻v*ìUØ«±Wb +‘ҾتüUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±U6ç¨èG\U~*ìUØ«±Wb®Å]Š»v*ìUØ«A·#Ãov*ìUØ«±Wb®Å]Š»v*ìUØ«±W€š^j6×\B%…¹FI½ÔÐþ#mH¥l*Öõ銷Š»v*ìUØ«±Wb®Å]Š»v*ÐêqVñWbª~¤}kþ}26´©’Wb®Å]Š +h +Rm[ +»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅVÐ-®É+±V¹)¨ð늷Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š´H§"M*ÈeY¡ISì¸+àqÕS$®Å]Š»v*ìUØ«±Wb®Å]Š»v*Ñ uŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±VºñVñWb®Å]Š»v*ìUتÖ`´¯}±UØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÛâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*Ó("‡¦D‹W +ƒov*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ««½1WUØ«±Wb®ïŠ»v*µ:†]ÁÅWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Šº›×v*ìUØ«±Wb0¯zbâ®Å]Š»pÅ]Š»q6늻v*ìUØ«¼1WSv*¥,Ü:¡=¶ÅUªµÅ[Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUm7&¿F*»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU®ÿ +b«ñWb®Å]Š»v*´¡êø«jO~¸«xªÖ*)SJì1UØ«±Wb®Å]Š»k½qV߉ë×Û]Š©Ì…£*¦‡mþœU1 +ì*Ñ4ë튷Š»v*ìUØ«½ñWb®Å]Š»v*ìUØ«±Wb®Å]Š»¦ø«±Wb{bâ®Å]Š©Ë,Q'9*Ô +± ©4Ž*¨1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅZŠ~ø©O|U½¸íÓÛov*ìUØ«F´ÛowËv*ìU¥Å[Å]Š»v*ìUÛLUØ«±Wb®Å +3ú\WÔåNKNë]ºv®¯?m|7ÀUyÂUØUØ«±Wb®Å]Š»Rç)”©Œ„¢JŠáN¹ª¹%v*ìU¦åÛov*ìUØ«±Wb®Å]Š»v*ìU§ãO‹¦*Þ*ìUØ«±Wb®ÅPšèÿ +´9o_£ov*ìUØ«±Wb®Å\ißv*ìUØ«Mʆ{b¨~Wû§í×õeR®_k'ÿÙ +endstream +endobj + +18 0 obj +18458 +endobj + +19 0 obj +<< + /BitsPerComponent 8 + /ColorSpace 10 0 R + /Filter /DCTDecode + /Height 375 + /Intent /RelativeColorimetric + /Subtype /Image + /Type /XObject + /Width 375 + /Length 20 0 R +>> +stream +ÿØÿî + + + +
ÿÀ + + +„”EF¤´VÓU(òãóÄÔäôeu…•¥µÅÕåõfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêú +&6E'dtU7ò£³Ã()Óã󄔤´ÄÔäôeu…•¥µÅÕåõFVfv†–¦¶ÆÖæöGWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúÿÚ +⮥:ý'll}†*Õ?ÌâÐtû±Zu1M:”¡ÔéOŠiªn6öÅ ë㊸÷Ëu+×æ6Å]M«Š´Gá×犺‡éÅiÀ}Ø«TÅZ¦ÞÕÅ]LU¯£j›ä•Ô5é×hß犼çóÇ^ú§–¼¿Ïטæ4‘m¡e{†Û¨+E§zæ.§%F›°BËÓ¥¿±Ó–+ìÚÊÙ’ÞÞÙg>«D–bÌ# +ÔýŸçæ;ÛÑÊ1Ú«¹•~Ofÿ +¥-Wzb*<3y ‡A®ß1z úæ{ˆ°Œ)k‰¯O–*ò†ü´ó|×ú¢Ã“M%ÉšId0·Ãj¼[í?!˜RÁ##¾Í#ÿ +xíÕzÍÛ‹cÍ–üÓë…•åX¨$d!APÕ>X¨?I¦^ÆCgùëTú¶¥oÕÍÖžn.m”éó-TÇÄŠkcêÆY¸°vaÓ~Ù…9üÚˆ€eGŸõ¼¶î Ò,.¡×Ä1êPAwë´ºlWwj©YŠ=&Œ´–åw?|]J•oƒøý(…~¿Çâžý§ÞCrwPÞzƯsÂÎîZ 4¼Y¸×ß}†fã&€l≺䊧ÜrÅlW·õÅ[ú~œ +¡{ ++ÅfÐs·š æÛ”…“<fØn`jâ
›st׶Ým…[Á’Jmåžó~0%xP‘¨;UœQsRo“µn@Ýèß–—úÿ +<Çíd"AßÏÜ‚_Ë+gIïü»våÃ@ñܨŽ4Z+/îÀ1=i¸¨jó'&qô…BÙW“åÖí!M#\ÓÎú8‰ý'oé˜/d%¿»Ç„|h¿<ž#FˆZ$2z‚+PG†^†Í?ϦpwnØQK-@åzq¹“¯AÊürêÌôaÚ÷æ1Ó5›:¿Ñ„jÂêCÞ£§" +òŸËN£|Äͪ”e@98´ñ"ÉKWó[Puc°ŒŸÛäì)^&•aöNTu“îf4ÐïO¼›çÍrúk{ˆÁèˆ.ãa +²KÁá‘É`†ä¾49vŸQ)Ê‹^|" ÊÏ\Ìq\iÓ ÅZ#3¨ ´tæ£öy +~cZ]áMÎ*×O–+N¯öáZw…0+ºáW~ª×¶wÏïÅZ6=±R4ë߶ÍOÑ…Z4¯Ïð´ÕvÛéÅÑ
ö¥2Ó”ãUšõ©Å\Tb@Uâ{žUåÛ¦U“·FØêËý:s#¬Ž÷qN]nE.ŒŽJÄ|J6¥A4ðÈ”i°JŽjTòU·—é$(>¶ü½KÙT#ª8¥Û¯á˜xtâõr5¯oáîýl‡„Ø%µÊ¤ð–v• +™‹³ gâm©™"$¹¸†É,bòÛê×RÀ eFøþÒ0ä§î9— X¶’)Güü2h¥§ ððÅ/;˜—JD²@…>¬T@Ÿ½ÐÝdF4<~ÆaÇS¸ÛÞÑ,§zø1“ç-Yõ¸5Y¢Ô«L#RK~a‚2ƒÄŠ +þ¼®YdM¬%BüÃ-‡ó)EäßZ´AlÄU‰Èm¯Úå»æéóˆ£ÇãÜ‘—Ÿãñæ²Ïó6O_ý2M¬Ž´(Ä2! <7<¿ÙwÁù“|¶üsXe?Äט<É \êq¼ÚÖa¶õÝÔ„™äp/' G““pèMK&Hšµ9H69ï_¬ý©.§hÚ”÷ó^¬Q]G5Æ›w"ˆfy%b“C$z'Ó®àД;zoŠDŸÁl‰ë}…é‘jºwI§A<aø€#ˆú5Ø;ÔôUù÷ï™`ðÐIÉ4Œ~hycÕXý;¾&¾¤ž’ü +Ž*ôcô1È&Ñ QÊOvjP04Ünù+eKd¹¶‰¡I¥HZáŠ[¬¬Èê§*r?,lU±$îWÅ<RK,1¸imø‰£iyÖœ¾|q°•¬E«4R8GºŠˆ± n *>ý*,‡ñ~;ÓÓñÜ«nTKvõP:ž~<¢Zoßa‚?QIä\ÝÛZÁ$ÓIÂ(©Ì€XÕP +Ô““$ ì„O0h¦Ù.í!VBþ”ß‚ŒW‰Mêj½›L€C7<¶±ú‚éÆcé° Ng Oøde’"ì„ ¤·ÿ +À/2Tôû;â
òbd5¶,°=ÒÑÝÍ$±È¿e£JEàB~9oeœº*´Ð¤‘Ç$Š’IËÓV!Kzc“Ò¾×&ÂÔþ½aÍã7Púˆž¤‹ê%Uí^›bŽ!Þ²çTÓmnb·º¸H¤™]âg4Ž‘z‡á~•®6¦@snMKK’^À±°%]¥J0SŸšïB)ŠñŽö†±¤µ´×+{[ÁžiUÁ û,i¸6Æ׈7§¦Í*CÔo4‘¬©oÓeæ¯Uñ¦*$_êú^šœï®£‡nJ¥ªì¨*‹V51S0ïh“ÔA¨A!²ãßü‚9bòG‰õ‰æBDWk#/:ª#·÷oÁ»7ß„G[˜´9îšÒ+ÔúȨ¿$äV•àX +Ò£@Ù ´\[1@²ÆLˆdŽŽ§’-y:ïÐxâ¶J?éô÷Å(}Bò)o.‰X ^L@©>}ÉÀdÒËcÓõÉ'’dŠ@„ÉqÅcwegÅ @µø›âÈ‚6F9qH›=V{mz‘ZÆYã*© ‘Ûaʼϼ¹¢¹PÜ—2Q¡L¥g.ü#u2*4Ž¤ÐÐR¾ÃvŨ—ÙÞA4'‘ -y+nÊ<0¦$§Všåµ[ggXíšô£Þ¬Cªõ¥·|æÛ +8+M¤ããã„gžÌü3d ¼Ãç&ÕæHîµ G+‚)8¯
_Œòb@«ø׶øÏ<ååA#æúþ>K-üѨÚNaU)o]ášgy
*‚{m•ñʹ–FI…Çæ½wnðê#×øÜq< +Ÿål2G,ÿ +=xÊbãû°›2³NMü2³–c«t1’”ë~hF½[[{ˆ
Å9Jü“Ó†#ñUªÝwí¾Gy,eR¶“E<cQ)VVžè +Ÿ]¢‹Ôø£
»ÕQSʧ Ä
TZVÆÚwFf}žn;ÐÔlŸùTæc2Øžh”»¿¾´×, Q.£€XÉN)N'ö{Ž¹‘“^x>DS‰ƒAy<N#´¯íè–\Zz6?^Êb2ˆy6•¾5¨4ðù£1t™%ÅWN_h€qÐúoæíBÒá·…L +ª2ì¯É*€Õ@5ßÜæ|5¼?ÃÑÔ˜ñ]íº÷[¿¿1‹ô’xãæœJŽŽ%,´j>œ2í;EˆÒØú¯îRYíÙ‘ÖÓÓ••Ü€U£’¡ÔŠu*~ŒF¶#ø~ÖRÓžðŠ{ëgÒmôùaybF˜Ü3siñ.ËBv²_}%–#få¿I.Zá xzqC"ÆÑFµcðü›—ûxN»þÃÀŸx´Lhp¥¤P·DŽ&fHØ°Šž˜‘ˆø»õÂ5¸ÿ +~ mÁÉn>` +GcHÈuK +ÎËÇê·!!–¡h~!ܵrÈkqÙéðe,RîÝ«‹Ëid[‚-®¼y(b¦N+Ö§†Z¼w±ø€Ã†Drn×QŠÌÑ<¶ò´ÆG‘PÇÅQŠþÂ6jq’OͶù(Â`ýÚJœãŽÙ㋘(=Gv“ˆ#jß<6+æˆN¹uW±½žÖ脺»¹2¢¢‰$$hOIYƒ=g¶OÆ„
üÓ
9¸óî·jZÅÚè×>´s\³ÂÊñÄÄm²¯ùÕc”i³ò¹a¹3,ÊV¶÷#e½‘ 7oC(–#ÃÔ£*ªï²¨¦cž{9x€:Z]¤ÛÞ…¹½H^3<ËêK- +7éQÛõäá´o½œ÷“.Ñ`™®žç„ „1®seßèúpÂföXÊ-®ÀF +'+° +þ#·^øm—0•j×·CÌÜ%g{{[(ÞÞ¢‚G’B‘OåP«ý¹Uú›#Jÿ +!'©VF£SðÃG½Ÿ‚;‘I¦L$xítÁeæYaˆrQ±`iñSÛôøgù¿j.=RŽ&º:0$`úóq„Ü·°Ûcà×ðý¨È´0q+š8ªzƒ€Œ+)3öOуÃ%Ÿ‚@úBYëÆÝæ¾’ï$b¤T¯*ü<)Œ5¿Qé^`’"RÍe %fˆ(jÐ)f ŽØ<4ør€CÏo²ÞÜé-œÁŽ)Ib€°Þ€°¦ô0d1‰˜þM&˜}@æÒÖÜN(.%XcBÊ+Åå¦ÄòèÙ!YÈó¥=GËQ2êz…¢HÅ yØÆÅd?b9u¾Õìzáá˜ävYD]«.—,¶"hR%ƒÓõcI¾%ô8×’€½ïÁÊ1ù,L¾umëË +**À÷úpÑèÄbp?SVÓki9¶—÷¬ÜžÚ_OÔIaçASUâÜX{d
Z#‚q4/Ésk©…<=
"¢+-?ÝlÌÔ*ßÈÄŽMçÂÿ +À…â#VÂpÇâ'’EÌðÇ™óü}¨ÿ +Õ~~=pVìøöCëZšÃ®é¬-âr-d
Ry#«Ž<@<výžUñÊÎÒgÜ>*^{ßÉ«)MµìNìǯ6h‰ +=ÈK+Ù^,Ö³™–DwXàk¥˜€68mÓî˶·_‹
ÏÞ…Ô¼¥i:ÜO0E"’<¬$Uè{rcZq¯^žøÕ2–ó(M#Ê
w1‰XâážCNM]ö¯!ôãv±À +ilâ”<Ò\͇GŒJ –)((LÄ:îzm¾_ÊE§ù
"’æÑgŒž&[ɨjGÂß÷n?NPÁÐ/·ò½•„Ô])eµ˜°õÙ„ñ©~›•ùk¶ F÷gF<‚2×Ë6r#Ëk*]Bü„ dxÅ +@Ä4ÿ +ü[.݀ɜ‘™ŒrKN“e$×M×½D|Ùäh@£ò‹à‹#r^ûwn‚ÉÄ`6I]£Gæ}:Þk3uss`ò3ÚÈÅm®cVQÁĵ47qð2õ^ØŒµÉ—$Q*Ó&wjSR[?^Uá,±•‰f@A<㣞ü +øâs2ü½Š–íiÉw¦I!†â#¸q$è$šUÇðòt4#í0ëÜo¼û™ÇŠÝKHÐuq!Ô£Žà:ݬb 8“º°‘J“]Îÿ +Ú¾9 +-¶)³6œ²‚–à)ƒ
É¡7ø°€Pgt—±˜Â[ÙC;Üʤ¯ÅØ× +íË&#¹E¢-¬î?zd•ž¦Š*E6§l”Açh4żçæhôMBÚ(¸´âfÕâe’o« +~¯úJ(¦æEjž±J·FË8Å¢Ó¸ò{e·½›î"RæßUÃ@ìÃ~·0.í”H)6¿Yµ.ÝP4ê”T°+@”tßí}9Xr =ÞŒó%ßøS†PìÖñ¤ˆÌœc•%ø ê „ýôÊuTq”éèe,bà"½Cl7÷횧d·â-Ä¡¨5»S¸«_2%®¢²ÊÍn×-Å&åÀ-*+ÉOW;ïÔf_Û<Î3ê»f¼Ú¦Š$µŽãP*þŒGx¸nÊÈ8—ïû9e’2”Aˆ-ÛÍæ:Ék ‰ÈZ2‡ŽB´‘I¡Û½7ÀÕ¢6¶y
ä¿Vš6Hs4¬`õVJ•ëÓ$2lìxUžîÝ%lH`6©®Äáñ86·M; oåš³úvòª—‹aEVˆ•r;6Ƙ™ß0±ŽÜ÷PKc®ÏªÙÝú¶wpÒK7 ¦s§/zõÈ™uê‘ +%[S‡KÕ>«ªÚÆ‘êö©‘H3|>›²rMzøtœˆ8¯qÍtÐCªZÖþÂ5¼‘8HÜy¨?²Uä¥_o‰ÞËÃK´»1Y™êåoQ#hä—KʨÅ4¢ +0ÿ +{W “TBem£Þ²úqDJò,[¸íÐ{a'f
ÚÓÊws02(UUûLEzצ]O90–@o(:3s‘xžÃ-ŽŠG™`s„Â-Z Ø×~´9|4q
rÌ‹‹G³ŒÕWmë°¡lpD0–BUÒÊÝ:-Ë,‰’¯£Ú€ŸC“¤.TŒŸ†;!µXÕi¶Ûví„+„q”'[ôÓu®ÇîÆÖœa¨öü0q'… ó2jÞ¼P¾ŠÖ4ŒÑ…¬ÜØìõ)N™ƒ¬É G s4¸ÁÃÔœÅ<ìO¨Îß¼šB¼¤”…¥¶ +’C|ªq°ˆÆ…]Øݽâ!AfÒ1»—Òô Up´ŽH,ìO£søå93Œ{–x0™šPòø‚ÇR³Ó4Ç h‘·©!DP‘URß¾aèòŸÌF7·_}9Z¼CÀ”Œhô÷_OØÈì,õK{«énõ'½‚æa%•©Š(ÖÚ €zJè9IV«rc\è#É.†R +eíJt¹-˜L“ÕZ=Ìžc0ɧZ\ÜÚ.шGK
fr‘°ÿ +†RhHʼn„zΩ<émkhÓÞ?ºEgrHÜðZ±³ã=Û/"þcjDÑi†Ö ¡¹]N"/^áEYv>1 g +ºåÇæD#›§Ž" +:R™°Ðå90ƒÕ×ë±Yˆè˜ZØÞ[ZÚ¤ºŒ—ˆ³ÜÈ ™EÙ +‘]ý²')™ØÖì„ +žeˆjžù«Ï‚Tg·»ð\ìÆR†þô—L‹ÌVúµ‘Ô `·uzL@T5¤htø€ý³V4&Gú~EÚËY â—ܶóø—¡Zù¾&¢N„?íØ ææ9âyº éHä·Y†×VÒ.Y`S=¸$Õ]àWÅv#2#!vÕÂG6$R¡Å +aøÔ}¡™\$IÇ9@ÈÖÑ4>»ÊŠf…Ô<2‚
~"Gü.l4úfˆÙúÖäÉnc·«Fxä=96ü_v*ú&Þæ壆ÛQ25ÄqEº©ýýË2 Vk•`¾¶ýþØñlÕ +qž.{KùÃî“MŠhÃzÔE,oQ%IߨUwÛc±ä7s0ÂPžãöþ;óFÑDÞŸ¨c?HÍ\r=‘¶mÎûÖ™`6çû”3õr^Rò/îÕ¹)RHmÇ-úøclkdâãHÓ¡ +n'™íʱ““± +†8ʽE–Ic'Ò1ù#KóMÕµõÐX/í¨¢êÙé$°T–·—o°NàõSÓ©Ã’Cd㘉LXׯ⹞×I±|b¶Í.¬òGÆ8ÏÖþ¤Ì
7g1òñ¦h'‹ÔD‰'n~Úôå3 +JŠ¸£~6Á§_–‰yW™¾¦.`ž6šK9ŠUÌÓÅhÙfPQuyµážêýJžfI +LAñ5b|3X}E¼L®l zá«m,&HÅš°ªÑW§‡AL°Àsè‹kË–Ú„×*‘£’É'/js 7Å‘Ç)PI4-èšLW—EŒÇpT¼ªÅkÕŒj«øo™’Î1ÃŽh†#9T±5]@Áaq
±hʳ@ÒЖfZòPzwø¸ýžs”Ô唥)Œž‹œóáü[1‚ÃDÕ´M-5kHncU‚êk…ˆæj®×âZõ΋KY0ÀžçžÔñcË0;ÊatðËP8ɘòä®ëLËq€! ßæ2h´é˧}²j—ùÎÝ[Ë—É¡x¦¯P8¸G‡ÂÇNû"wž—Še
z
úí„ ¶“×åAì´© +]•Gòª÷ÊòLÆ$lá#V¯q®yÞ*A5Ì—'hÞúÞs><#WûóQ©×dþOØìph·õ +ü~@G9"?§%!vÍq–éŽ.ð™Al"‚9bv9¢v³…
êBò +ðšôÈHÞÍë~„ÆHk"ðã0_Ò +J’j +råEÜV›ˆc-öéÏö¡ÒîÞ7)qš(÷P¬€Ü +NÝó:yÍYupÅÅ m{äo.,–q¯êvñ„2CMRÃPB«_å'1óqä1²ça†æ‡Ÿ_ÇÉŽ_yâ8g–a£\ÚÉ!ä÷)u#õþ`¼{.aËC0(ßãÞçGYÈ„ÛÉ~lÕ&ÔÖîÏG’òÌFê÷QE)ØuFçå\–‹NqOˆnÃ[š91ð³güÀº· žÒXŸù&FZ{ü@fÔç=Σòñ+¢üÆihQâè +Ôí\„‹9Ê÷y÷æó?0éó ++ÈŸÚ|[n?EFb +% "¥ßŠÒ£Ç +Ênü¡¤G¥Ád. ×Ò’M,gg&Œñðª +:sCh&Ydôô‹Æ’K¦:rN(Y¸‹o—\Œ“mÈåÞõ¿'F”-X…I®]‘kÁO¨ƒ[¢×rzõÍŽ˜©ÄS»`o 4¨EžW©<•!O~ŽùwáŒÎÉæÄ“Eä-A!?¿™âF$+zbhµø{í•jeQaŽ<Wîyg‘5Xôÿ + +úw’¼Ë}Ä™¶‰·Ý7§·ücÞO¼‡2@ezåž™ +Ô®$º›©T>”cäXý'ËYŸry¦ùc@Ó”}ZÊ>u¯«"ú²u¯ÛjŸ»ìLËWözÍÜŽ¿^[[n‘Ç’í_çr¦U(Hžt!“Fâʦ¤A§#
™›«õ~Öç©=ðãÂ!É–\ç"]28|/^Ûá©#2CQM,"W‘ƒŸ…V«CâzÔS#6 Ò`GôÀ®J~-ѧ¾¸Ÿó8±µ) ‚dã,k"ÿ + °Í)ì-´»$’Þ+‰®d)ih-4<èèU€¡QNÃ0õPÉÃ’¢mw“_—‘´±Á£g[‚¼ˆ&êAÔÿ +2%—XÛˆæUãŸ*·Y·'sZåå¦FÃüè³K¯ËÛÕ’6’8æ·–E]¾–¬I§‡ã˜ú¥žwî|Íëwú|±½ ,öàM
”êÀ´-Ghªÿ +ÀÑFyD“àIvR–¼›cšÏ¹Úä[)¶ÖãHÖxAweW¸‚µn+±ö@ïO|¾3¡cŸV…š<º2í1c–Þ+ˆþ(åEpÕ$:•Ø¨?Ç6p1:¬»H‚ŠÔ-ÄÖÄ +FY½Šÿ +r86·¢K§hú¼WW‰g±S,/VVB>!ЀÒֆ£.Œ€—sÄ`x‚O®d±kÔÆK^¡é\“[}Ø)KƒûdK0W,m^…ù{oMÖ"ŸXº“n„ª* ?ðUÈvÎGfyé¯NÀÓl²ÜBóÍqþ8R=Hž6’‚Œƒ(-Ö£‘ú0MØŽì3È[s&òEÈK¹ã5âåŠlJ×íü¿^SÑ
°1²ºš¶µp£@~ +«ý€[u¯à‰ ÒÎ ‹ejËÅI5¨µœÈp›ªôï…Ñ54׹ŵÇs¾ß,mid°E"ñuä+áã4ƒHk™u@¶*ОLÌ´ +?•A\«'z[1ˆ]È¥pó8 +ÅGįµj|i_»&%êdcéL0md*yÕK¨mÏ%í×'-âÓR DìJªUÙ9JœÔПòzý†2Žn|°”Ö9®§Uao(ÿ +±'…~¾KÇGƒÕ€Ôü³kn±£°$ôÀca¹v +¶¨y*•?h¹êrØ‚ãÎc§>ôbªªÐ¹©Éµk©¶v*Ùâ:¾e±‹ÖŸ
OBÄþ¬E!t>º™Ã´*Í"%(¦†œ€©ú2$ŽöB'¹(·TXêÌIZ*<Gq•DŽ®Dè‹‚ä£!UdRh*SÜ|²ØËf©Ác¦éöµ’ÞI\–iiÉÏ#R9éíÓ"1Ħ2Ë)lJ3~½~ycRqVi·^ر+d¯iN§·Ó† +òút,ÌMO€ÓÛrÎ02Ù†yËLk¿(뺡·/tÖí"[(Á#âÍSZé©®Ù“2Ü““„pñ>ò¶QGi¨?Ö==)SU˜¬lÜ•yñ÷sÆ&1Èv²Rë»K;˜ÄR\ýv퇹·B̮Ƥ1 +dÝ*S¸d쎌1ȇԚl‘ÛúêÕÁ\4cP+µ7¦gÂB‚r@îœ +Q÷åÍ$—÷‹a¨Ð‚Eõ@õ<Z•÷Êe1äã‡VË©éÓúÀ&ŸÝÆäªÔƒRÔ¦BsæʧH但^R…”9$@9'¯ûx8øB>)-ŸSŠ5UDnRT¤a~/pTe±Êaàyìë[œz·`цÑn*?ÊÂ<ØÊu´^Gù×ç-5¸t=?ÓKñ,ÈÍY®
X€vŒu^§¶bç<Rò
¸òxpï‘Ý1ü·òg˜,¯^×(å’Í ²€sõKKÀI<ŠÀù$`ê*qƵ‰#ÍèRJñ”;“öO_‹u5ÞŸÇ/œ©œ" D%¬=»õ…ú¨wÐj{o€Ä™Ñ` —éLRHþÊ°¨è_ºÃI~Þ8U¦u®ì1¦*/s +þدb;a¥¢–^ycËz3ßiVwS; Í,ÁÈûAøsåþUr³Œ6 ɿ˶‚XcÒ>¨!Ÿ”‚¾Ñ_ˆZTäYçŸV-ç« h¾aòÏ–¬áßjwpÅumëÉÇêsH"n|˜·9 ¢R‡©í”Oxƒ“$¸ '¦Ì?ÔÌÇÜÎH§‰¹ •NU5ï„–M†,›‘)ÎÇÓcìi÷aä¼ÞÍ¢ÇtåÌoQFZ¿´¨ouÈã#‡šrÄC+°¼[ÀŽKOµË°ãÊ.¿Óíµ)¬nÓ½Êä^‡Ø +uÂQåÿ +¨Ó1!ŠÕ”|4÷ï„@جw·MËãŠòèI?ü2$‚Û+ˆK?3ï™ä
zá{s‘ªÀ=Ó¬ +†”¨ËYÕ&zd®Ñ†ˆI ¥.ý:m–@ØhÉ*ZÞ…mªÇM,°</Ê9à*eøÕÇï·lÆ&ŒyN>HkO)ZÛ78ï®ü\Âv÷ýÞU=OãàÝ-Q—Aøø¢¤Ñ¾?U&c7Bò¨pÂN9c½ÁÝ„sVÄlÕ¶u¸{y*Œ¨¬¯Zü*ÈçÛÃ#ŽUåœ%Èx…ôÄýaÝÄ+fùÐ~9x'¹¦B#“Ó|‚ñþlkþmÕ9Í ŽÑtf%ýÏ ä"¤´‘¼|W—ÙOqƇ«tÌرÜÍeGw,Ƭ6À°‹Q°¤.½,PØ—d.Šñ×á!‚—™YwÊ5·é2N!‘^5en[Šœk·\¼rq¥Í.ÖêЬë@…‚ȧ¥OJe9O¶ì£Hh5ØØ* T¹¯Â6 tܶÃ2ƒ²g€ó¦Œ–ÒIHËu%C•4*Ö»w¦ SÃ!܈6ÊHev «»šÐíA–Šä×Å%3v’8Z¡UWb=÷üp‰)…,[óƒó=|ƒåÅ’Î8®¼Á}ÉtûI”øïgF á}«Ò¹ ζŠ¹äùfo6y¾(í¼Ò׬5ËÉÞâ}I£ŠIMÜ,D"úkð§Ù +¯¦ÛKs{m·¨^XÃP +á‹,›sNmíæñļ”PH
=ÆÛå±ÜyHW4r+q©È +n2MGšá¶(q>ØY:»ï‹XÒ¢Ò§¯†øiTýgfâ´þ<4´çykðŸpR„¶íþj +ì7®G<€°D’“"N’ú¢FŽ^A¹õz%)ðïQ]ó +Û—µS(±º"DfRŒ´äNÍã¹ÜÕ™p‘¡nà Ù8YyPŠ/‰©í—´¸H• `I¨ #¨ÅP—·7@ð¶E’J€:÷Û!"G&Pˆ?R'V3]HSö"…=v!’=ÊdEP=KPDfk‰HEE$©LrHD3Çߢ3I€Y@Q˜bǃ
Žù!šrNËüþÔ òîxšsmõ«Ëh…Š(ef›r*X7¥ö{åY¶ €Ø¾n±ÐëÙêAnæµ¼B¶$ñu'Ó!ÌŸgý–¥)MÍ3ä«o†8’>Ç þ]~^êy÷A½—O[8,&yŒ€íRÑh[vbý=²µœ„A¹9Y´s„x¤(ì{ä𹳎OSÓe‘DËZ±—ÙŒnGC^½FdjÚc-ÈNž49 +Ž+AÆ‘kšö¥¤ÈážÑ€ýè‘Ñ×ýe*Êà³.IÃz°åáÃH(x¼ág;zsÅ<>˜'ˆ«Fá÷ÞÇc”þr$îqÑ6#⩳grüm$´kÎðH”#w‰‚·
þÚì?¸jŽßÙæÖp7ü|{ü–j—êlÚŠ¤Ô`æ¼xµ ]þÏÄ´ÛÇ1óæ¾_Ùøè݃ûÿ +)YZ´5¡¡PîžÇ›¸`¤v¢¯_£®BÒ&‚õYX†'tað²©?«"gMƒzè¡šcÎUdü@ÛÚ²@Ú$@ä¨e†1Á8 u~vcÂJâürd,]€)ã჈6F +0ÂnÙYܬ#â¤s#¿¯YO‡Þ‰¸u‚XЄZqO–HÔC\A‘Ý€ùËT–;gaP[“ü (5ëšÍTŒ;]4DE¯ŸZ†Gõ¡rñNªÀÊ‘µeðß1N{oi3µÖ¦·ˆ!S,Rî®4µNeÃ!Åž Jqo«T5AZ–g4©ß‰Ù‘´K/ôÅ´J’´©€MûÓ,YÆJ‚êðÇ$—çpÕ&€²¢Ð<9{uÁ|Êx.‡à®·šõ¡YšFbK„ôîú2 +ÒÉ$EØ°°Ä%÷Õ™"N¬ÂìI"Z]æMVÞ)ŽK^,£íG\£4€‹~Ÿâ·Z\¤7Í+3p¸£:Tå +A߈¦jˆ¢¶»žÙ,o ôÜ"žQº·F«#
ÁËñÊ3ô´dŽã’Y.´Úm¤¶W³!g(–wD„c>2ÆùèÔ½|2¨úbc_ÙÖ›MJ@þ/¢oc¬6ýt’•·—â^lÃìþÏ_¿%‹!€ç·F¼¸„/zÖ§kª1ÑýZ¥äRÁpÑõ ":3¨ÿ +¨^Á*ž=OL€•¦Ú±Vˆ¿óµ¥–‘u{¦Ç3•bi¥Þ!3U£~A°xµ“èsjÍ3gsÓñÜòë:Ç_•ÝÚ\NªÍr3¼®ÁÁÚDõ6PÍñmÏb0ñîár?Ђ›Ë·©—QÈ–÷ñÞé÷1ÜKÆŽ8U®³òYxší⢇%Æ:w~6l»5düyWédÏ=o¢‰M±!¶ãÇÀ›"©ºüÆN&š¨Ùü{‘¶“ €Í2qH jÄÅqÊŒ/öäüQt=;¨ÝÎñ}hÄÑ¢±ã+´…˜?åðd7+ünâˆm–Í\\Þˆ"eŒI(U*€Ž5Ú¤tíMÿ + "µ÷ßlV˃‡«O«¢ºÄ3±ë^( +4u}¸î9ì;W,¶§bÑCX…¼h¨ãmèjŸ†_”Òbä×cT&5©åàTíÓlËA …¦£(¸ê~_H©¾ÅFçl˜™¶<"“øoYÂËrÒ¼ƒd†Üì‡r8·FznÌÛ
‚÷9#3Ì°ƒ£Ôlb`%’€²DˆÅûîUR0è;ùÌGñÕ²P2a~{ó¼M‘9p»VÙiê4‰´qÒ„W—Ú=†ä3,j8ÇË5
g]žÛœJ#–5õ,i
V‹ûÉ$5–›Ö¼jUEÇɪ™ü~”.£\¤vÖÒH%ô‘þ«4}B$P^¥›âŸËßµf¸²™ëº{ù_z¶^dŽB¤ú¬öPrR±H¦Fø¿¼R÷oÇ ãÛxe$îÿ +Lp‡ ϱ¨“Çs +Wד¹åõ=OÕc’õ¸,ΡݨÈ1€÷'6xòÕdÄE×à&pjŠÀµU¤¹ +îßñÔ&w:”µq*±õ-ýx¨ˆ»»s¶B1îdg¸—Ÿè‰V{£=œrz‹
»2ò£?ÂôRñ! +9=ðr5ÕœÏn¶¿†þ}<”_XÒ¤{·+4Ö‰Qˆ$d_SšŒÛâjüþüDÊrÈ“cñæ†[Ðìà +FGcÓ4f>´eÉøCxþËc(‰.íÜì^âÒ5‘FC +-P™t7øszí¿›d½ŽÎòæCÝÂVxã4ÙË"ñöQ‡¾P3Hÿ +õcÛ+ÚFƒ9“ñx”ºýÍõÚÞM|fÔÈa¶ä V%ZTä +šü]T‘ó̱ +ñ“âTúr‰ÄÇbíqe?±ŸéºÉú±ôçQ‹ÉEvó*öiý‡3A”÷(ŸÓ¢£õ=PEPŠ_:xåÜ{5p£|À‹9BÅhŒî(¿êü¾ü¶9Mµœa7¶¹¶¹‹Õ{–³£˜ácü…M¾&õ¯\²Ä†å; +K¥jwµRœJÅ° x ÂŶ ú¸Q:¬’[i¯}HËë´ŸPLJÇP6äi”Ç7‘BÝ¥j¶–íXïlåŠð©FõWá‘)WcVÚ0 +«1Ù^ù<ãêu&9?æìÉpò„¶ÑL÷׉é…I#‰]qÈzôfÚ£‡ÃßqÓ,ã³³ƒâäêZF¥êYÃ$V¶–ñÛê+S' Ê~ê;o晥äyo÷åQÉ*ß™åûYb?ªŠÒ¼Ÿqc
³Þ¹º¶pÍÅu©™@>¥;#/%45ärg7ÑØèôƒ,O·îü~‹ ò¦‹oi«ÝX»™8;\Þ‘I¹‰E D<OJuÌ\ùL $–MÁ)Âdø¬›\G
åå¹úÍÂ*P$w2PèÁ‹§ÀíE?cö²Þ"wp#‚rwú|öR6:]ž–¶·—r¥ŒóÒÄÇ-£,LŒ$¸ôè¼ØwûL²\{Ý5$j¯õ$BúâKÓ,¯–žš•bãÓ ²3’/®ëZ÷ÌŽTŒkaðC$ÖrBó—¥¹‘£cFUÜqê8©ù“ØbAl…wþ>ÄM„m5èo?ïU¥¢P¬¼¾©àÊWí$€–FNNP¯/Å÷üR»§ƒôµÕ½¿5pªÐ½}PÄ +©×¬¯½º’#uoî0™w±t:ô@ŠF¡<V@Kí¾Ù.&²¨5ûg’²‘)û'Õ&6 ÃÄ”T¨d9•gá“™c_õ(Ë·†&H¸õW¶Š«>íEtˆcÖ‚ŒNøÝnž{Tj•`ån"†ª‹‡n,h~!Б„LÕ$e(Ô|ÒÒCp³\+Ç´”ªð +h ø@&„m2$ógµraúÿ +²\–vCÉ
|GõÌ)@DC³2AâaóƒjZ½åØî,œ²D„31²F¢ ø¸’932èS¯Ëœ’B®—¢\ÜGmœž‘úÀ“êà3‡3G4 #„E>×½{`”€Ü¸i4&Òêw± v‰ôýE¥@u:‚8«ï‘"ù·C`i¨o¦’%$¶‘Q¬{Ö6Eõû°¯ñrûüððµd—AÉÅÜ–qýy¡y^EyVÒJs§ ŒcOŠƒÛ}¶ÙŒr|¿‹Ll%µý5
µÄ +cšèAw0šHùN ˜Ñ·§.b8õ¦@ÈÇ–òM©Þßh—<n´$ßžÛV¦¿ \ÇíÚÊTŠ´ó*In$u…hà©Û•GA€SëMRÝÀ’4RÃfãÜx•Â +SË=g‘_ãqB Ä‘¾û‚>Œ´M®“ko1Ag˜}aÃ0Y;±'cU_€WöFù/DPýhàâ;°ÏÌO<Ø·”5ä¼æ§êßU´`x¼·2 -+·ÚjtÛ +pš†’i"~öæÞh¤ pä«ÉgnÕD_…™·~^9W¾ßw㣚5˜Á»ßmûû뿇©<ïÉ-ŸPkø.ši&´™Ø}IYUÚ'”0©~ª¡{ÐV£/úH¢y l‘#-»Ëà ˜¿Öî-"õŠ £ˆE{8hùxùðeåðu£6Oà?C#T$k¯ãξil+ou[¹‘cÉ7¨„ñ +Êåù?1BHMŸöO|»‰®P1;Ž_»ÿ +ÍžƒÙHo‹–ß,ÅœeaË„£.Ewž<É©è:×=8ຽŸê–ðrÜ“”“Æèÿ +ö5ªÊgo¨|7?&ˆÛ¨WÐáÕ¥/œ÷r»^+Jeh`Š¢8P'ØYïBWâ¼Oc3¹¾öF@r;þ/ÓÜÈnõ“q,³Gõk…„LtÐìepTúHçí*58(]Ë|Mñu³†5M/ªïnôîXPÚ´ŸVI#pHhV¨fýÒ·.5ø£¡¡;ýœ«‹~nÇÀ< KééîC[Á©;#Ã|²ªG¶—1óTä¡„|Uh¼Õ»uíYY"ößîüBéóÜ1ƒQaéZ°ø£Õ•ÃR7›à'àáÈr@rnLjqQÝ««[Yf‚Ùî.
Šä%‹oR¿Hùqv…HíZa‰<Ó<1½×.eõ†½šú8a‰£[‡VôbhX;Y&fAì?kgˆ÷1rË+g—Q‘âŠ;8ˆ’K˜ÉÔñ )ŒqUAðQM;npËíF1é» +n’09šsþ•sJL
ç¡;%—z=ŒVÒK-¡¬AY„ËëÈÄQ"¡ä£ÛÛ$$mªP5·ö¡'&Ú +©37&B®ÒÈ$cýã1û'ímû8RK7ò½ýÃhr;×ÑI}(ÛØ(g5# nY…ž#ÛhrŸ÷[Ïn¯"¿šâ~k'ïe”:ÐenTåÔûü³4 +ÙÔÊ\D”•5]>ÛP€HÓz·S¢Ã:¨¬êÓ*vâõÈe‰!ÈÑÎ"@oišõÛ‡ÓÆ“)’8}QÅŠ™(~Q¸ü
Õ¾ì†,`&Yõr1àîæ{Ò]&Öõež-âŠêEÖöŠL·˜j4j*wNdmJ¯¾_"9žN<éVòÞîH™%mKÌüd –…×cSÑä+FÄmgt,M*ØEÎ14Ï$ˆ¡¤íÇ`€À§ +áEî¾óKžeXªÆ+t+è¡^T/ȨÏþWÑ‘ŸçKbòo˜ol{m6Y`”1Y`^(Ò)¡ Hcuú>ÖFY
Ìx2J6#"m¼‘«Ý^ÁdºuÌw×l‘#Éo"Díê–§ã]ÿ +j>ž\þÄÁ.ô3§ýrë¤C©þí`VnD/"jÃÇè +e?—
äú^Ÿooeq?ïÔ²úJU¤Šwû1C§CN'¾ûÔrpƒ'#b>óä?gÚõ=?BXøZ[Fc1¨A͸pEjGë½wîÇ5'%î^¬F10ûÐ6±ÃëÂí5èø¢’Bc‰š|#w~õ>]ò©d÷·ÀJ÷`~l±–ÏQºiîuycÇkUhôˆå„LjXÿ +–õ8ñGø‚Óâ4Èä‰nö·5ßøûz/oü½¬Ûiš}£/—]ø]ªƒÈÝÌ@wøOîÏÆ¿ü¾TʳiüH’O«ñø·aÙÚóŽB<ã"íof»¶· +ÑßcR +Ç“2qc_‡5uGw¨'éåÞÝÙÝ5Ì/)Â\,VÑŸ³·zðÚ +¿ +õ¯Jû×]I1¥Ã ŒgÄ/âÅ|ͦ=ï›5ëq-œJ’µ‰s*´L:4küì3'«]^¨ƒž@¢á°¾Ô¥kĽ‚Ù§¶”ˆÂ˜èbz™Â/'AÌ«©nÔÂhtp±ÊäAý›'G™Ý.N”–ñ5#W¸<š9¤’Ð’²$cÒçÑ[†Å¨)O‹*ËŠ÷¿Áe@œ•[^ÆÒýbÜÞ[ͨ³Itä%²,Qeô¾)DBAöQ¨y~Öù3†¶ø¢2 sÛ¯»™v®ùŽÚêTÞÕáL%–í/“%‘Ãñn¿f¹)ãƒ3=ãÉ2»¼&ñÌ‘²ªÃ$\•Fsâ=HH‚ðgëºî(B#oÇéc–¶ÁY§y‡R‹LÒ¹[±µŠd‘¤dk‡H!u| +ËÇ“xŸ
4KPI +´£–èQ¾zäg1 +T÷3FÑ<Ð3̶ÄUC8eåÈŸM½>.A}MÀ©Ë8{œc.þÿ +ˆæŒúªñÍ+qતüMF¦Íµ2Q‘‚6-щoºi¤yÇórB+ ½ìDòA%ÃC4³*dx¸d–Œe >ôÊ2i°÷ü}ÎÇlä_¼~¦_cùðéÍÝEíŒq¬õ7ô®Ú:ˆ^9hˆ7ç!gªŽTí˜ß“ŸW.¯#|QÛ‹nø}ÿ +ñy¯ 0D†D^üøƒÉ.†Ìi‚9-=)¤…ÀŽxµys
ëo€u—j
¶2Ã+æÔc\ÿ + +ÌjÍñTmö²GnmÊãVÓ4âòa4Ó†25¼K$1!4‘]—â ÝiN¸8IäÛÇÃÕõÒp¢´D}npy—ñäò(yT÷ÁÄjšFHñ“~ÿ + þÍ"§ìlJQXK!âæ–5ŒGs5ÁswÂIfœ*‰! +þ—ãô|?T §ÂZÑ⻸æ¦_ï^¼!N/ÆF‘¢^NŒ?hrñoÍgˆŠþqûº*ÇúCM[«tÏ«›pnæ’YŒ±’褥THÿ +<6®Æ¾®lLAøø£ÞÛU†Â‚ØÜÉn¬Þ”
eGn%L@ºý¦ø#¯JTÓ¾åLjÄÔ€âýß‹Dˆ®Vi⾬fÖæ!FÇJŒ1Ç’+vçñý•"'—Ûøü{™O„ +'»ûUî &š+xÙȾ¬/̆.7Y@¯×âÜt$œ +âãÓbÞPÌ™^?°i€K`O͉1÷õüròKc°ÓI–hµ&¥
ÂÇ5ôH(³¼¬"×íûýåœGŠ«fóà¡îý¯~ÿ +endstream +endobj + +20 0 obj +45194 +endobj + +21 0 obj +<< + /Differences [ + 1 + /g3 + ] + /Type /Encoding +>> +endobj + +22 0 obj +<< + /Ascent 0 + /CapHeight 0 + /CharSet (/g3) + /Descent 0 + /Flags 4 + /FontBBox [ + 0 + 0 + 0 + 0 + ] + /FontFile3 28 0 R + /FontName /KPPLPG+Times-Bold+2 + /ItalicAngle 0 + /StemV 0 + /Type /FontDescriptor +>> +endobj + +23 0 obj +<< + /Differences [ + 1 + /g36 + /g74 + /g76 + /g73 + /g87 + /g3 + /g82 + /g79 + /g89 + /g72 + /g75 + /g68 + /g86 + /g69 + /g81 + /g92 + /g88 + /g85 + /g80 + /g48 + /g77 + /g83 + /g71 + /g17 + ] + /Type /Encoding +>> +endobj + +24 0 obj +<< + /Ascent 0 + /CapHeight 0 + /CharSet (/g80/g71/g75/g73/g87/g48/g69/g81/g83/g74/g77/g17/g92/g36/g72/g3/g89/g85/g68/g79/g88/g82/g76/g86) + /Descent 0 + /Flags 4 + /FontBBox [ + -32 + -277 + 923 + 777 + ] + /FontFile3 30 0 R + /FontName /KPPMKC+Palatino-Roman+2 + /ItalicAngle 0 + /StemV 0 + /Type /FontDescriptor +>> +endobj + +25 0 obj +<< + /Ascent 667 + /CapHeight 667 + /Descent -219 + /Flags 32 + /FontBBox [ + -177 + -250 + 1141 + 880 + ] + /FontName /ItcEras-Book + /ItalicAngle -2 + /StemH 44 + /StemV 60 + /Type /FontDescriptor + /XHeight 494 +>> +endobj + +26 0 obj +<< + /Ascent 667 + /CapHeight 667 + /Descent -224 + /Flags 262176 + /FontBBox [ + -169 + -250 + 1247 + 909 + ] + /FontName /ItcEras-Demi + /ItalicAngle -2.5 + /StemH 98 + /StemV 140 + /Type /FontDescriptor + /XHeight 497 +>> +endobj + +27 0 obj +<< + /Ascent 629 + /CapHeight 562 + /Descent -157 + /Flags 35 + /FontBBox [ + -28 + -250 + 628 + 805 + ] + /FontFile3 32 0 R + /FontName /Courier + /ItalicAngle 0 + /StemH 51 + /StemV 51 + /Type /FontDescriptor + /XHeight 426 +>> +endobj + +28 0 obj +<< + /Subtype /Type1C + /Length 29 0 R +>> +stream + +endstream +endobj + +%QDF: ignore_newline +29 0 obj +85 +endobj + +30 0 obj +<< + /Subtype /Type1C + /Length 31 0 R +>> +stream + +
"%(+.0369<?BEHXg80g71g75g73g87g48g69g81g83g74g77g17g92g36g72g3g89g85g68g79g88g82g76g86Palatino-Roman+2 +ˆŠªfŽsŒƒŽŒ†‡‘‡‘‰ŠªŠµŠ¶·÷ê÷~üx«D…Ž€Ÿ Àœ²–£™¬ ·¥Â÷=÷ôûúŠ6Š\„Št‰z‡…‡…†ˆƒˆ‚ˆt‰dŠlÕ»‹¡¦¹Š‰ÍªdŒsƒŽƒŒ…‡‘‡‘‰ŠªŠµŠ¶·÷vŒâŒ¹’Œ¢œ’“Ž•¢²ŒªŠZhŠusnŒŒi{cmG],û;ûòûNøt¼pÄnÌŠomŠlkkŒŒil±Š¢‰”‰¾Ûƒ²° {žž…‡žŸ‡¡¤ Ž‘›œ‘¡™¨¡Ó¾‘”–•š˜Ÿ–¢“¥”¤§¨¯„®|ª|§v¤oœ›ok”guu‡„ww„}ƒ‚„FIìŠ×´‹½Å›Œ‹ŽŠŒŠŒŽŠ‰‹‰ˆˆŠ‰‡o}XB‚o³¢Š‰Ž‰Ž‰ˆŒ†uŒdŽR‹SUûm}Šc‰D‰r‡b›…÷ø¤§”ª¤¤…~ ~œx—q—q‘keU~^rgfqgy\vxŽ’yy’{”}–‚”…‰‰–›÷K“¦›¡¤œÛ÷'Ž¬¯Š‰³§Œhy‹‰†‡ŒˆˆŽ‰ŠŽˆ“‰—Š›‘Š¹ŠàƯ¥”š”™™™Ÿ–– ¡‘¤¦£„~Ÿ~˜y‘u|iX9v‰X†;µ©Œ¡¥Š‰«§VŒƒ†ˆ‡Ž‰’‰•ŠšŠ¨µáÏŠ³‰š†¤„ ›šy™s––uqqrr†p2=Š²£Œ—‰ŒŠŠŒŠ‰Œ‰ˆ‡‰ˆ…l|\I‚o° Š‰‘Žˆ‡Ž‡Œ€ŒxŒlŒoqQŠ3Š\‡Šz‰€‡…‰†ˆ‰‡‰‰ˆ…Š„\oɸ¦‹îÙø$Š‰Žˆˆ‡Œ†Œ…kŒPŒPŒQSûAŠ3Š\‡Šz‰€‡…‰†ˆ‰‡‰‰ˆ…Š„\oŸ§°ÏÀŠ‰´§gŒwŒˆŒ†Š‡ŽˆˆŒ‰ŽŠ‡“‰—›’Š¹ŠÝÙŸœ„š‡‰›šˆ›¢žŽ‘ž‘›’¡–¡—Ÿ˜žšž›—”’“”•”™“—”›’›’š‘žŸ¯„ª~©}§v¤mžžlh”bgp‡‚y„hnTX¾•‹“Œ”Œ‹ŠŠŒ‰‰Œ‰‰ˆŠ‰‡€…y„t„t…v†xˆ‰x‰…oÇŠöûœŒ—‘˜•˜š™˜™œ•’”Žž¤¤„~¤£Ÿw˜q˜p’mhe„j}l|lxts||sp„mts•uu•w™z÷PÁø#øAz™x–w’“vvŽuifƒ{ccyovzqyrƒmjtw”x”y—|›€œ€¡‚©ƒhrry{~ƒl…{…‚„“ƒ‘ƒƒ¦‚y~o{cy|ƒ~‡~†‰}}q“rštšt£x«}}¨²„¸Â»•Ÿ¶·Ÿ¬¦¡®Ÿ®—¬¤†¡‚Ÿƒž}šx•”wpf!‰gp|ƒƒ†‘†’‰’“’‘“™˜ œªŠ£¨¥–¤œ£žž˜£—¢’£¤œ‡„žå’“˜˜ž‡”Œk\‰NŠûytŸž¤•«©¥s¡ s–kbb€ovyyur‚ovw‘–z|•}œ‚¡„ †¢¢¯•¨žž÷fü1˜‡•†“…“…‘ƒ€‘€Ž|Œvr„t}s{svxo}nlƒi[g—¢pr£}¨œŽž’–Ž‘ŽŽ˜•¥’‘’Ž‘ŒŒ™©‹»Â«ŠŠ“Œû Úù3€€†~||~–€–˜†šš‰˜‘––––˜šš†˜€–•€~‘||~†€€-þG£¡–žž—ž›œ¡› ™¥”¨™²‘Ëá‰÷”Œ®ŒÊŒ¸Œ±œŒ™Œ”ŒŽ‹ŽŠŽŠŒ‰‰Œ‰ˆ‡Šˆ†kyXEƒo•™‹˜Š“ŠˆŽˆ‰Œˆ„Œ}ŒvŠhvƒû¦~ŠoŠa‰aˆl†y‡x„|‚‚€‚€…‡„‚‰†„ŒŒ€‘iŠ‹ŽŠÞꀅ}{|‘}–€~—™†›š™‘––˜—™›š…š€––€}‘{z}…€€Á¿û¥ˆ“•Š– ”ž•›™˜šœšªžµ÷÷œ¾÷Ô°°™¡”’”˜œŒ¨‰onŠnljŒeŒn¬ˆŸˆˆ‘†‡…‡Š‡Š†‡{|drKpMz_tqQ¨{°y¹kצ~®~³‡š‡–Œ“‘“Žž§‰gfŠedcŒco¢ˆšˆ’‡‘ˆ’ƒ‘™mž`¢RØûUše—k•n~f{hzh€r{ƒ‚‚‚‚„‡†ƒ€‰‚ƒŒ††Œ†Ž‡Ž‡†…~s@•…•‡”‰÷¨÷
Ž§´Š‰Â¬mvŒŽƒ†Ž‡ˆŽŠ”œ•¡¾÷÷±Åû)‘„Š†Š‡ˆˆ‰‰…ˆƒ‰„Št‰gŠj÷2ž¯ˆ¾ˆ¬qz„„Ž„“…–€ t½iÛûcø~ja mI~mûû¨f<v]…uƒ~††…‡…‡…‰Š…{Šqj±®«Š÷øÉ÷
û»ûŠ÷÷»tø<ànzsw…„xwˆwmo’™pp˜v¡|¨z¦„²Šº÷1‰¯®ŽžŒ Ž¢Œ˜Œ–”¯„«}¨~§u¢nœšmj”gmo†€qxƒw€w~x~|‚}{€vm€m‡jf‰Y–cžgŸg¦p®y{³¶Ÿ¡Ÿž‘š’•›•¡™®‚“û£÷Ï¥¢©˜°¬¨s Ÿt–eX‡‹…ƒ‰|oŠ`yŒj‹ZqŒzŒ‚ŒÃ–´¢¦Ê÷À†»÷§Í“»ï¨Ê®“‘–’“’‘™ŸŒ¨‰XlŠ€}lŒ[Šn®ŠŸˆ“‡‰‡…ŒˆŠ†Š……vn{dqH|gˆ„Zû…˜€¥{²}¬P÷)}ª…¡•Ž‘’Ÿ®ŒŒ¨‰ZfŠprdŒUnŸŠ—ŠŠŠ‘ˆ†Ž†‘’|îû}´.€”u˜j¾Š ÷$Ž´¼Š‰Ä§`ŽpŽŽ‡Œ‡‰ˆŠŽŠ‘‰‹˜ŸˆÅ‹² ½µ”ª ž›¡–¤›—‡„••…”“{ŸŽ±¶†’€|}~}ˆ†~€‡„ƒ†…‚z~z~z|z¶Œ©ŒŸ‹ŠŠŒŠ‰Œ‰ˆ‡‰ˆ…l|\I‚o° Š‰’Žˆ‡‡€ŒxŠloqQ‰Š]Š4Šz‰€ˆ„Š†‰ˆˆ‰‡Š‡‰…ŠŠŠvŠfŠo²³‹µ‹‰÷ø”œ”™‘™œž¦¡…€žž˜|“z’zsla†a„a`€m‚x‚†€ƒ€€‚€|ƒx„z‡vug–p¡vu¡ª²ž›Ž‘——’³§Í½‰5«¥Œž¡¡Š‰¦§kŽ‚Œ„Œˆ…‰‰ˆ‘Š—›÷&䩇¥ƒ}¥yŸr™™ql’fquˆ„wpiybpƒ‹€}ŒŠ€„¥„–’š”žŠŒ÷aû“vrvxv~€tv„uux’™~|—…Ÿ£ž“›’˜‘’’‘˜” ”©”¨”¯“µ’Œûûg÷*Ž²Š‰·§Œiy‹‰ƒˆŒˆŠŽˆŠŽ‡“‰—›‘Š¹Šà÷‘Œ×´Œ½Å›Œ‹ŽŠŒŠŒŽŠ‰‹‰ˆˆŠ‰‡n}XB‚o´¢Š‰Ž‰Ž‰ˆŒ†uŒdŽR‹SUû^Š/Š^‡Šz‰€‡…Š†ˆ‰‡‰‰‡†Š„Zo½¶«‹ðø ¨…‡ˆŠŒˆŽ‰Ž‰“‰—›‰’‹¢Š²ŠÏΟŒ®À«ŒŸŒ•Œ‹ŽŽŠŽŠŒ‰‰Œ‰ˆ‡Šˆ†lyXEƒo•™‹˜Š“ŠˆŽˆ‰Œˆ„Œ}ŒuŠjuƒbmŠoŠnŠƒŠƒ‰†ˆ…‡„„‚€~‚‚„€}„|†„{|‰{ux•|z”˜†›†›ˆ§³êŸŒ¯ÂŒ§Œ Œ•Œ‹ŽŽŠŽŠŒ‰‰Œ‰ˆ‡Šˆ†kyXEƒo•™‹˜Š“ŠˆŽˆ‰Œˆ„Œ}ŒuŠjuƒ7‹ŠŠ€‹€€tŽvzy“~•€—|›€„ƒš¢ˆ¥ ›Ž™˜™™“’Ž‘‘‘¥¨£Ÿž›ŠjŠmŠq¤£Œ£ «Š‰µ§Œgz‹‰‹·Â÷”w—w›xx {¥~~¤¬…±º¸–¡³µ¢©©¡²£´•¶»ÍuÃ`¶·aS GAPt]]\]tPBb’fšhŠö÷±¨¤¬™³¨¥ƒ|£¡{Ÿqše›f’^WN~\rmoql{emp•žrpxª~´~´„´³Ç—¸¤©ûgñù3€€†~||~–€–˜†šš‰˜‘––•–‘˜šš†˜€–•~‘|z†€€}û¤‰‡†Œ‚ŽnZ5Š3Š\‡Šx‰€‡„‰Šˆ‡‡‰‰ˆ…Š„\oƶ¥©²Š‰½§Œiy‹‰…ˆŒˆˆŽ‰‰Žˆ“‰—›’Š¹‰à䯌ÁŽÑ€“auV~L„‰o´ Šˆ=¶ËŠ}‰}ˆ}Š‰‹ˆ‰ˆŒŠŒŠˆ™ˆ¥†„¸±†§È»›¬¯±¬±·‰¡‡ž‚››—|’z’o”b•;Ÿ{‘€ƒ‘€‘…’†”‡•ˆ–˜ ” œœ›¢”¨žˆ†™—†—…”„”†‘„…Ž…Ž„„Ž„{t¥Ž°Œ°¯z“u’p‘psŽvjk„}nnvy~u|u…sq{Žz‘|’|“––™ƒ„˜†¥„´‚µ‚¥ƒ˜…˜†”ƒ’’~Ž€}n€rvyzvp‚ju}ŒŒŒŽƒ‘ƒ’ƒ’…”‡–ˆ•ˆ–‰–‰–ŠšžnŠaŠo~|šøì½÷ŽøŠ +endstream +endobj + +%QDF: ignore_newline +31 0 obj +5820 +endobj + +32 0 obj +<< + /Subtype /Type1C + /Length 33 0 R +>> +stream + +( +x +ÑN©äJœÂ
>
Š
士Ý/l¹]©Ãß";½hÆ!hÛ V®#™ë0™þKÒg¢ìN”Â(=£ò(–:QªãVl˜Ïð € Ô ç!!@!a!•!¶!Î!ñ""M"š#Y#Á#Û#ô$$h${$¨$½$Ü%%^%„%·%Ù%ì&I&¼&ú'w'Ó((Û(ù)1)*K+ +÷ødw÷‚÷(ÈÐ÷íøÐ=ü·à¹û«i¦kanmmm©m²³§§¬÷¬÷¸‹w÷;÷¢`øIøÐ- ¢û¸¼û,÷¸+¢û¸½÷ À÷7Áÿ +Öû +È5÷÷RÁ÷¦Áø–÷RÁûN÷PUûPûQU÷QûPÁ÷Pû÷Ž÷I÷=÷ò÷
,AûŽÌ÷qÂ÷÷Ôø_÷qÂûÔT÷÷~÷ø¹ªo©cekpjm¨nµ«®£û#ùàçø0øŒù<\ üý˺vÂøzÂ÷Â÷§Áø„÷¾¹‡ãdÌÆh_§Hwwˆ†y8rg0€9‡lˆ^~+Ÿûa÷@÷M’÷léU‡‚&zû!û +3pÖ£…¹„½½÷¦÷÷·²td ¦X‘NŒN‹Âø¥w÷ÂøÂû?ø¥û{XT÷D¯ü_ûDT‹ÂøoÁíÁ÷¤Áør÷UDû¢÷?÷õẼڨƒ©~£Ìh?§NALpWYDÁÎÓ¨Ä×Ï[;|‡}†}j<DqwûtûDPÂ÷lÂ÷lÁøÁxÀèøl÷.ð=©i“𲧲¨Ù¬‚¤€ŸµsU¯HHPtiV_˜¡ÇÌá²VXYcM ˆT›è¨¨‰„§®‚»mTIJ\.QO[}\¯}sÈÒ…¡èéöÀ÷‹ÂöÂ÷Ç»÷ãÂøxÂ-öéÂ-÷÷;ûûýZ÷¦ ûT÷ø ûÇûiÂ÷‘Â÷:Â÷Â÷ Áøˆ÷?éHáû]\yf÷X÷·ÂûîûŲ‚±ÊÀ‹šîÁLKCNU!MN T€TwÈÍxÎ÷?¸÷Î~Â÷‚Â÷UÃìÁ÷¡ÑRÀôøø~ø£ÄDGN{iX8SP4û*ûU÷NâôóÖÕïèLÜû5\\enŒ÷ºæÜ·ø ²¾™¸Œ‰‹ Œ ø•–‹Š’ôRüUiK(RY¬¼v…™§ˆ¢¾¦Æ³Ì··yg¢–y’rt vø™ÂðÁ÷µÆø‹ø–Åü&ûÁÝ÷µûXü™È~Ã÷pÃ÷fÃóÁdÂ÷ŠÁgÁòø€÷0äN®g™ì®·©ÞÎcèû#>Q#M§a»ròuFc16Ð;÷ò÷Ò×èìC÷ LWaCi3–çî蓨׻\Qòû¤9=pP\+šåí뜵ØÌbE~Ä÷IÃ÷ŒÂ÷ Á÷ÁøŽ÷ÚÔ{âQ¿©j[›[û@7-0Å1÷
Æ˦À¬û7BL0rƒnj‡j„…„WRα²”²÷ +¨é÷ +÷õc¸ûû÷^ø6íÂû[T¹Åü™Ë÷÷ô÷ +ûôÈÃø™‹Âøb¡÷rû^÷`÷÷fûc÷PÔØøÍÂKûD÷‰Ô÷1÷mËÂûPTÉûûBû÷BÖÂû`TÍ÷1ûmèûFû‰JT÷rÂ-÷(÷]÷%û]7T‹Âøb®÷ZºÂ¸÷WøÓø™ÂûWTÐû"û„û$÷„ÑÂûZTÏ÷Eû»û;ûT÷ÂÂû÷;÷A÷»‹ÂøbÂ÷Á÷ÃÂø¢÷mTû6ûÏøøe¿ü/û^Á÷'÷®üücU*ÂùÂ÷ÉÂø~*Âûù÷ÂûIý}û"ùßçø/ø‹ûüùË]wøýË*ÂùÂ÷‚Â÷¹*ù}ûIT÷ýûTøy÷ïø%ø‰øz¹,Ö`¸eíXj.[T.D]֦ѻÃÃÅPÎ^Öqû¾‹øìøìû¾üìXøÐw÷t÷?ø÷Õ?÷,öûÂ`Â÷2Ã÷ÃÅÃ÷ÂÁ|ø¼Â9÷…¦‰§|¦²vY©6GFwsQ™UšªÓ¦Ï¬ˆy¨¥{’hjl’_Z’[û8V4P¼JÄEñ×жÀÂ|7Š÷*¼OYH\:N`´±¦›¡Ÿ™¥°Áº·µ…„µÂ`Â÷åÂ÷ÂöÁ÷èÂ|¼øÀ÷m÷*ûÛ%!RMrz÷ŸûTÞ|ü™8T÷¼Ð{˜µJ÷¼÷ß÷÷T%:C6</Á÷ôáÎà÷¿-:Á÷ñÃÓÂ÷çÂø¨ÎuÂur=Q:û0`÷ÌäÓÝ÷ÄÀ}g¶FÂ÷CT[ª][œQûAFû0û(÷4÷èÒ¬¹ÆÂ`Â÷åÂ÷¾Â÷ëÁ|øÛÂ;øÐûRT÷û_ÉZG›Uû/'û¼ûØû÷&Ò̩Ų|?†÷r¼!FB'ûPãâçÐÝï|÷&FÁ÷<Â÷ÃÊÄ÷óÆø¬¾zÀ_==y\\^‘£eg¢mÁÀ“ø.÷H÷û5û!/ûû +Ðû÷CÜÞ¦¯ÌJ÷jûñÆ“ÆÎ÷÷ª&r‹Â÷ØÂ÷Â÷`Ãø›øùjB“cfûŠ8y‡|‹uxW!TõûØ!TøÂûl÷Ø÷lÂûl¿¹Œ²÷±Â……¯ûVÁ÷CÂ÷µÂa®Â÷ûÁìøÉøÂûÜQ±iH¬;û-;û,*Õ ÷2ÍÖ£¼´û.XmûGI—V€U¿àyÞ÷ÙÃ÷ìø,ÜRû5=J'%?ÏÜæßÉë÷ ¯+T‹Â÷åÂ÷Â÷Á÷¢ÁøÚÂ9÷’ÊvÖûEIf^X÷šûTàü™8T÷pÂ8÷Ž¶ºÈ·ÌÝšYTû|9T‹Â÷ØÂì÷÷šÒTÂèð÷áø§÷Dû÷ˆü§ÂèûAøûcT÷,ûØûDTûUÁøšÂì÷÷ÇÒhÂèðøø§÷Dûèæü¹øXûÍT÷–ü|‹r‡}<xOˆi‚`\’’iƒV€»¸‡¼¦–¢È¨¥»Ý‹Â÷ØÂ÷Â÷Á÷÷lûA÷hôøËÂ-dºbº`³BÏø÷/÷ëÂûlT¹ûDûøûTàü™8T÷÷Oĵô³jÝ<¼MTT‹Âø™Â÷¤Âø‰ÂûBøÐûuT÷>ü™ûCT‹Â÷ØÂ`ÃÎÂ÷2Â÷2ÂÜøìÂW÷š¼¶¼d£–yyŽwXdhgo°}iX_momoܸ T¿üõÂX¼÷¥¨Ÿ£¸ÍŽ?ûÅöÂW÷š•®Ì––‰…”¬t‹fdû±‹Â÷×ÃaÂ÷Á÷¢ÁØøÔÂ9÷”¸°„·m¤œvl˜[FHm]XØÊûSÞû×8T÷pÂ8¸÷“¹µÏ¯È¶Ã~Fû“9TÂ÷ñ¿ÂøÂø¾÷mãR÷"ûTû!û4û#ûí+÷0÷,ëí÷TŠ';BûûLçÜèÔÞ÷÷5ûUûVÂ÷Â÷äÂaÂïÁ÷éÂìøº÷q°ƒ°|ªÜÞcA±>5Og\gìÑûTÞüš8T÷¶Âû-÷dcªÂbæì÷ìí÷ÜTŠû6I9.=ÒôæÌÝ÷ +ÂûV÷]°ó÷ +Á\ÁaÁ÷lÁ[Án¾ÒÉø}÷c¯r¦p ûk÷9tƒ”–ª¯ŸÊ÷:1Á÷%ûKhhŠmnyolk u¡wäŸylƒXjPhžl¤x÷iû7¨uŽ|€†ujÔûRåUû%÷\¥¨Œ ¦‘¬Ÿ¹¨z¨tžÑ‹{—„’É垌ȣX‡|€_Gáû/÷ +|—z›¡±¶£¥÷4û Éœ~Ÿyt÷!¼÷å¼Þ¼÷ã»ø¬÷-HΪ³š½¾½}¼k°ÎÎkªJI«d[šYWVzleIÎkjÐIf]\aW›W«eGHªmÏÍaû†¬¿¼œ©³ÌIe÷$:I5/?ÕêÞÌàóíÏ95øÐw÷ê÷ïøÐ,¡û¸¾÷Õ÷‹w÷*÷î` ø„÷Õ@÷+öûû@÷+õû©øàøCø˜ÙûL÷$÷L÷$z»û†ûT÷†ûTû/»ûM÷$÷M÷$z»û†ûT÷†ûT©ø÷9÷˜ø=ÙûM÷$÷M÷$z»û‡ûT÷‡ûT©ø÷?÷˜øC÷rû‡÷Tz[÷Mû$ûMû$œ[‹Â÷ØÂë÷8ÂõÁ÷“ÑUÁÚìøyø¦÷Eû÷Eü¦ÂÚ øÜûTÚÜûØ#Tƒøüq]x[Yr\z„w‹uuS!TõûØ!T÷žÂ!÷ØõÂ!½À˜Ó¡¢‡†Ÿ‹Â÷ØÂ÷€–÷À÷¤ÁìøæÂ"øÏû%Tæü˜!TÜ…øûìqn‘o1c[EA TöûØ!T÷Â!÷ØõÂ!·¾ŽµÝ¢¡†† ÷qÂÝøGø™÷qÂüGTø +Â÷#w÷¥ÂøMø +Âû÷#Tû#ûT÷ü:Âø:÷MÂ÷Â÷#w÷¥ÂøM÷MÂû÷÷Âû÷#Tû#ûT÷ûûT÷û}Â÷}÷o÷÷€÷ø +÷©ªo©cekpjm¨nµ«®£ùSµ÷Բбø’ùSµû&!n2Rui__3»û÷@oüF²ùíÐýí±ùí÷÷þ÷÷üøt÷½ï;Ü'';:''Û:ïïÛÜïû÷Ž÷M÷>÷÷÷,@ûŽËû÷è÷îøK÷+@ûÌF÷+@ûË÷Õ÷‹wé÷î`øLøÐ+ @ûÌF÷+@ûË©øßøCø—÷rû†÷Tz[÷Mû$ûMû$œ[Ñ÷Tû†÷Tz[÷Lû$ûLû$œ[÷¨÷Ò÷Ò÷pøÛ¹ªo©celpjm§nµ«®£ûdªo©cekpjm¨nµ«®£ûeªp©cekpjm¨nµ«£Â÷ Á÷Âw÷/Á¦Á~ÁðÀÀ Á÷"ÀÝ`- +÷‡½÷¯w÷¨½ø7÷‡½.÷¯û$uYé˜ût.Y÷Âø`Âø—é÷†üATø +ûO~ÂaÃ÷×Â÷Â÷¢ÂxøÑÃ8øûTÞû&¸3g$ûIaºÈ÷°ûTÞü¶Â÷Yt ¬w¼¿Ù£Ë°x@øÍ‹w÷c·m©÷·÷ +ü~Â9÷…¦‰§|¦²vY©6GFwsQ™UšªÓ¦Ï¬ˆy¨¥{’hjl’_Z’[û8V4P¾JÄEñ×жÀÂ~7Š÷*¾OYH\:N`´±¦›¡Ÿ™¥°Áº·µ…„µÂ`Â÷2Ã÷ÃÒ÷ÅÿàÊÞžÁ~€ø¼Â9÷…¦‰§|¦²vY©6GFwsQ™UšªÓ¦Ï¬ˆy¨¥{’hjl’_Z’[û8V4P¾€JÄEñ×жÀÂ~€7Š÷*¾€OYH\:N`´±¦›¡Ÿ™¥°Áº·µ…„µ€x÷Ò÷8ûL÷6ûÂ`Â÷2Ã÷ÃÅÃ÷ÂÁ|øOøû÷&i>÷´'÷ü~Â9÷…¦‰§|¦²vY©6GFwsQ™UšªÓ¦Ï¬ˆy¨¥{’hjl’_Z’[û8V4P¼JÄEñ×жÀÂ|7Š÷*¼OYH\:N`´±¦›¡Ÿ™¥°Áº·µ…„µÂ`Â÷2Ã÷óÆ×ÆÅÃÝÆ×Æ¥Ás@ÀøøÜÁ`¶UU``UU¶`ÁÁ¶¶ÁPvzzvvzœ œœ œzvs@÷qüÜÂ9÷…¦‰§|¦²vY©6GFwsQ™UšªÓ¦Ï¬ˆy¨¥{’hjl’_Z’[û8V4P³@JÄEñ×жÀÂs@7Š÷*³@OYH\:N`´±¦›¡Ÿ™¥°Áº·µ…„µÂ`Â÷2Ã÷ÃÒ¾¿}wÅÃ÷ÂÁ{€øxùY•q‚ocgptœt}€trœoXWeGu¾€šž½¯¡¢zz¤{€y¥¨z¬{€É»¼ÅžÏýÂ9÷…¦‰§|¦²vY©6GFwsQ™UšªÓ¦Ï¬ˆy¨¥{’hjl’_Z’[û8V4P»€JÄEñ×жÀÂ{€7Š÷*»€OYH\:N`´±¦›¡Ÿ™¥°Áº·µ…„µûJ¸÷À÷ñÃÓÂÿ +Ðû÷CÜÞ¦¯ÌJ÷jûñÆ“ÆÎ÷÷ª&rÁ÷<Â÷Ã÷-ÎÊÄ÷óÆøøû(÷3;û)û3´y÷(÷÷&ûâüKzÀ_==y\\^‘£eg¢mÁÀ“ø.÷H÷û5û!/ûû +Ðû÷CÜÞ¦¯ÌJ÷jûñÆ“ÆÎ÷÷ª&rÁ÷<Â÷ÃÒ÷ÊÄÈàÊÞÆÆø¬¾zÀ_==y\\^‘£eg¢mÁÀ“ø.÷H÷û5û!/ûû +Ðû÷CÜÞ¦¯ÌJ÷jûñÆ“ÆÎ÷÷ª&rP÷‘÷8ûL÷6ûÁ÷<Â÷ÃÊÄ÷óÆø^øû÷&i>÷´'äüKzÀ_==y\\^‘£eg¢mÁÀ“ø.÷H÷û5û!/ûû +Ðû÷CÜÞ¦¯ÌJ÷jûñÆ“ÆÎ÷÷ª&r‹Â÷ØÂ÷ªÂøVøâj×ûžû%—l÷ëü~ÂûAøûcT÷,ûØûDT‹Â÷ØÂ÷:Î÷ªÂønøû(÷3;û)û3´y÷(÷÷&ûÕü~ÂûAøûcT÷,ûØûDT‹Â÷ØÂß÷÷8à¨ÂvÞèôøøš÷8ûL÷6û÷êüšÂèûAøûcT÷,ûØûDT‹Â÷ØÂ÷ªÂøMøû÷&i>÷´'×ü~ÂûAøûcT÷,ûØûDT‹Â÷×ÃaÂÒ¾¿}w÷Á÷¢Á×ø‡ùY•q‚ocgptœtÛtrœoXWeGu¾€šž½¯¡¢zz¤×y¥¨z¬×É»¼ÅžØýÂ9÷”·°„·m¤œvl˜[FHm]X×ÊûSÞû×8T÷pÂ8·÷“¹µÏ¯È¶Ã~Fû“9TÂ÷ñ¿ÂøÂøgøâj×ûžû%—lø +û¥ãR÷"ûTû!û4û#ûí+÷0÷,ëí÷TŠ';BûûLçÜèÔÞ÷÷5ûUÂ÷ñÂ÷-οÂøÂøøû(÷3;û)û3´y÷(÷÷&ûôû¥ãR÷"ûTû!û4û#ûí+÷0÷,ëí÷TŠ';BûûLçÜèÔÞ÷÷5ûUÂ÷ñÂÒ÷¿ÂÕàÊÞâÂø¾÷mãR÷"ûTû!û4û#ûí+÷0÷,ëí÷TŠ';BûûLçÜèÔÞ÷÷5ûU4÷Â÷8ûL÷6ûÂ÷ñ¿ÂøÂø^øû÷&i>÷´'öû¥ãR÷"ûTû!û4û#ûí+÷0÷,ëí÷TŠ';BûûLçÜèÔÞ÷÷5ûUÂ÷ñÂÒ¾¿}w¿ÂøÂîø‡ùY•q‚ocgptœtötrœoXWeGu¾€šž½¯¡¢zz¤îy¥¨z¬îÉ»¼ÅžÂü,ãR÷"ûTû!û4û#ûí+÷0÷,ëí÷TŠ';BûûLçÜèÔÞ÷÷5ûUÂ÷ñ¶ÍèÂ\Á÷¯ÁlÂôøùaŸû%ûû)÷bw÷*û0Ûê÷@ûûÞP FF/ˆ]¨|•€É㘶ìÂÂzpµPÁ÷2Uc¦^U˜SûCV5r’pžzÀ[ØÕ…ò·‡¿’¦e„{…AûƒfLTž°[ÆTû>¸t¼¼uÛê÷ÚÄáÁaÂ÷ØÂ÷Á÷¢Áxø^øâj×ûžû%—lø"ü~Â9øûTÞ¸û‡YcW_Kpn‘švm¡„¯¯÷©ûTÞûb—b®psª²‚³²¿‘Ô×xHÁaÂ÷ØÂ÷:Î÷Á÷¢Á|øvøû(÷3;û)û3´y÷(÷÷&û÷ü~Â9øûTÞ¼û‡YcW_Kpn‘švm¡„¯¯÷©ûTÞûb—b®psª²‚³²¿‘Ô×|HÁaÂ÷ØÂß÷÷Á”àÊÞ©Áyø'øš÷8ûL÷6ûyø!üšÂ9ø{ûT¹Þû‡YcW_Kpn‘švm¡„¯¯÷©ûTÞûb—b®psª²‚³²¿‘Ô×yHÁaÂ÷ØÂ÷Á÷¢ÁxøUøû÷&i>÷´'÷ü~Â9øûTÞ¸û‡YcW_Kpn‘švm¡„¯¯÷©ûTÞûb—b®psª²‚³²¿‘Ô×xHûVÂøšÂ ÷Sû&÷’æ÷Gèøgøâj×ûžû%—lø.ûÂûGTÃû:û¿û-÷¿ËÂûSTÎ÷Lûõ*û9ØûT÷’Â6÷¸øšûVÂøšÂß÷ ÷Sû&÷’ûàÊÞŠ÷Gæø0øš÷8ûL÷6ûñø-ûÂûGTÃû:û¿û-÷¿ËÂûSTÎ÷Lûõ*û9éûT÷’Â6÷¸øš‹Â÷ØÂÃÍ÷Á÷Âø†ùaŸû%ûû)÷bw÷*û0Û÷/ü~÷'T/û£÷Ú÷ܾüû$Áä÷•ûØûÛWÂ÷5ÂÂÂ÷4ÂâÃøÁœ÷`Ûû¨ã.÷'Úب¸ÈsºdVHpG'9Åòm÷vŸÂû”–Š––’‹“Œ’÷¦ŸÂû±ê£ÓÌëÑÐqc±CÁ÷UUV®ZVCû--û
pQwTÑz~ŒŒ~W}™øИû+™÷â ûE‹÷€’ð‹ü¯}™øИû+™÷â ûE‹÷€’ð‹ü¯  +Âøì +endstream +endobj + +%QDF: ignore_newline +33 0 obj +19922 +endobj + +xref +0 34 +0000000000 65535 f +0000000025 00000 n +0000000097 00000 n +0000000331 00000 n +0000001413 00000 n +0000001433 00000 n +0000001561 00000 n +0000001673 00000 n +0000004066 00000 n +0000004087 00000 n +0000004374 00000 n +0000004670 00000 n +0000004751 00000 n +0000004936 00000 n +0000005310 00000 n +0000006925 00000 n +0000007829 00000 n +0000010054 00000 n +0000028727 00000 n +0000028750 00000 n +0000074159 00000 n +0000074182 00000 n +0000074258 00000 n +0000074496 00000 n +0000074779 00000 n +0000075122 00000 n +0000075364 00000 n +0000075613 00000 n +0000075867 00000 n +0000076050 00000 n +0000076070 00000 n +0000081988 00000 n +0000082010 00000 n +0000102030 00000 n +trailer << + /Info 2 0 R + /Root 1 0 R + /Size 34 + /ID [<66be986488f3991cf47a7d3b19e355e5><31415926535897932384626433832795>] +>> +startxref +102053 +%%EOF diff --git a/qpdf/qtest/qpdf/hybrid-xref.1.check b/qpdf/qtest/qpdf/hybrid-xref.1.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.1.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/hybrid-xref.10.check b/qpdf/qtest/qpdf/hybrid-xref.10.check new file mode 100644 index 00000000..0e0ed996 --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.10.check @@ -0,0 +1,5 @@ +checking a.pdf +P = -4 +User password = +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/hybrid-xref.11.check b/qpdf/qtest/qpdf/hybrid-xref.11.check new file mode 100644 index 00000000..327d847a --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.11.check @@ -0,0 +1,5 @@ +checking a.pdf +P = -4 +User password = +File is linearized +No errors found diff --git a/qpdf/qtest/qpdf/hybrid-xref.12.check b/qpdf/qtest/qpdf/hybrid-xref.12.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.12.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/hybrid-xref.2.check b/qpdf/qtest/qpdf/hybrid-xref.2.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.2.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/hybrid-xref.3.check b/qpdf/qtest/qpdf/hybrid-xref.3.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.3.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/hybrid-xref.4.check b/qpdf/qtest/qpdf/hybrid-xref.4.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.4.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/hybrid-xref.5.check b/qpdf/qtest/qpdf/hybrid-xref.5.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.5.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/hybrid-xref.6.check b/qpdf/qtest/qpdf/hybrid-xref.6.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.6.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/hybrid-xref.7.check b/qpdf/qtest/qpdf/hybrid-xref.7.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.7.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/hybrid-xref.8.check b/qpdf/qtest/qpdf/hybrid-xref.8.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.8.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/hybrid-xref.9.check b/qpdf/qtest/qpdf/hybrid-xref.9.check new file mode 100644 index 00000000..37ea00cf --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.9.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is linearized +No errors found diff --git a/qpdf/qtest/qpdf/hybrid-xref.pdf b/qpdf/qtest/qpdf/hybrid-xref.pdf new file mode 100644 index 00000000..3ad97078 --- /dev/null +++ b/qpdf/qtest/qpdf/hybrid-xref.pdf @@ -0,0 +1,1538 @@ +%PDF-1.5 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /PageLabels 107 0 R + /Pages 2 0 R + /Type /Catalog + /PageMode /UseOutlines + /Outlines 95 0 R +>> +endobj + +2 0 obj +<< + /Count 30 + /Kids [ + 3 0 R + 4 0 R + 5 0 R + 6 0 R + 7 0 R + 8 0 R + 9 0 R + 10 0 R + 11 0 R + 12 0 R + 13 0 R + 14 0 R + 15 0 R + 16 0 R + 17 0 R + 18 0 R + 19 0 R + 20 0 R + 21 0 R + 22 0 R + 23 0 R + 24 0 R + 25 0 R + 26 0 R + 27 0 R + 28 0 R + 29 0 R + 30 0 R + 31 0 R + 32 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 33 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 2 +4 0 obj +<< + /Contents 37 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 3 +5 0 obj +<< + /Contents 39 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 4 +6 0 obj +<< + /Contents 41 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 5 +7 0 obj +<< + /Contents 43 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 6 +8 0 obj +<< + /Contents 45 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 7 +9 0 obj +<< + /Contents 47 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 8 +10 0 obj +<< + /Contents 49 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 9 +11 0 obj +<< + /Contents 51 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 10 +12 0 obj +<< + /Contents 53 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 11 +13 0 obj +<< + /Contents 55 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 12 +14 0 obj +<< + /Contents 57 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 13 +15 0 obj +<< + /Contents 59 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 14 +16 0 obj +<< + /Contents 61 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 15 +17 0 obj +<< + /Contents 63 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 16 +18 0 obj +<< + /Contents 65 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 17 +19 0 obj +<< + /Contents 67 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 18 +20 0 obj +<< + /Contents 69 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 19 +21 0 obj +<< + /Contents 71 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 20 +22 0 obj +<< + /Contents 73 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 21 +23 0 obj +<< + /Contents 75 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 22 +24 0 obj +<< + /Contents 77 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 23 +25 0 obj +<< + /Contents 79 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 24 +26 0 obj +<< + /Contents 81 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 25 +27 0 obj +<< + /Contents 83 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 26 +28 0 obj +<< + /Contents 85 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 27 +29 0 obj +<< + /Contents 87 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 28 +30 0 obj +<< + /Contents 89 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 29 +31 0 obj +<< + /Contents 91 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Page 30 +32 0 obj +<< + /Contents 93 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 35 0 R + >> + /ProcSet 36 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +33 0 obj +<< + /Length 34 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 0) Tj +ET +endstream +endobj + +34 0 obj +46 +endobj + +35 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +36 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 2 +37 0 obj +<< + /Length 38 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 1) Tj +ET +endstream +endobj + +38 0 obj +46 +endobj + +%% Contents for page 3 +39 0 obj +<< + /Length 40 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 2) Tj +ET +endstream +endobj + +40 0 obj +46 +endobj + +%% Contents for page 4 +41 0 obj +<< + /Length 42 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 3) Tj +ET +endstream +endobj + +42 0 obj +46 +endobj + +%% Contents for page 5 +43 0 obj +<< + /Length 44 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 4) Tj +ET +endstream +endobj + +44 0 obj +46 +endobj + +%% Contents for page 6 +45 0 obj +<< + /Length 46 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 5) Tj +ET +endstream +endobj + +46 0 obj +46 +endobj + +%% Contents for page 7 +47 0 obj +<< + /Length 48 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 6) Tj +ET +endstream +endobj + +48 0 obj +46 +endobj + +%% Contents for page 8 +49 0 obj +<< + /Length 50 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 7) Tj +ET +endstream +endobj + +50 0 obj +46 +endobj + +%% Contents for page 9 +51 0 obj +<< + /Length 52 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 8) Tj +ET +endstream +endobj + +52 0 obj +46 +endobj + +%% Contents for page 10 +53 0 obj +<< + /Length 54 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 9) Tj +ET +endstream +endobj + +54 0 obj +46 +endobj + +%% Contents for page 11 +55 0 obj +<< + /Length 56 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 10) Tj +ET +endstream +endobj + +56 0 obj +47 +endobj + +%% Contents for page 12 +57 0 obj +<< + /Length 58 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 11) Tj +ET +endstream +endobj + +58 0 obj +47 +endobj + +%% Contents for page 13 +59 0 obj +<< + /Length 60 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 12) Tj +ET +endstream +endobj + +60 0 obj +47 +endobj + +%% Contents for page 14 +61 0 obj +<< + /Length 62 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 13) Tj +ET +endstream +endobj + +62 0 obj +47 +endobj + +%% Contents for page 15 +63 0 obj +<< + /Length 64 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 14) Tj +ET +endstream +endobj + +64 0 obj +47 +endobj + +%% Contents for page 16 +65 0 obj +<< + /Length 66 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 15) Tj +ET +endstream +endobj + +66 0 obj +47 +endobj + +%% Contents for page 17 +67 0 obj +<< + /Length 68 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 16) Tj +ET +endstream +endobj + +68 0 obj +47 +endobj + +%% Contents for page 18 +69 0 obj +<< + /Length 70 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 17) Tj +ET +endstream +endobj + +70 0 obj +47 +endobj + +%% Contents for page 19 +71 0 obj +<< + /Length 72 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 18) Tj +ET +endstream +endobj + +72 0 obj +47 +endobj + +%% Contents for page 20 +73 0 obj +<< + /Length 74 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 19) Tj +ET +endstream +endobj + +74 0 obj +47 +endobj + +%% Contents for page 21 +75 0 obj +<< + /Length 76 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 20) Tj +ET +endstream +endobj + +76 0 obj +47 +endobj + +%% Contents for page 22 +77 0 obj +<< + /Length 78 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 21) Tj +ET +endstream +endobj + +78 0 obj +47 +endobj + +%% Contents for page 23 +79 0 obj +<< + /Length 80 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 22) Tj +ET +endstream +endobj + +80 0 obj +47 +endobj + +%% Contents for page 24 +81 0 obj +<< + /Length 82 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 23) Tj +ET +endstream +endobj + +82 0 obj +47 +endobj + +%% Contents for page 25 +83 0 obj +<< + /Length 84 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 24) Tj +ET +endstream +endobj + +84 0 obj +47 +endobj + +%% Contents for page 26 +85 0 obj +<< + /Length 86 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 25) Tj +ET +endstream +endobj + +86 0 obj +47 +endobj + +%% Contents for page 27 +87 0 obj +<< + /Length 88 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 26) Tj +ET +endstream +endobj + +88 0 obj +47 +endobj + +%% Contents for page 28 +89 0 obj +<< + /Length 90 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 27) Tj +ET +endstream +endobj + +90 0 obj +47 +endobj + +%% Contents for page 29 +91 0 obj +<< + /Length 92 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 28) Tj +ET +endstream +endobj + +92 0 obj +47 +endobj + +%% Contents for page 30 +93 0 obj +<< + /Length 94 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 29) Tj +ET +endstream +endobj + +94 0 obj +47 +endobj + +xref +0 110 +0000000095 65535 f +0000000025 00000 n +0000000145 00000 n +0000000541 00000 n +0000000746 00000 n +0000000951 00000 n +0000001156 00000 n +0000001361 00000 n +0000001566 00000 n +0000001771 00000 n +0000001976 00000 n +0000002182 00000 n +0000002389 00000 n +0000002596 00000 n +0000002803 00000 n +0000003010 00000 n +0000003217 00000 n +0000003424 00000 n +0000003631 00000 n +0000003838 00000 n +0000004045 00000 n +0000004252 00000 n +0000004459 00000 n +0000004666 00000 n +0000004873 00000 n +0000005080 00000 n +0000005287 00000 n +0000005494 00000 n +0000005701 00000 n +0000005908 00000 n +0000006115 00000 n +0000006322 00000 n +0000006529 00000 n +0000006748 00000 n +0000006851 00000 n +0000006871 00000 n +0000006990 00000 n +0000007049 00000 n +0000007152 00000 n +0000007195 00000 n +0000007298 00000 n +0000007341 00000 n +0000007444 00000 n +0000007487 00000 n +0000007590 00000 n +0000007633 00000 n +0000007736 00000 n +0000007779 00000 n +0000007882 00000 n +0000007925 00000 n +0000008028 00000 n +0000008071 00000 n +0000008174 00000 n +0000008218 00000 n +0000008321 00000 n +0000008365 00000 n +0000008469 00000 n +0000008513 00000 n +0000008617 00000 n +0000008661 00000 n +0000008765 00000 n +0000008809 00000 n +0000008913 00000 n +0000008957 00000 n +0000009061 00000 n +0000009105 00000 n +0000009209 00000 n +0000009253 00000 n +0000009357 00000 n +0000009401 00000 n +0000009505 00000 n +0000009549 00000 n +0000009653 00000 n +0000009697 00000 n +0000009801 00000 n +0000009845 00000 n +0000009949 00000 n +0000009993 00000 n +0000010097 00000 n +0000010141 00000 n +0000010245 00000 n +0000010289 00000 n +0000010393 00000 n +0000010437 00000 n +0000010541 00000 n +0000010585 00000 n +0000010689 00000 n +0000010733 00000 n +0000010837 00000 n +0000010881 00000 n +0000010985 00000 n +0000011029 00000 n +0000011133 00000 n +0000011177 00000 n +0000011281 00000 n +0000000096 65535 f +0000000097 65535 f +0000000098 65535 f +0000000099 65535 f +0000000100 65535 f +0000000101 65535 f +0000000102 65535 f +0000000103 65535 f +0000000104 65535 f +0000000105 65535 f +0000000106 65535 f +0000000107 65535 f +0000000108 65535 f +0000000109 65535 f +0000000000 65535 f +trailer << + /Root 1 0 R + /Size 110 +>> +startxref +11301 +%%EOF + +108 0 obj +<< + /Type /ObjStm + /N 13 + /First 107 + /Length 2445 +>> +stream +95 0 +96 74 +97 259 +98 393 +99 556 +100 898 +101 1077 +102 1275 +103 1432 +104 1589 +105 1730 +106 1887 +107 2040 +%95 +<< + /Type /Outlines + /First 96 0 R + /Last 97 0 R + /Count 6 +>> +%96 +<< + /Type /Outline + /Title (Isís 1 -> 5: /XYZ null null null) + /Parent 95 0 R + /Count 4 + /Next 97 0 R + /First 98 0 R + /Last 99 0 R + /Dest [ 8 0 R /XYZ null null null ] +>> +% 97 +<< + /Type /Outline + /Title (Trepak 2 -> 15: /XYZ 66 756 3) + /Parent 95 0 R + /Prev 96 0 R + /Dest [ 18 0 R /XYZ 66 756 3 ] +>> +% 98 +<< + /Type /Outline + /Title (Amanda 1.1 -> 11: /Fit) + /Parent 96 0 R + /Next 99 0 R + /First 100 0 R + /Last 101 0 R + /Count -3 + /Dest [ 14 0 R /Fit ] +>> +% 99 +<< + /Type /Outline + % /Title (Sandy (Sandy [Greek]) 1.2 -> 13: /FitH 792) + /Title <feff00530061006e00640079002000f703a303b103bd03b403b900f700200031002e00320020002d003e002000310033003a0020002f00460069007400480020003700390032> + /Parent 96 0 R + /Prev 98 0 R + /First 105 0 R + /Last 106 0 R + /Count 2 + /Dest [ 16 0 R /FitH 792 ] +>> +% 100 +<< + /Type /Outline + /Title (Isosicle 1.1.1 -> 12: /FitV 100) + /Parent 98 0 R + /Next 101 0 R + /First 102 0 R + /Last 103 0 R + /Count -2 + /Dest [ 15 0 R /FitV 100 ] +>> +% 101 +<< + /Type /Outline + /Title (Isosicle 1.1.2 -> 12: /XYZ null null null) + /Parent 98 0 R + /Prev 100 0 R + /First 104 0 R + /Last 104 0 R + /Count 1 + /Dest [ 15 0 R /XYZ null null null ] +>> +% 102 +<< + /Type /Outline + /Title (Isosicle 1.1.1.1 -> 18: /XYZ null null null) + /Parent 100 0 R + /Next 103 0 R + /Dest [ 21 0 R /XYZ null null null ] +>> +% 103 +<< + /Type /Outline + /Title (Isosicle 1.1.1.2 -> 19: /XYZ null null null) + /Parent 100 0 R + /Prev 102 0 R + /Dest [ 22 0 R /XYZ null null null ] +>> +% 104 +<< + /Type /Outline + /Title (Isosicle 1.1.2.1 -> 22: /XYZ null null null) + /Parent 101 0 R + /Dest [ 25 0 R /XYZ null null null ] +>> +% 105 +<< + /Type /Outline + /Title (Trepsichord 1.2.1 -> 1: /FitR 66 714 180 770) + /Parent 99 0 R + /Next 106 0 R + /Dest [ 4 0 R /FitR 66 714 180 770 ] +>> +% 106 +<< + /Type /Outline + /Title (Trepsicle 1.2.2 -> 0: /XYZ null null null) + /Parent 99 0 R + /Prev 105 0 R + /Dest [ 3 0 R /XYZ null null null ] +>> +% 107 + << /Nums [ + 0 << /P () >> + 2 << /S /r /St 1 >> + 7 << /P () >> + 9 << /S /r /St 6 >> + 11 << /P () >> + 12 << /S /D /St 2 >> + 15 << /S /D /St 6 >> + 19 << /P () >> + 20 << /S /D /St 12 >> + 22 << /S /D /St 16059 >> + 23 << /S /r /St 50 >> + 29 << /S /r /St 54 >> + ] >> +endstream +endobj + +109 0 obj +<< + /Type /XRef + /Size 110 + /Index [0 110] + /W [1 2 1] + /Length 440 + /Root 1 0 R +>> +stream + +$ +ó + +endstream +endobj + +xref +0 0 +trailer << + /Size 110 + /Root 1 0 R + /Prev 11301 + /XRefStm 16113 +>> + +startxref +16679 +%%EOF diff --git a/qpdf/qtest/qpdf/inline-images.1.check b/qpdf/qtest/qpdf/inline-images.1.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.1.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/inline-images.10.check b/qpdf/qtest/qpdf/inline-images.10.check new file mode 100644 index 00000000..0e0ed996 --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.10.check @@ -0,0 +1,5 @@ +checking a.pdf +P = -4 +User password = +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/inline-images.11.check b/qpdf/qtest/qpdf/inline-images.11.check new file mode 100644 index 00000000..327d847a --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.11.check @@ -0,0 +1,5 @@ +checking a.pdf +P = -4 +User password = +File is linearized +No errors found diff --git a/qpdf/qtest/qpdf/inline-images.12.check b/qpdf/qtest/qpdf/inline-images.12.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.12.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/inline-images.2.check b/qpdf/qtest/qpdf/inline-images.2.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.2.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/inline-images.3.check b/qpdf/qtest/qpdf/inline-images.3.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.3.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/inline-images.4.check b/qpdf/qtest/qpdf/inline-images.4.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.4.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/inline-images.5.check b/qpdf/qtest/qpdf/inline-images.5.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.5.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/inline-images.6.check b/qpdf/qtest/qpdf/inline-images.6.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.6.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/inline-images.7.check b/qpdf/qtest/qpdf/inline-images.7.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.7.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/inline-images.8.check b/qpdf/qtest/qpdf/inline-images.8.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.8.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/inline-images.9.check b/qpdf/qtest/qpdf/inline-images.9.check new file mode 100644 index 00000000..37ea00cf --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.9.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is linearized +No errors found diff --git a/qpdf/qtest/qpdf/inline-images.pdf b/qpdf/qtest/qpdf/inline-images.pdf Binary files differnew file mode 100644 index 00000000..e9c59e2a --- /dev/null +++ b/qpdf/qtest/qpdf/inline-images.pdf diff --git a/qpdf/qtest/qpdf/lin-delete-and-reuse.pdf b/qpdf/qtest/qpdf/lin-delete-and-reuse.pdf Binary files differnew file mode 100644 index 00000000..a7b20ae2 --- /dev/null +++ b/qpdf/qtest/qpdf/lin-delete-and-reuse.pdf diff --git a/qpdf/qtest/qpdf/lin-special.1.check b/qpdf/qtest/qpdf/lin-special.1.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.1.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/lin-special.10.check b/qpdf/qtest/qpdf/lin-special.10.check new file mode 100644 index 00000000..0e0ed996 --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.10.check @@ -0,0 +1,5 @@ +checking a.pdf +P = -4 +User password = +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/lin-special.11.check b/qpdf/qtest/qpdf/lin-special.11.check new file mode 100644 index 00000000..327d847a --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.11.check @@ -0,0 +1,5 @@ +checking a.pdf +P = -4 +User password = +File is linearized +No errors found diff --git a/qpdf/qtest/qpdf/lin-special.12.check b/qpdf/qtest/qpdf/lin-special.12.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.12.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/lin-special.2.check b/qpdf/qtest/qpdf/lin-special.2.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.2.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/lin-special.3.check b/qpdf/qtest/qpdf/lin-special.3.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.3.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/lin-special.4.check b/qpdf/qtest/qpdf/lin-special.4.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.4.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/lin-special.5.check b/qpdf/qtest/qpdf/lin-special.5.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.5.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/lin-special.6.check b/qpdf/qtest/qpdf/lin-special.6.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.6.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/lin-special.7.check b/qpdf/qtest/qpdf/lin-special.7.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.7.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/lin-special.8.check b/qpdf/qtest/qpdf/lin-special.8.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.8.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/lin-special.9.check b/qpdf/qtest/qpdf/lin-special.9.check new file mode 100644 index 00000000..37ea00cf --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.9.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is linearized +No errors found diff --git a/qpdf/qtest/qpdf/lin-special.disable.exp b/qpdf/qtest/qpdf/lin-special.disable.exp Binary files differnew file mode 100644 index 00000000..4c2173d3 --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.disable.exp diff --git a/qpdf/qtest/qpdf/lin-special.generate.exp b/qpdf/qtest/qpdf/lin-special.generate.exp Binary files differnew file mode 100644 index 00000000..a150957c --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.generate.exp diff --git a/qpdf/qtest/qpdf/lin-special.pdf b/qpdf/qtest/qpdf/lin-special.pdf new file mode 100644 index 00000000..6dcff293 --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.pdf @@ -0,0 +1,354 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +% +% This file exercises several special conditions in the linearization +% and optimization code including various cases of shared resources, +% inherited page attributes, indirect null objects (resolution of +% which is a qpdf feature), null dictionary keys, and indirect scalar +% objects. +% +% The page tree is +% +% (A)--- page 1 +% | +% +---- page 2 +% | +% +---(B)--- page 3 +% | +% +---- page 4 +% | +% +---- page 5 +% +% Node (A) defines /MediaBox (direct) and /Resources (indirect) +% Node (B) overrides /MediaBox +% Page 1 overrides /Resources +% Page 4 overrides /Resources +% Page 5 overrides /MediaBox +% +% Page 5 provides the case of two levels of shadowing on a resource. +% +% The /MediaBox defined in node (B) is shared between pages 3 and 4 +% but not page 1. The /MediaBox defined in node (A) is shared between +% pages 1 and 2 only. +% +% The document catalog has two non-standard keys /Moo and /Quack each +% of which contains (directly or indirectly) an indirect null object. +% +% The /Moo object, which is a dictionary, is shared between the +% document level and page 3 where it appears as a resource. +% + +1 0 obj +<< + /Moo 2 0 R + /Pages 3 0 R + /Quack 26 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Null1 27 0 R + /Null2 null + /One 1 + /Two 28 0 R +>> +endobj + +3 0 obj +<< + /Count 5 + /Kids [ + 4 0 R + 5 0 R + 6 0 R + ] + /MediaBox [ + 0 + 0 + 576 + 792 + ] + /Resources 7 0 R + /Quack 16059 + /Type /Pages +>> +endobj + +%% Page 1 +4 0 obj +<< + /Contents 8 0 R + /Parent 3 0 R + /Resources 10 0 R + /Type /Page +>> +endobj + +%% Page 2 +5 0 obj +<< + /Contents 11 0 R + /Parent 3 0 R + /Type /Page +>> +endobj + +6 0 obj +<< + /Count 3 + /Kids [ + 13 0 R + 14 0 R + 15 0 R + ] + /MediaBox [ + 0 + 0 + 576 + 396 + ] + /Parent 3 0 R + /Type /Pages +>> +endobj + +7 0 obj +<< + /Font << + /F1 16 0 R + >> + /ProcSet 17 0 R +>> +endobj + +%% Contents for page 1 +8 0 obj +<< + /Length 9 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato 1) Tj +ET +endstream +endobj + +9 0 obj +46 +endobj + +10 0 obj +<< + /Font << + /F1 18 0 R + >> + /ProcSet 17 0 R +>> +endobj + +%% Contents for page 2 +11 0 obj +<< + /Length 12 0 R +>> +stream +BT + /F1 24 Tf + 72 322 Td + (Potato 2) Tj +ET +endstream +endobj + +12 0 obj +46 +endobj + +%% Page 3 +13 0 obj +<< + /Contents 19 0 R + /Moo 2 0 R + /Parent 6 0 R + /Type /Page +>> +endobj + +%% Page 4 +14 0 obj +<< + /Contents 21 0 R + /Parent 6 0 R + /Resources << + /Font << + /F1 23 0 R + >> + /ProcSet 17 0 R + >> + /Type /Page +>> +endobj + +%% Page 5 +15 0 obj +<< + /Contents 24 0 R + /MediaBox [ + 0 + 0 + 306 + 396 + ] + /Parent 6 0 R + /Type /Page +>> +endobj + +16 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +17 0 obj +[ + /PDF + /Text +] +endobj + +18 0 obj +<< + /BaseFont /Courier-Oblique + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +%% Contents for page 3 +19 0 obj +<< + /Length 20 0 R +>> +stream +BT + /F1 24 Tf + 72 322 Td + (Potato 3) Tj +ET +endstream +endobj + +20 0 obj +46 +endobj + +%% Contents for page 4 +21 0 obj +<< + /Length 22 0 R +>> +stream +BT + /F1 24 Tf + 72 322 Td + (Potato 4) Tj +ET +endstream +endobj + +22 0 obj +46 +endobj + +23 0 obj +<< + /BaseFont /Times-Bold + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +%% Contents for page 5 +24 0 obj +<< + /Length 25 0 R +>> +stream +BT + /F1 24 Tf + 72 322 Td + (Potato 5) Tj +ET +endstream +endobj + +25 0 obj +46 +endobj + +26 0 obj +null +endobj + +27 0 obj +null +endobj + +28 0 obj +2 +endobj + +xref +0 29 +0000000000 65535 f +0000001161 00000 n +0000001244 00000 n +0000001319 00000 n +0000001501 00000 n +0000001601 00000 n +0000001672 00000 n +0000001829 00000 n +0000001923 00000 n +0000002024 00000 n +0000002043 00000 n +0000002138 00000 n +0000002241 00000 n +0000002271 00000 n +0000002366 00000 n +0000002526 00000 n +0000002644 00000 n +0000002763 00000 n +0000002799 00000 n +0000002947 00000 n +0000003050 00000 n +0000003093 00000 n +0000003196 00000 n +0000003216 00000 n +0000003359 00000 n +0000003462 00000 n +0000003482 00000 n +0000003504 00000 n +0000003526 00000 n +trailer << + /Root 1 0 R + /Size 29 + /ID [<ce9551b56c5a7e3b5b0ba6fa0d281296><a74aa55a69070b600e39f9ed1ed6c4df>] +>> +startxref +3545 +%%EOF diff --git a/qpdf/qtest/qpdf/lin-special.preserve.exp b/qpdf/qtest/qpdf/lin-special.preserve.exp Binary files differnew file mode 100644 index 00000000..4c2173d3 --- /dev/null +++ b/qpdf/qtest/qpdf/lin-special.preserve.exp diff --git a/qpdf/qtest/qpdf/lin0.out b/qpdf/qtest/qpdf/lin0.out new file mode 100644 index 00000000..a6e32e44 --- /dev/null +++ b/qpdf/qtest/qpdf/lin0.out @@ -0,0 +1 @@ +lin0.pdf is not linearized diff --git a/qpdf/qtest/qpdf/lin0.pdf b/qpdf/qtest/qpdf/lin0.pdf new file mode 100644 index 00000000..a7e01f91 --- /dev/null +++ b/qpdf/qtest/qpdf/lin0.pdf @@ -0,0 +1,79 @@ +%PDF-1.3 +1 0 obj +<< + /Type /Catalog + /Pages 2 0 R +>> +endobj + +2 0 obj +<< + /Type /Pages + /Kids [ + 3 0 R + ] + /Count 1 +>> +endobj + +3 0 obj +<< + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] + /Contents 4 0 R + /Resources << + /ProcSet 5 0 R + /Font << + /F1 6 0 R + >> + >> +>> +endobj + +4 0 obj +<< + /Length 44 +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +[ + /PDF + /Text +] +endobj + +6 0 obj +<< + /Type /Font + /Subtype /Type1 + /Name /F1 + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding +>> +endobj + +xref +0 7 +0000000000 65535 f +0000000009 00000 n +0000000063 00000 n +0000000135 00000 n +0000000307 00000 n +0000000403 00000 n +0000000438 00000 n +trailer << + /Size 7 + /Root 1 0 R +>> +startxref +556 +%%EOF diff --git a/qpdf/qtest/qpdf/lin1.out b/qpdf/qtest/qpdf/lin1.out new file mode 100644 index 00000000..d97842bc --- /dev/null +++ b/qpdf/qtest/qpdf/lin1.out @@ -0,0 +1,378 @@ +WARNING: end of first page section (/E) mismatch: /E = 1827; computed = 3889..3891 +WARNING: page 0 has shared identifier entries +WARNING: page 0: shared object 62: in hint table but not computed list +lin1.pdf: linearization data: + +file_size: 13103 +first_page_object: 62 +first_page_end: 1827 +npages: 30 +xref_zero_offset: 11776 +first_page: 0 +H_offset: 1211 +H_length: 203 + +Page Offsets Hint Table + +min_nobjects: 2 +first_page_offset: 1414 +nbits_delta_nobjects: 4 +min_page_length: 259 +nbits_delta_page_length: 12 +min_content_offset: 0 +nbits_delta_content_offset: 0 +min_content_length: 0 +nbits_delta_content_length: 12 +nbits_nshared_objects: 2 +nbits_shared_identifier: 2 +nbits_shared_numerator: 4 +shared_denominator: 8 +Page 0: + nobjects: 16 + length: 2477 + content_offset: 0 + content_length: 2218 + nshared_objects: 2 + identifier 0: 0 + numerator 0: 0 + identifier 1: 0 + numerator 1: 0 +Page 1: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 2: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 3: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 4: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 5: + nobjects: 2 + length: 261 + content_offset: 0 + content_length: 2 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 6: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 7: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 8: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 9: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 10: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 11: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 12: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 13: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 14: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 15: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 16: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 17: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 18: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 19: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 20: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 21: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 22: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 23: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 24: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 25: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 26: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 27: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 28: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 29: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + +Shared Objects Hint Table + +first_shared_obj: 0 +first_shared_offset: 0 +nshared_first_page: 16 +nshared_total: 16 +nbits_nobjects: 0 +min_group_length: 34 +nbits_delta_group_length: 9 +Shared Object 0: + group length: 157 +Shared Object 1: + group length: 105 +Shared Object 2: + group length: 117 +Shared Object 3: + group length: 34 +Shared Object 4: + group length: 82 +Shared Object 5: + group length: 191 +Shared Object 6: + group length: 144 +Shared Object 7: + group length: 168 +Shared Object 8: + group length: 291 +Shared Object 9: + group length: 165 +Shared Object 10: + group length: 162 +Shared Object 11: + group length: 182 +Shared Object 12: + group length: 201 +Shared Object 13: + group length: 150 +Shared Object 14: + group length: 164 +Shared Object 15: + group length: 164 + +Outlines Hint Table + +first_object: 66 +first_object_offset: 1827 +nobjects: 12 +group_length: 2064 diff --git a/qpdf/qtest/qpdf/lin1.pdf b/qpdf/qtest/qpdf/lin1.pdf Binary files differnew file mode 100644 index 00000000..aac12916 --- /dev/null +++ b/qpdf/qtest/qpdf/lin1.pdf diff --git a/qpdf/qtest/qpdf/lin2.out b/qpdf/qtest/qpdf/lin2.out new file mode 100644 index 00000000..4be08814 --- /dev/null +++ b/qpdf/qtest/qpdf/lin2.out @@ -0,0 +1,378 @@ +WARNING: end of first page section (/E) mismatch: /E = 1827; computed = 3889..3891 +WARNING: page 0 has shared identifier entries +WARNING: page 0: shared object 62: in hint table but not computed list +lin2.pdf: linearization data: + +file_size: 13103 +first_page_object: 62 +first_page_end: 1827 +npages: 30 +xref_zero_offset: 11776 +first_page: 0 +H_offset: 1211 +H_length: 203 + +Page Offsets Hint Table + +min_nobjects: 2 +first_page_offset: 1414 +nbits_delta_nobjects: 4 +min_page_length: 259 +nbits_delta_page_length: 12 +min_content_offset: 0 +nbits_delta_content_offset: 0 +min_content_length: 0 +nbits_delta_content_length: 12 +nbits_nshared_objects: 2 +nbits_shared_identifier: 2 +nbits_shared_numerator: 4 +shared_denominator: 8 +Page 0: + nobjects: 16 + length: 2477 + content_offset: 0 + content_length: 2218 + nshared_objects: 2 + identifier 0: 0 + numerator 0: 0 + identifier 1: 0 + numerator 1: 0 +Page 1: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 2: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 3: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 4: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 5: + nobjects: 2 + length: 261 + content_offset: 0 + content_length: 2 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 6: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 7: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 8: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 9: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 10: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 11: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 12: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 13: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 14: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 15: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 16: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 17: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 18: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 19: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 20: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 21: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 22: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 23: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 24: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 25: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 26: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 27: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 28: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 29: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + +Shared Objects Hint Table + +first_shared_obj: 0 +first_shared_offset: 0 +nshared_first_page: 16 +nshared_total: 16 +nbits_nobjects: 0 +min_group_length: 34 +nbits_delta_group_length: 9 +Shared Object 0: + group length: 157 +Shared Object 1: + group length: 105 +Shared Object 2: + group length: 117 +Shared Object 3: + group length: 34 +Shared Object 4: + group length: 82 +Shared Object 5: + group length: 191 +Shared Object 6: + group length: 144 +Shared Object 7: + group length: 168 +Shared Object 8: + group length: 291 +Shared Object 9: + group length: 165 +Shared Object 10: + group length: 162 +Shared Object 11: + group length: 182 +Shared Object 12: + group length: 201 +Shared Object 13: + group length: 150 +Shared Object 14: + group length: 164 +Shared Object 15: + group length: 164 + +Outlines Hint Table + +first_object: 66 +first_object_offset: 1827 +nobjects: 12 +group_length: 2064 diff --git a/qpdf/qtest/qpdf/lin2.pdf b/qpdf/qtest/qpdf/lin2.pdf Binary files differnew file mode 100644 index 00000000..40cb0027 --- /dev/null +++ b/qpdf/qtest/qpdf/lin2.pdf diff --git a/qpdf/qtest/qpdf/lin3.out b/qpdf/qtest/qpdf/lin3.out new file mode 100644 index 00000000..468cfa59 --- /dev/null +++ b/qpdf/qtest/qpdf/lin3.out @@ -0,0 +1,318 @@ +WARNING: end of first page section (/E) mismatch: /E = 3978; computed = 3785..3786 +WARNING: page 1: shared object 107: in computed list but not hint table +WARNING: page 1: shared object 109: in computed list but not hint table +WARNING: page 2: shared object 107: in computed list but not hint table +WARNING: page 2: shared object 109: in computed list but not hint table +WARNING: page 3: shared object 107: in computed list but not hint table +WARNING: page 3: shared object 109: in computed list but not hint table +WARNING: page 4: shared object 107: in computed list but not hint table +WARNING: page 4: shared object 109: in computed list but not hint table +WARNING: page 5: shared object 107: in computed list but not hint table +WARNING: page 5: shared object 109: in computed list but not hint table +WARNING: page 6: shared object 107: in computed list but not hint table +WARNING: page 6: shared object 109: in computed list but not hint table +WARNING: page 7: shared object 107: in computed list but not hint table +WARNING: page 7: shared object 109: in computed list but not hint table +WARNING: page 8: shared object 107: in computed list but not hint table +WARNING: page 8: shared object 109: in computed list but not hint table +WARNING: page 9: shared object 107: in computed list but not hint table +WARNING: page 9: shared object 109: in computed list but not hint table +WARNING: page 10: shared object 107: in computed list but not hint table +WARNING: page 10: shared object 109: in computed list but not hint table +WARNING: page 11: shared object 107: in computed list but not hint table +WARNING: page 11: shared object 109: in computed list but not hint table +WARNING: page 12: shared object 107: in computed list but not hint table +WARNING: page 12: shared object 109: in computed list but not hint table +WARNING: page 13: shared object 107: in computed list but not hint table +WARNING: page 13: shared object 109: in computed list but not hint table +WARNING: page 14: shared object 107: in computed list but not hint table +WARNING: page 14: shared object 109: in computed list but not hint table +WARNING: page 15: shared object 107: in computed list but not hint table +WARNING: page 15: shared object 109: in computed list but not hint table +WARNING: page 16: shared object 107: in computed list but not hint table +WARNING: page 16: shared object 109: in computed list but not hint table +WARNING: page 17: shared object 107: in computed list but not hint table +WARNING: page 17: shared object 109: in computed list but not hint table +WARNING: page 18: shared object 107: in computed list but not hint table +WARNING: page 18: shared object 109: in computed list but not hint table +WARNING: page 19: shared object 107: in computed list but not hint table +WARNING: page 19: shared object 109: in computed list but not hint table +WARNING: page 20: shared object 107: in computed list but not hint table +WARNING: page 20: shared object 109: in computed list but not hint table +WARNING: page 21: shared object 107: in computed list but not hint table +WARNING: page 21: shared object 109: in computed list but not hint table +WARNING: page 22: shared object 107: in computed list but not hint table +WARNING: page 22: shared object 109: in computed list but not hint table +WARNING: page 23: shared object 107: in computed list but not hint table +WARNING: page 23: shared object 109: in computed list but not hint table +WARNING: page 24: shared object 107: in computed list but not hint table +WARNING: page 24: shared object 109: in computed list but not hint table +WARNING: page 25: shared object 107: in computed list but not hint table +WARNING: page 25: shared object 109: in computed list but not hint table +WARNING: page 26: shared object 107: in computed list but not hint table +WARNING: page 26: shared object 109: in computed list but not hint table +WARNING: page 27: shared object 107: in computed list but not hint table +WARNING: page 27: shared object 109: in computed list but not hint table +WARNING: page 28: shared object 107: in computed list but not hint table +WARNING: page 28: shared object 109: in computed list but not hint table +WARNING: page 29: shared object 107: in computed list but not hint table +WARNING: page 29: shared object 109: in computed list but not hint table +WARNING: incorrect offset in outlines table: hint table = 1627; computed = 1547 +WARNING: incorrect length in outlines table: hint table = 1988; computed = 1936 +lin3.pdf: linearization data: + +file_size: 16937 +first_page_object: 93 +first_page_end: 3978 +npages: 30 +xref_zero_offset: 14999 +first_page: 0 +H_offset: 1142 +H_length: 210 + +Page Offsets Hint Table + +min_nobjects: 3 +first_page_offset: 1352 +nbits_delta_nobjects: 5 +min_page_length: 339 +nbits_delta_page_length: 12 +min_content_offset: 0 +nbits_delta_content_offset: 0 +min_content_length: 0 +nbits_delta_content_length: 12 +nbits_nshared_objects: 0 +nbits_shared_identifier: 5 +nbits_shared_numerator: 0 +shared_denominator: 8 +Page 0: + nobjects: 17 + length: 2434 + content_offset: 0 + content_length: 2095 + nshared_objects: 0 +Page 1: + nobjects: 3 + length: 339 + content_offset: 0 + content_length: 0 + nshared_objects: 0 +Page 2: + nobjects: 3 + length: 339 + content_offset: 0 + content_length: 0 + nshared_objects: 0 +Page 3: + nobjects: 3 + length: 339 + content_offset: 0 + content_length: 0 + nshared_objects: 0 +Page 4: + nobjects: 3 + length: 344 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 5: + nobjects: 3 + length: 344 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 6: + nobjects: 3 + length: 344 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 7: + nobjects: 3 + length: 344 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 8: + nobjects: 3 + length: 344 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 9: + nobjects: 3 + length: 344 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 10: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 11: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 12: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 13: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 14: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 15: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 16: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 17: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 18: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 19: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 20: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 21: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 22: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 23: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 24: + nobjects: 3 + length: 344 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 25: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 26: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 27: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 28: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 29: + nobjects: 3 + length: 345 + content_offset: 0 + content_length: 6 + nshared_objects: 0 + +Shared Objects Hint Table + +first_shared_obj: 0 +first_shared_offset: 16 +nshared_first_page: 17 +nshared_total: 17 +nbits_nobjects: 0 +min_group_length: 21 +nbits_delta_group_length: 8 +Shared Object 0: + group length: 195 +Shared Object 1: + group length: 80 +Shared Object 2: + group length: 189 +Shared Object 3: + group length: 141 +Shared Object 4: + group length: 167 +Shared Object 5: + group length: 174 +Shared Object 6: + group length: 163 +Shared Object 7: + group length: 160 +Shared Object 8: + group length: 183 +Shared Object 9: + group length: 202 +Shared Object 10: + group length: 149 +Shared Object 11: + group length: 164 +Shared Object 12: + group length: 164 +Shared Object 13: + group length: 132 +Shared Object 14: + group length: 116 +Shared Object 15: + group length: 21 +Shared Object 16: + group length: 34 + +Outlines Hint Table + +first_object: 94 +first_object_offset: 1627 +nobjects: 12 +group_length: 1988 diff --git a/qpdf/qtest/qpdf/lin3.pdf b/qpdf/qtest/qpdf/lin3.pdf Binary files differnew file mode 100644 index 00000000..e33c7019 --- /dev/null +++ b/qpdf/qtest/qpdf/lin3.pdf diff --git a/qpdf/qtest/qpdf/lin4.out b/qpdf/qtest/qpdf/lin4.out new file mode 100644 index 00000000..42c6282e --- /dev/null +++ b/qpdf/qtest/qpdf/lin4.out @@ -0,0 +1,353 @@ +WARNING: page 0 has shared identifier entries +WARNING: page 0: shared object 74: in hint table but not computed list +lin4.pdf: linearization data: + +file_size: 13055 +first_page_object: 74 +first_page_end: 1539 +npages: 30 +xref_zero_offset: 11488 +first_page: 0 +H_offset: 946 +H_length: 180 + +Page Offsets Hint Table + +min_nobjects: 2 +first_page_offset: 1126 +nbits_delta_nobjects: 2 +min_page_length: 259 +nbits_delta_page_length: 8 +min_content_offset: 0 +nbits_delta_content_offset: 0 +min_content_length: 0 +nbits_delta_content_length: 8 +nbits_nshared_objects: 2 +nbits_shared_identifier: 2 +nbits_shared_numerator: 4 +shared_denominator: 8 +Page 0: + nobjects: 4 + length: 413 + content_offset: 0 + content_length: 154 + nshared_objects: 2 + identifier 0: 0 + numerator 0: 0 + identifier 1: 0 + numerator 1: 0 +Page 1: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 2: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 3: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 4: + nobjects: 2 + length: 259 + content_offset: 0 + content_length: 0 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 5: + nobjects: 2 + length: 261 + content_offset: 0 + content_length: 2 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 6: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 7: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 8: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 9: + nobjects: 2 + length: 262 + content_offset: 0 + content_length: 3 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 10: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 11: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 12: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 13: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 14: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 15: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 16: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 17: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 18: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 19: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 20: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 21: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 22: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 23: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 24: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 25: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 26: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 27: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 28: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 +Page 29: + nobjects: 2 + length: 263 + content_offset: 0 + content_length: 4 + nshared_objects: 2 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + +Shared Objects Hint Table + +first_shared_obj: 0 +first_shared_offset: 0 +nshared_first_page: 4 +nshared_total: 4 +nbits_nobjects: 0 +min_group_length: 34 +nbits_delta_group_length: 7 +Shared Object 0: + group length: 157 +Shared Object 1: + group length: 105 +Shared Object 2: + group length: 117 +Shared Object 3: + group length: 34 + +Outlines Hint Table + +first_object: 60 +first_object_offset: 9413 +nobjects: 12 +group_length: 2064 diff --git a/qpdf/qtest/qpdf/lin4.pdf b/qpdf/qtest/qpdf/lin4.pdf Binary files differnew file mode 100644 index 00000000..4778bd8a --- /dev/null +++ b/qpdf/qtest/qpdf/lin4.pdf diff --git a/qpdf/qtest/qpdf/lin5.out b/qpdf/qtest/qpdf/lin5.out new file mode 100644 index 00000000..b2261a1b --- /dev/null +++ b/qpdf/qtest/qpdf/lin5.out @@ -0,0 +1,318 @@ +WARNING: end of first page section (/E) mismatch: /E = 4213; computed = 4004..4005 +WARNING: page 1: shared object 170: in computed list but not hint table +WARNING: page 1: shared object 172: in computed list but not hint table +WARNING: page 2: shared object 170: in computed list but not hint table +WARNING: page 2: shared object 172: in computed list but not hint table +WARNING: page 3: shared object 170: in computed list but not hint table +WARNING: page 3: shared object 172: in computed list but not hint table +WARNING: page 4: shared object 170: in computed list but not hint table +WARNING: page 4: shared object 172: in computed list but not hint table +WARNING: page 5: shared object 170: in computed list but not hint table +WARNING: page 5: shared object 172: in computed list but not hint table +WARNING: page 6: shared object 170: in computed list but not hint table +WARNING: page 6: shared object 172: in computed list but not hint table +WARNING: page 7: shared object 170: in computed list but not hint table +WARNING: page 7: shared object 172: in computed list but not hint table +WARNING: page 8: shared object 170: in computed list but not hint table +WARNING: page 8: shared object 172: in computed list but not hint table +WARNING: page 9: shared object 170: in computed list but not hint table +WARNING: page 9: shared object 172: in computed list but not hint table +WARNING: page 10: shared object 170: in computed list but not hint table +WARNING: page 10: shared object 172: in computed list but not hint table +WARNING: page 11: shared object 170: in computed list but not hint table +WARNING: page 11: shared object 172: in computed list but not hint table +WARNING: page 12: shared object 170: in computed list but not hint table +WARNING: page 12: shared object 172: in computed list but not hint table +WARNING: page 13: shared object 170: in computed list but not hint table +WARNING: page 13: shared object 172: in computed list but not hint table +WARNING: page 14: shared object 170: in computed list but not hint table +WARNING: page 14: shared object 172: in computed list but not hint table +WARNING: page 15: shared object 170: in computed list but not hint table +WARNING: page 15: shared object 172: in computed list but not hint table +WARNING: page 16: shared object 170: in computed list but not hint table +WARNING: page 16: shared object 172: in computed list but not hint table +WARNING: page 17: shared object 170: in computed list but not hint table +WARNING: page 17: shared object 172: in computed list but not hint table +WARNING: page 18: shared object 170: in computed list but not hint table +WARNING: page 18: shared object 172: in computed list but not hint table +WARNING: page 19: shared object 170: in computed list but not hint table +WARNING: page 19: shared object 172: in computed list but not hint table +WARNING: page 20: shared object 170: in computed list but not hint table +WARNING: page 20: shared object 172: in computed list but not hint table +WARNING: page 21: shared object 170: in computed list but not hint table +WARNING: page 21: shared object 172: in computed list but not hint table +WARNING: page 22: shared object 170: in computed list but not hint table +WARNING: page 22: shared object 172: in computed list but not hint table +WARNING: page 23: shared object 170: in computed list but not hint table +WARNING: page 23: shared object 172: in computed list but not hint table +WARNING: page 24: shared object 170: in computed list but not hint table +WARNING: page 24: shared object 172: in computed list but not hint table +WARNING: page 25: shared object 170: in computed list but not hint table +WARNING: page 25: shared object 172: in computed list but not hint table +WARNING: page 26: shared object 170: in computed list but not hint table +WARNING: page 26: shared object 172: in computed list but not hint table +WARNING: page 27: shared object 170: in computed list but not hint table +WARNING: page 27: shared object 172: in computed list but not hint table +WARNING: page 28: shared object 170: in computed list but not hint table +WARNING: page 28: shared object 172: in computed list but not hint table +WARNING: page 29: shared object 170: in computed list but not hint table +WARNING: page 29: shared object 172: in computed list but not hint table +WARNING: incorrect offset in outlines table: hint table = 1710; computed = 1627 +WARNING: incorrect length in outlines table: hint table = 2124; computed = 2075 +lin5.pdf: linearization data: + +file_size: 27464 +first_page_object: 156 +first_page_end: 4213 +npages: 30 +xref_zero_offset: 24265 +first_page: 0 +H_offset: 1149 +H_length: 266 + +Page Offsets Hint Table + +min_nobjects: 3 +first_page_offset: 1415 +nbits_delta_nobjects: 5 +min_page_length: 355 +nbits_delta_page_length: 12 +min_content_offset: 0 +nbits_delta_content_offset: 0 +min_content_length: 0 +nbits_delta_content_length: 12 +nbits_nshared_objects: 0 +nbits_shared_identifier: 5 +nbits_shared_numerator: 0 +shared_denominator: 8 +Page 0: + nobjects: 17 + length: 2590 + content_offset: 0 + content_length: 2235 + nshared_objects: 0 +Page 1: + nobjects: 3 + length: 355 + content_offset: 0 + content_length: 0 + nshared_objects: 0 +Page 2: + nobjects: 3 + length: 355 + content_offset: 0 + content_length: 0 + nshared_objects: 0 +Page 3: + nobjects: 3 + length: 355 + content_offset: 0 + content_length: 0 + nshared_objects: 0 +Page 4: + nobjects: 3 + length: 360 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 5: + nobjects: 3 + length: 360 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 6: + nobjects: 3 + length: 361 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 7: + nobjects: 3 + length: 361 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 8: + nobjects: 3 + length: 361 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 9: + nobjects: 3 + length: 361 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 10: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 11: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 12: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 13: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 14: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 15: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 16: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 17: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 18: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 19: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 20: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 21: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 22: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 23: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 24: + nobjects: 3 + length: 361 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 25: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 26: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 27: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 28: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 +Page 29: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 7 + nshared_objects: 0 + +Shared Objects Hint Table + +first_shared_obj: 0 +first_shared_offset: 16 +nshared_first_page: 17 +nshared_total: 17 +nbits_nobjects: 0 +min_group_length: 21 +nbits_delta_group_length: 9 +Shared Object 0: + group length: 212 +Shared Object 1: + group length: 83 +Shared Object 2: + group length: 194 +Shared Object 3: + group length: 144 +Shared Object 4: + group length: 170 +Shared Object 5: + group length: 292 +Shared Object 6: + group length: 165 +Shared Object 7: + group length: 163 +Shared Object 8: + group length: 184 +Shared Object 9: + group length: 203 +Shared Object 10: + group length: 149 +Shared Object 11: + group length: 164 +Shared Object 12: + group length: 164 +Shared Object 13: + group length: 132 +Shared Object 14: + group length: 116 +Shared Object 15: + group length: 21 +Shared Object 16: + group length: 34 + +Outlines Hint Table + +first_object: 157 +first_object_offset: 1710 +nobjects: 12 +group_length: 2124 diff --git a/qpdf/qtest/qpdf/lin5.pdf b/qpdf/qtest/qpdf/lin5.pdf Binary files differnew file mode 100644 index 00000000..a41aa344 --- /dev/null +++ b/qpdf/qtest/qpdf/lin5.pdf diff --git a/qpdf/qtest/qpdf/lin6.out b/qpdf/qtest/qpdf/lin6.out new file mode 100644 index 00000000..3ed08aa8 --- /dev/null +++ b/qpdf/qtest/qpdf/lin6.out @@ -0,0 +1,592 @@ +WARNING: end of first page section (/E) mismatch: /E = 2897; computed = 5005..5007 +WARNING: object count mismatch for page 0: hint table = 19; computed = 16 +WARNING: page 0 has shared identifier entries +WARNING: page 0: shared object 93: in hint table but not computed list +WARNING: object count mismatch for page 1: hint table = 3; computed = 2 +WARNING: page 1: shared object 98: in hint table but not computed list +WARNING: page 1: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 2: hint table = 3; computed = 2 +WARNING: page 2: shared object 98: in hint table but not computed list +WARNING: page 2: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 3: hint table = 3; computed = 2 +WARNING: page 3: shared object 98: in hint table but not computed list +WARNING: page 3: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 4: hint table = 3; computed = 2 +WARNING: page 4: shared object 98: in hint table but not computed list +WARNING: page 4: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 5: hint table = 3; computed = 2 +WARNING: page 5: shared object 98: in hint table but not computed list +WARNING: page 5: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 6: hint table = 3; computed = 2 +WARNING: page 6: shared object 98: in hint table but not computed list +WARNING: page 6: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 7: hint table = 3; computed = 2 +WARNING: page 7: shared object 98: in hint table but not computed list +WARNING: page 7: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 8: hint table = 3; computed = 2 +WARNING: page 8: shared object 98: in hint table but not computed list +WARNING: page 8: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 9: hint table = 3; computed = 2 +WARNING: page 9: shared object 98: in hint table but not computed list +WARNING: page 9: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 10: hint table = 3; computed = 2 +WARNING: page 10: shared object 98: in hint table but not computed list +WARNING: page 10: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 11: hint table = 3; computed = 2 +WARNING: page 11: shared object 98: in hint table but not computed list +WARNING: page 11: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 12: hint table = 3; computed = 2 +WARNING: page 12: shared object 98: in hint table but not computed list +WARNING: page 12: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 13: hint table = 3; computed = 2 +WARNING: page 13: shared object 98: in hint table but not computed list +WARNING: page 13: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 14: hint table = 3; computed = 2 +WARNING: page 14: shared object 98: in hint table but not computed list +WARNING: page 14: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 15: hint table = 3; computed = 2 +WARNING: page 15: shared object 98: in hint table but not computed list +WARNING: page 15: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 16: hint table = 3; computed = 2 +WARNING: page 16: shared object 98: in hint table but not computed list +WARNING: page 16: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 17: hint table = 3; computed = 2 +WARNING: page 17: shared object 98: in hint table but not computed list +WARNING: page 17: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 18: hint table = 3; computed = 2 +WARNING: page 18: shared object 98: in hint table but not computed list +WARNING: page 18: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 19: hint table = 3; computed = 2 +WARNING: page 19: shared object 98: in hint table but not computed list +WARNING: page 19: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 20: hint table = 3; computed = 2 +WARNING: page 20: shared object 98: in hint table but not computed list +WARNING: page 20: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 21: hint table = 3; computed = 2 +WARNING: page 21: shared object 98: in hint table but not computed list +WARNING: page 21: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 22: hint table = 3; computed = 2 +WARNING: page 22: shared object 98: in hint table but not computed list +WARNING: page 22: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 23: hint table = 3; computed = 2 +WARNING: page 23: shared object 98: in hint table but not computed list +WARNING: page 23: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 24: hint table = 3; computed = 2 +WARNING: page 24: shared object 98: in hint table but not computed list +WARNING: page 24: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 25: hint table = 3; computed = 2 +WARNING: page 25: shared object 98: in hint table but not computed list +WARNING: page 25: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 26: hint table = 3; computed = 2 +WARNING: page 26: shared object 98: in hint table but not computed list +WARNING: page 26: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 27: hint table = 3; computed = 2 +WARNING: page 27: shared object 98: in hint table but not computed list +WARNING: page 27: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 28: hint table = 3; computed = 2 +WARNING: page 28: shared object 98: in hint table but not computed list +WARNING: page 28: shared object 99: in hint table but not computed list +WARNING: object count mismatch for page 29: hint table = 3; computed = 2 +WARNING: page 29: shared object 98: in hint table but not computed list +WARNING: page 29: shared object 99: in hint table but not computed list +lin6.pdf: linearization data: + +file_size: 24824 +first_page_object: 93 +first_page_end: 2897 +npages: 30 +xref_zero_offset: 22877 +first_page: 0 +H_offset: 1291 +H_length: 232 + +Page Offsets Hint Table + +min_nobjects: 3 +first_page_offset: 1523 +nbits_delta_nobjects: 5 +min_page_length: 580 +nbits_delta_page_length: 12 +min_content_offset: 0 +nbits_delta_content_offset: 0 +min_content_length: 0 +nbits_delta_content_length: 12 +nbits_nshared_objects: 3 +nbits_shared_identifier: 3 +nbits_shared_numerator: 4 +shared_denominator: 8 +Page 0: + nobjects: 19 + length: 3484 + content_offset: 0 + content_length: 2904 + nshared_objects: 4 + identifier 0: 0 + numerator 0: 0 + identifier 1: 0 + numerator 1: 0 + identifier 2: 0 + numerator 2: 0 + identifier 3: 0 + numerator 3: 0 +Page 1: + nobjects: 3 + length: 580 + content_offset: 0 + content_length: 0 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 2: + nobjects: 3 + length: 580 + content_offset: 0 + content_length: 0 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 3: + nobjects: 3 + length: 584 + content_offset: 0 + content_length: 4 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 4: + nobjects: 3 + length: 591 + content_offset: 0 + content_length: 11 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 5: + nobjects: 3 + length: 583 + content_offset: 0 + content_length: 3 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 6: + nobjects: 3 + length: 589 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 7: + nobjects: 3 + length: 583 + content_offset: 0 + content_length: 3 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 8: + nobjects: 3 + length: 591 + content_offset: 0 + content_length: 11 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 9: + nobjects: 3 + length: 584 + content_offset: 0 + content_length: 4 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 10: + nobjects: 3 + length: 589 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 11: + nobjects: 3 + length: 588 + content_offset: 0 + content_length: 8 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 12: + nobjects: 3 + length: 590 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 13: + nobjects: 3 + length: 590 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 14: + nobjects: 3 + length: 590 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 15: + nobjects: 3 + length: 589 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 16: + nobjects: 3 + length: 590 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 17: + nobjects: 3 + length: 589 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 18: + nobjects: 3 + length: 590 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 19: + nobjects: 3 + length: 589 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 20: + nobjects: 3 + length: 589 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 21: + nobjects: 3 + length: 588 + content_offset: 0 + content_length: 8 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 22: + nobjects: 3 + length: 590 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 23: + nobjects: 3 + length: 590 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 24: + nobjects: 3 + length: 589 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 25: + nobjects: 3 + length: 589 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 26: + nobjects: 3 + length: 590 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 27: + nobjects: 3 + length: 589 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 28: + nobjects: 3 + length: 590 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 29: + nobjects: 3 + length: 589 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 + +Shared Objects Hint Table + +first_shared_obj: 0 +first_shared_offset: 0 +nshared_first_page: 19 +nshared_total: 19 +nbits_nobjects: 0 +min_group_length: 34 +nbits_delta_group_length: 10 +Shared Object 0: + group length: 209 +Shared Object 1: + group length: 133 +Shared Object 2: + group length: 117 +Shared Object 3: + group length: 34 +Shared Object 4: + group length: 247 +Shared Object 5: + group length: 54 +Shared Object 6: + group length: 580 +Shared Object 7: + group length: 85 +Shared Object 8: + group length: 197 +Shared Object 9: + group length: 147 +Shared Object 10: + group length: 173 +Shared Object 11: + group length: 296 +Shared Object 12: + group length: 168 +Shared Object 13: + group length: 165 +Shared Object 14: + group length: 187 +Shared Object 15: + group length: 206 +Shared Object 16: + group length: 152 +Shared Object 17: + group length: 167 +Shared Object 18: + group length: 167 + +Outlines Hint Table + +first_object: 100 +first_object_offset: 2897 +nobjects: 12 +group_length: 2110 diff --git a/qpdf/qtest/qpdf/lin6.pdf b/qpdf/qtest/qpdf/lin6.pdf Binary files differnew file mode 100644 index 00000000..d76545f6 --- /dev/null +++ b/qpdf/qtest/qpdf/lin6.pdf diff --git a/qpdf/qtest/qpdf/lin7.out b/qpdf/qtest/qpdf/lin7.out new file mode 100644 index 00000000..c98d172a --- /dev/null +++ b/qpdf/qtest/qpdf/lin7.out @@ -0,0 +1,292 @@ +WARNING: end of first page section (/E) mismatch: /E = 1865; computed = 1655..1656 +WARNING: page 1: shared object 170: in computed list but not hint table +WARNING: page 1: shared object 172: in computed list but not hint table +WARNING: page 2: shared object 170: in computed list but not hint table +WARNING: page 2: shared object 172: in computed list but not hint table +WARNING: page 3: shared object 170: in computed list but not hint table +WARNING: page 3: shared object 172: in computed list but not hint table +WARNING: page 4: shared object 170: in computed list but not hint table +WARNING: page 4: shared object 172: in computed list but not hint table +WARNING: page 5: shared object 170: in computed list but not hint table +WARNING: page 5: shared object 172: in computed list but not hint table +WARNING: page 6: shared object 170: in computed list but not hint table +WARNING: page 6: shared object 172: in computed list but not hint table +WARNING: page 7: shared object 170: in computed list but not hint table +WARNING: page 7: shared object 172: in computed list but not hint table +WARNING: page 8: shared object 170: in computed list but not hint table +WARNING: page 8: shared object 172: in computed list but not hint table +WARNING: page 9: shared object 170: in computed list but not hint table +WARNING: page 9: shared object 172: in computed list but not hint table +WARNING: page 10: shared object 170: in computed list but not hint table +WARNING: page 10: shared object 172: in computed list but not hint table +WARNING: page 11: shared object 170: in computed list but not hint table +WARNING: page 11: shared object 172: in computed list but not hint table +WARNING: page 12: shared object 170: in computed list but not hint table +WARNING: page 12: shared object 172: in computed list but not hint table +WARNING: page 13: shared object 170: in computed list but not hint table +WARNING: page 13: shared object 172: in computed list but not hint table +WARNING: page 14: shared object 170: in computed list but not hint table +WARNING: page 14: shared object 172: in computed list but not hint table +WARNING: page 15: shared object 170: in computed list but not hint table +WARNING: page 15: shared object 172: in computed list but not hint table +WARNING: page 16: shared object 170: in computed list but not hint table +WARNING: page 16: shared object 172: in computed list but not hint table +WARNING: page 17: shared object 170: in computed list but not hint table +WARNING: page 17: shared object 172: in computed list but not hint table +WARNING: page 18: shared object 170: in computed list but not hint table +WARNING: page 18: shared object 172: in computed list but not hint table +WARNING: page 19: shared object 170: in computed list but not hint table +WARNING: page 19: shared object 172: in computed list but not hint table +WARNING: page 20: shared object 170: in computed list but not hint table +WARNING: page 20: shared object 172: in computed list but not hint table +WARNING: page 21: shared object 170: in computed list but not hint table +WARNING: page 21: shared object 172: in computed list but not hint table +WARNING: page 22: shared object 170: in computed list but not hint table +WARNING: page 22: shared object 172: in computed list but not hint table +WARNING: page 23: shared object 170: in computed list but not hint table +WARNING: page 23: shared object 172: in computed list but not hint table +WARNING: page 24: shared object 170: in computed list but not hint table +WARNING: page 24: shared object 172: in computed list but not hint table +WARNING: page 25: shared object 170: in computed list but not hint table +WARNING: page 25: shared object 172: in computed list but not hint table +WARNING: page 26: shared object 170: in computed list but not hint table +WARNING: page 26: shared object 172: in computed list but not hint table +WARNING: page 27: shared object 170: in computed list but not hint table +WARNING: page 27: shared object 172: in computed list but not hint table +WARNING: page 28: shared object 170: in computed list but not hint table +WARNING: page 28: shared object 172: in computed list but not hint table +WARNING: page 29: shared object 170: in computed list but not hint table +WARNING: page 29: shared object 172: in computed list but not hint table +lin7.pdf: linearization data: + +file_size: 27408 +first_page_object: 168 +first_page_end: 1865 +npages: 30 +xref_zero_offset: 23969 +first_page: 0 +H_offset: 905 +H_length: 235 + +Page Offsets Hint Table + +min_nobjects: 3 +first_page_offset: 1140 +nbits_delta_nobjects: 3 +min_page_length: 356 +nbits_delta_page_length: 8 +min_content_offset: 0 +nbits_delta_content_offset: 0 +min_content_length: 0 +nbits_delta_content_length: 8 +nbits_nshared_objects: 0 +nbits_shared_identifier: 3 +nbits_shared_numerator: 0 +shared_denominator: 8 +Page 0: + nobjects: 5 + length: 516 + content_offset: 0 + content_length: 160 + nshared_objects: 0 +Page 1: + nobjects: 3 + length: 356 + content_offset: 0 + content_length: 0 + nshared_objects: 0 +Page 2: + nobjects: 3 + length: 356 + content_offset: 0 + content_length: 0 + nshared_objects: 0 +Page 3: + nobjects: 3 + length: 356 + content_offset: 0 + content_length: 0 + nshared_objects: 0 +Page 4: + nobjects: 3 + length: 361 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 5: + nobjects: 3 + length: 361 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 6: + nobjects: 3 + length: 361 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 7: + nobjects: 3 + length: 361 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 8: + nobjects: 3 + length: 361 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 9: + nobjects: 3 + length: 361 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 10: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 11: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 12: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 13: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 14: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 15: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 16: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 17: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 18: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 19: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 20: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 21: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 22: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 23: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 24: + nobjects: 3 + length: 361 + content_offset: 0 + content_length: 5 + nshared_objects: 0 +Page 25: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 26: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 27: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 28: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 +Page 29: + nobjects: 3 + length: 362 + content_offset: 0 + content_length: 6 + nshared_objects: 0 + +Shared Objects Hint Table + +first_shared_obj: 0 +first_shared_offset: 16 +nshared_first_page: 5 +nshared_total: 5 +nbits_nobjects: 0 +min_group_length: 21 +nbits_delta_group_length: 8 +Shared Object 0: + group length: 213 +Shared Object 1: + group length: 132 +Shared Object 2: + group length: 116 +Shared Object 3: + group length: 21 +Shared Object 4: + group length: 34 + +Outlines Hint Table + +first_object: 88 +first_object_offset: 12129 +nobjects: 12 +group_length: 2030 diff --git a/qpdf/qtest/qpdf/lin7.pdf b/qpdf/qtest/qpdf/lin7.pdf Binary files differnew file mode 100644 index 00000000..011daa1d --- /dev/null +++ b/qpdf/qtest/qpdf/lin7.pdf diff --git a/qpdf/qtest/qpdf/lin8.out b/qpdf/qtest/qpdf/lin8.out new file mode 100644 index 00000000..696b759c --- /dev/null +++ b/qpdf/qtest/qpdf/lin8.out @@ -0,0 +1,568 @@ +WARNING: end of first page section (/E) mismatch: /E = 2656; computed = 1768..1770 +WARNING: object count mismatch for page 0: hint table = 7; computed = 4 +WARNING: page 0 has shared identifier entries +WARNING: page 0: shared object 105: in hint table but not computed list +WARNING: object count mismatch for page 1: hint table = 3; computed = 2 +WARNING: page 1: shared object 110: in hint table but not computed list +WARNING: page 1: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 2: hint table = 3; computed = 2 +WARNING: page 2: shared object 110: in hint table but not computed list +WARNING: page 2: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 3: hint table = 3; computed = 2 +WARNING: page 3: shared object 110: in hint table but not computed list +WARNING: page 3: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 4: hint table = 3; computed = 2 +WARNING: page 4: shared object 110: in hint table but not computed list +WARNING: page 4: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 5: hint table = 3; computed = 2 +WARNING: page 5: shared object 110: in hint table but not computed list +WARNING: page 5: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 6: hint table = 3; computed = 2 +WARNING: page 6: shared object 110: in hint table but not computed list +WARNING: page 6: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 7: hint table = 3; computed = 2 +WARNING: page 7: shared object 110: in hint table but not computed list +WARNING: page 7: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 8: hint table = 3; computed = 2 +WARNING: page 8: shared object 110: in hint table but not computed list +WARNING: page 8: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 9: hint table = 3; computed = 2 +WARNING: page 9: shared object 110: in hint table but not computed list +WARNING: page 9: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 10: hint table = 3; computed = 2 +WARNING: page 10: shared object 110: in hint table but not computed list +WARNING: page 10: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 11: hint table = 3; computed = 2 +WARNING: page 11: shared object 110: in hint table but not computed list +WARNING: page 11: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 12: hint table = 3; computed = 2 +WARNING: page 12: shared object 110: in hint table but not computed list +WARNING: page 12: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 13: hint table = 3; computed = 2 +WARNING: page 13: shared object 110: in hint table but not computed list +WARNING: page 13: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 14: hint table = 3; computed = 2 +WARNING: page 14: shared object 110: in hint table but not computed list +WARNING: page 14: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 15: hint table = 3; computed = 2 +WARNING: page 15: shared object 110: in hint table but not computed list +WARNING: page 15: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 16: hint table = 3; computed = 2 +WARNING: page 16: shared object 110: in hint table but not computed list +WARNING: page 16: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 17: hint table = 3; computed = 2 +WARNING: page 17: shared object 110: in hint table but not computed list +WARNING: page 17: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 18: hint table = 3; computed = 2 +WARNING: page 18: shared object 110: in hint table but not computed list +WARNING: page 18: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 19: hint table = 3; computed = 2 +WARNING: page 19: shared object 110: in hint table but not computed list +WARNING: page 19: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 20: hint table = 3; computed = 2 +WARNING: page 20: shared object 110: in hint table but not computed list +WARNING: page 20: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 21: hint table = 3; computed = 2 +WARNING: page 21: shared object 110: in hint table but not computed list +WARNING: page 21: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 22: hint table = 3; computed = 2 +WARNING: page 22: shared object 110: in hint table but not computed list +WARNING: page 22: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 23: hint table = 3; computed = 2 +WARNING: page 23: shared object 110: in hint table but not computed list +WARNING: page 23: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 24: hint table = 3; computed = 2 +WARNING: page 24: shared object 110: in hint table but not computed list +WARNING: page 24: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 25: hint table = 3; computed = 2 +WARNING: page 25: shared object 110: in hint table but not computed list +WARNING: page 25: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 26: hint table = 3; computed = 2 +WARNING: page 26: shared object 110: in hint table but not computed list +WARNING: page 26: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 27: hint table = 3; computed = 2 +WARNING: page 27: shared object 110: in hint table but not computed list +WARNING: page 27: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 28: hint table = 3; computed = 2 +WARNING: page 28: shared object 110: in hint table but not computed list +WARNING: page 28: shared object 111: in hint table but not computed list +WARNING: object count mismatch for page 29: hint table = 3; computed = 2 +WARNING: page 29: shared object 110: in hint table but not computed list +WARNING: page 29: shared object 111: in hint table but not computed list +lin8.pdf: linearization data: + +file_size: 24875 +first_page_object: 105 +first_page_end: 2656 +npages: 30 +xref_zero_offset: 22687 +first_page: 0 +H_offset: 1052 +H_length: 217 + +Page Offsets Hint Table + +min_nobjects: 3 +first_page_offset: 1269 +nbits_delta_nobjects: 3 +min_page_length: 583 +nbits_delta_page_length: 10 +min_content_offset: 0 +nbits_delta_content_offset: 0 +min_content_length: 0 +nbits_delta_content_length: 10 +nbits_nshared_objects: 3 +nbits_shared_identifier: 3 +nbits_shared_numerator: 4 +shared_denominator: 8 +Page 0: + nobjects: 7 + length: 1387 + content_offset: 0 + content_length: 804 + nshared_objects: 4 + identifier 0: 0 + numerator 0: 0 + identifier 1: 0 + numerator 1: 0 + identifier 2: 0 + numerator 2: 0 + identifier 3: 0 + numerator 3: 0 +Page 1: + nobjects: 3 + length: 583 + content_offset: 0 + content_length: 0 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 2: + nobjects: 3 + length: 583 + content_offset: 0 + content_length: 0 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 3: + nobjects: 3 + length: 587 + content_offset: 0 + content_length: 4 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 4: + nobjects: 3 + length: 594 + content_offset: 0 + content_length: 11 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 5: + nobjects: 3 + length: 586 + content_offset: 0 + content_length: 3 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 6: + nobjects: 3 + length: 592 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 7: + nobjects: 3 + length: 586 + content_offset: 0 + content_length: 3 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 8: + nobjects: 3 + length: 594 + content_offset: 0 + content_length: 11 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 9: + nobjects: 3 + length: 587 + content_offset: 0 + content_length: 4 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 10: + nobjects: 3 + length: 592 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 11: + nobjects: 3 + length: 591 + content_offset: 0 + content_length: 8 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 12: + nobjects: 3 + length: 593 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 13: + nobjects: 3 + length: 593 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 14: + nobjects: 3 + length: 593 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 15: + nobjects: 3 + length: 592 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 16: + nobjects: 3 + length: 593 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 17: + nobjects: 3 + length: 592 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 18: + nobjects: 3 + length: 593 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 19: + nobjects: 3 + length: 592 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 20: + nobjects: 3 + length: 592 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 21: + nobjects: 3 + length: 591 + content_offset: 0 + content_length: 8 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 22: + nobjects: 3 + length: 593 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 23: + nobjects: 3 + length: 593 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 24: + nobjects: 3 + length: 592 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 25: + nobjects: 3 + length: 592 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 26: + nobjects: 3 + length: 593 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 27: + nobjects: 3 + length: 592 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 28: + nobjects: 3 + length: 593 + content_offset: 0 + content_length: 10 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 +Page 29: + nobjects: 3 + length: 592 + content_offset: 0 + content_length: 9 + nshared_objects: 4 + identifier 0: 2 + numerator 0: 0 + identifier 1: 3 + numerator 1: 0 + identifier 2: 5 + numerator 2: 0 + identifier 3: 6 + numerator 3: 0 + +Shared Objects Hint Table + +first_shared_obj: 0 +first_shared_offset: 0 +nshared_first_page: 7 +nshared_total: 7 +nbits_nobjects: 0 +min_group_length: 35 +nbits_delta_group_length: 10 +Shared Object 0: + group length: 214 +Shared Object 1: + group length: 134 +Shared Object 2: + group length: 118 +Shared Object 3: + group length: 35 +Shared Object 4: + group length: 249 +Shared Object 5: + group length: 56 +Shared Object 6: + group length: 581 + +Outlines Hint Table + +first_object: 89 +first_object_offset: 20067 +nobjects: 12 +group_length: 2069 diff --git a/qpdf/qtest/qpdf/lin8.pdf b/qpdf/qtest/qpdf/lin8.pdf Binary files differnew file mode 100644 index 00000000..388a21a2 --- /dev/null +++ b/qpdf/qtest/qpdf/lin8.pdf diff --git a/qpdf/qtest/qpdf/lin9.out b/qpdf/qtest/qpdf/lin9.out new file mode 100644 index 00000000..6fde8441 --- /dev/null +++ b/qpdf/qtest/qpdf/lin9.out @@ -0,0 +1,104 @@ +WARNING: page 0 has shared identifier entries +WARNING: page 0: shared object 19: in hint table but not computed list +lin9.pdf: linearization data: + +file_size: 3316 +first_page_object: 19 +first_page_end: 1323 +npages: 5 +xref_zero_offset: 2849 +first_page: 0 +H_offset: 713 +H_length: 162 + +Page Offsets Hint Table + +min_nobjects: 2 +first_page_offset: 875 +nbits_delta_nobjects: 2 +min_page_length: 221 +nbits_delta_page_length: 8 +min_content_offset: 0 +nbits_delta_content_offset: 0 +min_content_length: 0 +nbits_delta_content_length: 8 +nbits_nshared_objects: 2 +nbits_shared_identifier: 3 +nbits_shared_numerator: 4 +shared_denominator: 8 +Page 0: + nobjects: 5 + length: 448 + content_offset: 0 + content_length: 227 + nshared_objects: 1 + identifier 0: 0 + numerator 0: 0 +Page 1: + nobjects: 2 + length: 221 + content_offset: 0 + content_length: 0 + nshared_objects: 3 + identifier 0: 5 + numerator 0: 0 + identifier 1: 6 + numerator 1: 0 + identifier 2: 4 + numerator 2: 0 +Page 2: + nobjects: 2 + length: 234 + content_offset: 0 + content_length: 13 + nshared_objects: 3 + identifier 0: 5 + numerator 0: 0 + identifier 1: 6 + numerator 1: 0 + identifier 2: 4 + numerator 2: 0 +Page 3: + nobjects: 3 + length: 375 + content_offset: 0 + content_length: 154 + nshared_objects: 1 + identifier 0: 4 + numerator 0: 0 +Page 4: + nobjects: 2 + length: 221 + content_offset: 0 + content_length: 0 + nshared_objects: 3 + identifier 0: 5 + numerator 0: 0 + identifier 1: 6 + numerator 1: 0 + identifier 2: 4 + numerator 2: 0 + +Shared Objects Hint Table + +first_shared_obj: 10 +first_shared_offset: 2374 +nshared_first_page: 5 +nshared_total: 7 +nbits_nobjects: 0 +min_group_length: 34 +nbits_delta_group_length: 7 +Shared Object 0: + group length: 119 +Shared Object 1: + group length: 105 +Shared Object 2: + group length: 67 +Shared Object 3: + group length: 123 +Shared Object 4: + group length: 34 +Shared Object 5: + group length: 67 +Shared Object 6: + group length: 117 diff --git a/qpdf/qtest/qpdf/lin9.pdf b/qpdf/qtest/qpdf/lin9.pdf Binary files differnew file mode 100644 index 00000000..40e76929 --- /dev/null +++ b/qpdf/qtest/qpdf/lin9.pdf diff --git a/qpdf/qtest/qpdf/misc-1.out b/qpdf/qtest/qpdf/misc-1.out new file mode 100644 index 00000000..3cba139e --- /dev/null +++ b/qpdf/qtest/qpdf/misc-1.out @@ -0,0 +1,15 @@ +page 1: + images: + /Im1: 5100 x 6600 + content: + 5 0 R +end page 1 +page 2: + images: + /Im2: 5100 x 6600 + /Im3: 305 x 305 + /Im4: 305 x 305 + content: + 11 0 R +end page 2 +test 5 done diff --git a/qpdf/qtest/qpdf/misc-1.pdf b/qpdf/qtest/qpdf/misc-1.pdf Binary files differnew file mode 100644 index 00000000..dec1d707 --- /dev/null +++ b/qpdf/qtest/qpdf/misc-1.pdf diff --git a/qpdf/qtest/qpdf/misc-2.out b/qpdf/qtest/qpdf/misc-2.out new file mode 100644 index 00000000..139d64cc --- /dev/null +++ b/qpdf/qtest/qpdf/misc-2.out @@ -0,0 +1,26 @@ +page 1: + images: + /Im1: 5100 x 6600 + content: + 5 0 R +end page 1 +page 2: + images: + /Im2: 5100 x 6600 + /Im3: 305 x 305 + content: + 10 0 R +end page 2 +page 3: + images: + /Im4: 5100 x 6600 + content: + 14 0 R +end page 3 +page 4: + images: + /Im5: 5100 x 6600 + content: + 18 0 R +end page 4 +test 5 done diff --git a/qpdf/qtest/qpdf/misc-2.pdf b/qpdf/qtest/qpdf/misc-2.pdf Binary files differnew file mode 100644 index 00000000..a7a3a93c --- /dev/null +++ b/qpdf/qtest/qpdf/misc-2.pdf diff --git a/qpdf/qtest/qpdf/misc-3.out b/qpdf/qtest/qpdf/misc-3.out new file mode 100644 index 00000000..f9c89df2 --- /dev/null +++ b/qpdf/qtest/qpdf/misc-3.out @@ -0,0 +1,14 @@ +page 1: + images: + content: + 4 0 R + 6 0 R +end page 1 +QStrings: +No Special Characters +These: ¿÷¢þ and no more +πωτατω +QNumbers: +1.000 +3.142 +test 5 done diff --git a/qpdf/qtest/qpdf/misc-3.pdf b/qpdf/qtest/qpdf/misc-3.pdf new file mode 100644 index 00000000..6b9aa3c7 --- /dev/null +++ b/qpdf/qtest/qpdf/misc-3.pdf @@ -0,0 +1,127 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /QNumbers [ + 1 + 3.14159 + ] + /QStrings [ + (No Special Characters) + (These: ¿÷¢þ and no more) + <feff03c003c903c403b103c403c9> + ] + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents [ + 4 0 R + 6 0 R + ] + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 8 0 R + >> + /ProcSet 9 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +%% Contents for page 1 +6 0 obj +<< + /Length 7 0 R +>> +stream +BT + /F1 24 Tf + 72 696 Td + (Salad) Tj +ET +endstream +endobj + +7 0 obj +43 +endobj + +8 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +9 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 10 +0000000000 65535 f +0000000025 00000 n +0000000226 00000 n +0000000308 00000 n +0000000543 00000 n +0000000642 00000 n +0000000684 00000 n +0000000782 00000 n +0000000801 00000 n +0000000919 00000 n +trailer << + /Root 1 0 R + /Size 10 + /ID [<e017d8dc1fe53a81e40aa79bcb43fdec><76269ee0b6579446b731e060af8ef436>] +>> +startxref +954 +%%EOF diff --git a/qpdf/qtest/qpdf/multiple-mods.pdf b/qpdf/qtest/qpdf/multiple-mods.pdf Binary files differnew file mode 100755 index 00000000..6370cd65 --- /dev/null +++ b/qpdf/qtest/qpdf/multiple-mods.pdf diff --git a/qpdf/qtest/qpdf/object-stream.1.check b/qpdf/qtest/qpdf/object-stream.1.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.1.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/object-stream.10.check b/qpdf/qtest/qpdf/object-stream.10.check new file mode 100644 index 00000000..0e0ed996 --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.10.check @@ -0,0 +1,5 @@ +checking a.pdf +P = -4 +User password = +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/object-stream.11.check b/qpdf/qtest/qpdf/object-stream.11.check new file mode 100644 index 00000000..327d847a --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.11.check @@ -0,0 +1,5 @@ +checking a.pdf +P = -4 +User password = +File is linearized +No errors found diff --git a/qpdf/qtest/qpdf/object-stream.12.check b/qpdf/qtest/qpdf/object-stream.12.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.12.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/object-stream.2.check b/qpdf/qtest/qpdf/object-stream.2.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.2.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/object-stream.3.check b/qpdf/qtest/qpdf/object-stream.3.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.3.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/object-stream.4.check b/qpdf/qtest/qpdf/object-stream.4.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.4.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/object-stream.5.check b/qpdf/qtest/qpdf/object-stream.5.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.5.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/object-stream.6.check b/qpdf/qtest/qpdf/object-stream.6.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.6.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/object-stream.7.check b/qpdf/qtest/qpdf/object-stream.7.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.7.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/object-stream.8.check b/qpdf/qtest/qpdf/object-stream.8.check new file mode 100644 index 00000000..7284dd2a --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.8.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is not linearized +No errors found diff --git a/qpdf/qtest/qpdf/object-stream.9.check b/qpdf/qtest/qpdf/object-stream.9.check new file mode 100644 index 00000000..37ea00cf --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.9.check @@ -0,0 +1,4 @@ +checking a.pdf +File is not encrypted +File is linearized +No errors found diff --git a/qpdf/qtest/qpdf/object-stream.disable.exp b/qpdf/qtest/qpdf/object-stream.disable.exp Binary files differnew file mode 100644 index 00000000..3b5e10fb --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.disable.exp diff --git a/qpdf/qtest/qpdf/object-stream.generate.exp b/qpdf/qtest/qpdf/object-stream.generate.exp Binary files differnew file mode 100644 index 00000000..3f86a173 --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.generate.exp diff --git a/qpdf/qtest/qpdf/object-stream.pdf b/qpdf/qtest/qpdf/object-stream.pdf Binary files differnew file mode 100644 index 00000000..1a468202 --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.pdf diff --git a/qpdf/qtest/qpdf/object-stream.preserve.exp b/qpdf/qtest/qpdf/object-stream.preserve.exp Binary files differnew file mode 100644 index 00000000..3f86a173 --- /dev/null +++ b/qpdf/qtest/qpdf/object-stream.preserve.exp diff --git a/qpdf/qtest/qpdf/old-and-complex.pdf b/qpdf/qtest/qpdf/old-and-complex.pdf Binary files differnew file mode 100644 index 00000000..74b8c255 --- /dev/null +++ b/qpdf/qtest/qpdf/old-and-complex.pdf diff --git a/qpdf/qtest/qpdf/p1-a-p2-a.pdf b/qpdf/qtest/qpdf/p1-a-p2-a.pdf new file mode 100644 index 00000000..b8256cba --- /dev/null +++ b/qpdf/qtest/qpdf/p1-a-p2-a.pdf @@ -0,0 +1,138 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 2 + /Kids [ + 3 0 R + 4 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 5 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 7 0 R + >> + /ProcSet 8 0 R + >> + /Type /Page +>> +endobj + +%% Page 2 +4 0 obj +<< + /Contents 9 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 7 0 R + >> + /ProcSet 8 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +5 0 obj +<< + /Length 6 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (A) Tj +ET +endstream +endobj + +6 0 obj +39 +endobj + +7 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +8 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 2 +9 0 obj +<< + /Length 10 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (A) Tj +ET +endstream +endobj + +10 0 obj +39 +endobj + +xref +0 11 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000171 00000 n +0000000373 00000 n +0000000588 00000 n +0000000682 00000 n +0000000701 00000 n +0000000819 00000 n +0000000877 00000 n +0000000972 00000 n +trailer << + /Root 1 0 R + /Size 11 + /ID [<36b07232d7657658c548006151d4c57c><6de1f48ca16def200b3b655a24fa1b48>] +>> +startxref +992 +%%EOF diff --git a/qpdf/qtest/qpdf/p1-a-p2-b.pdf b/qpdf/qtest/qpdf/p1-a-p2-b.pdf new file mode 100644 index 00000000..4e05d88a --- /dev/null +++ b/qpdf/qtest/qpdf/p1-a-p2-b.pdf @@ -0,0 +1,138 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 2 + /Kids [ + 3 0 R + 4 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 5 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 7 0 R + >> + /ProcSet 8 0 R + >> + /Type /Page +>> +endobj + +%% Page 2 +4 0 obj +<< + /Contents 9 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 7 0 R + >> + /ProcSet 8 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +5 0 obj +<< + /Length 6 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (A) Tj +ET +endstream +endobj + +6 0 obj +39 +endobj + +7 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +8 0 obj +[ + /PDF + /Text +] +endobj + +%% Contents for page 2 +9 0 obj +<< + /Length 10 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (B) Tj +ET +endstream +endobj + +10 0 obj +39 +endobj + +xref +0 11 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000171 00000 n +0000000373 00000 n +0000000588 00000 n +0000000682 00000 n +0000000701 00000 n +0000000819 00000 n +0000000877 00000 n +0000000972 00000 n +trailer << + /Root 1 0 R + /Size 11 + /ID [<36b07232d7657658c548006151d4c57c><6de1f48ca16def200b3b655a24fa1b48>] +>> +startxref +992 +%%EOF diff --git a/qpdf/qtest/qpdf/p1-a.pdf b/qpdf/qtest/qpdf/p1-a.pdf new file mode 100644 index 00000000..8cb349c5 --- /dev/null +++ b/qpdf/qtest/qpdf/p1-a.pdf @@ -0,0 +1,95 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (A) Tj +ET +endstream +endobj + +5 0 obj +39 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000470 00000 n +0000000489 00000 n +0000000607 00000 n +trailer << + /Root 1 0 R + /Size 8 + /ID [<36b07232d7657658c548006151d4c57c><36b07232d7657658c548006151d4c57c>] +>> +startxref +642 +%%EOF diff --git a/qpdf/qtest/qpdf/p1-b.pdf b/qpdf/qtest/qpdf/p1-b.pdf new file mode 100644 index 00000000..833e8088 --- /dev/null +++ b/qpdf/qtest/qpdf/p1-b.pdf @@ -0,0 +1,95 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (B) Tj +ET +endstream +endobj + +5 0 obj +39 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 8 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000470 00000 n +0000000489 00000 n +0000000607 00000 n +trailer << + /Root 1 0 R + /Size 8 + /ID [<36b07232d7657658c548006151d4c57c><36b07232d7657658c548006151d4c57c>] +>> +startxref +642 +%%EOF diff --git a/qpdf/qtest/qpdf/show-page-1-content-filtered.out b/qpdf/qtest/qpdf/show-page-1-content-filtered.out new file mode 100644 index 00000000..633a5c1f --- /dev/null +++ b/qpdf/qtest/qpdf/show-page-1-content-filtered.out @@ -0,0 +1 @@ +q
222 0 0 240 28.5 96 cm
/Im1 Do
Q
q
185 0 0 200 313.5 296 cm
/Im2 Do
Q
\ No newline at end of file diff --git a/qpdf/qtest/qpdf/show-page-1-content-normalized.out b/qpdf/qtest/qpdf/show-page-1-content-normalized.out new file mode 100644 index 00000000..32c115c8 --- /dev/null +++ b/qpdf/qtest/qpdf/show-page-1-content-normalized.out @@ -0,0 +1,8 @@ +q +222 0 0 240 28.5 96 cm +/Im1 Do +Q +q +185 0 0 200 313.5 296 cm +/Im2 Do +Q diff --git a/qpdf/qtest/qpdf/show-page-1-content-raw.out b/qpdf/qtest/qpdf/show-page-1-content-raw.out Binary files differnew file mode 100644 index 00000000..22440b51 --- /dev/null +++ b/qpdf/qtest/qpdf/show-page-1-content-raw.out diff --git a/qpdf/qtest/qpdf/show-page-1-image.out b/qpdf/qtest/qpdf/show-page-1-image.out Binary files differnew file mode 100644 index 00000000..c2a3483f --- /dev/null +++ b/qpdf/qtest/qpdf/show-page-1-image.out diff --git a/qpdf/qtest/qpdf/show-page-1.out b/qpdf/qtest/qpdf/show-page-1.out new file mode 100644 index 00000000..f12237c4 --- /dev/null +++ b/qpdf/qtest/qpdf/show-page-1.out @@ -0,0 +1 @@ +<< /Contents 7 0 R /MediaBox [ 0 0 612 792 ] /Parent 4 0 R /Resources << /ProcSet [ /PDF /ImageC ] /XObject << /Im1 8 0 R /Im2 9 0 R >> >> /Type /Page >> diff --git a/qpdf/qtest/qpdf/show-pages-images.out b/qpdf/qtest/qpdf/show-pages-images.out new file mode 100644 index 00000000..6d54e9fd --- /dev/null +++ b/qpdf/qtest/qpdf/show-pages-images.out @@ -0,0 +1,11 @@ +page 1: 5 0 R + images: + /Im1: 8 0 R, 555 x 600 + /Im2: 9 0 R, 185 x 200 + content: + 7 0 R +page 2: 6 0 R + images: + /Im2: 9 0 R, 185 x 200 + content: + 10 0 R diff --git a/qpdf/qtest/qpdf/show-pages.out b/qpdf/qtest/qpdf/show-pages.out new file mode 100644 index 00000000..01e0ea0a --- /dev/null +++ b/qpdf/qtest/qpdf/show-pages.out @@ -0,0 +1,6 @@ +page 1: 5 0 R + content: + 7 0 R +page 2: 6 0 R + content: + 10 0 R diff --git a/qpdf/qtest/qpdf/show-unfilterable.out b/qpdf/qtest/qpdf/show-unfilterable.out new file mode 100644 index 00000000..464ca2c3 --- /dev/null +++ b/qpdf/qtest/qpdf/show-unfilterable.out @@ -0,0 +1 @@ +Unable to filter stream data. diff --git a/qpdf/qtest/qpdf/show-xref-by-id-filtered.out b/qpdf/qtest/qpdf/show-xref-by-id-filtered.out Binary files differnew file mode 100644 index 00000000..3ecf4ed4 --- /dev/null +++ b/qpdf/qtest/qpdf/show-xref-by-id-filtered.out diff --git a/qpdf/qtest/qpdf/show-xref-by-id.out b/qpdf/qtest/qpdf/show-xref-by-id.out new file mode 100644 index 00000000..62faf0ce --- /dev/null +++ b/qpdf/qtest/qpdf/show-xref-by-id.out @@ -0,0 +1,2 @@ +Object is stream. Dictionary: +<< /DecodeParms << /Columns 4 /Predictor 12 >> /Encrypt 11 0 R /Filter /FlateDecode /ID [ (ª&\237þÂ\226±?>ø5ª¡:\n\b) (ím\023\021OµUt\bµ\026Ê9'\025\033) ] /Info 3 0 R /Length 52 /Root 1 0 R /Size 13 /Type /XRef /W [ 1 2 1 ] >> diff --git a/qpdf/qtest/qpdf/show-xref.out b/qpdf/qtest/qpdf/show-xref.out new file mode 100644 index 00000000..a0bb72d9 --- /dev/null +++ b/qpdf/qtest/qpdf/show-xref.out @@ -0,0 +1,12 @@ +1/0: uncompressed; offset = 15 +2/0: uncompressed; offset = 64 +3/0: compressed; stream = 2, index = 0 +4/0: compressed; stream = 2, index = 1 +5/0: compressed; stream = 2, index = 2 +6/0: compressed; stream = 2, index = 3 +7/0: uncompressed; offset = 390 +8/0: uncompressed; offset = 521 +9/0: uncompressed; offset = 39802 +10/0: uncompressed; offset = 49559 +11/0: uncompressed; offset = 49672 +12/0: uncompressed; offset = 49880 diff --git a/qpdf/qtest/qpdf/test4-1.pdf b/qpdf/qtest/qpdf/test4-1.pdf new file mode 100644 index 00000000..9f4f980b --- /dev/null +++ b/qpdf/qtest/qpdf/test4-1.pdf @@ -0,0 +1,126 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +8 0 obj +<< + /Title 9 0 R + /Subject 10 0 R + /A 11 0 R + /B 12 0 R +>> +endobj + +9 0 obj +(Some Title Is Here) +endobj + +10 0 obj +(Subject) +endobj + +11 0 obj +[ 1 2 3 ] +endobj + +12 0 obj +<< /A 11 0 R /B (B) >> +endobj + +xref +0 13 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +0000000647 00000 n +0000000726 00000 n +0000000763 00000 n +0000000790 00000 n +0000000817 00000 n +trailer << + /Root 1 0 R + /Size 13 + /QTest 8 0 R + /ID [<c61bd35bada064f61e0a56aa9588064e><c61bd35bada064f61e0a56aa9588064e>] +>> +startxref +857 +%%EOF diff --git a/qpdf/qtest/qpdf/test4-1.qdf b/qpdf/qtest/qpdf/test4-1.qdf new file mode 100644 index 00000000..98f93d0f --- /dev/null +++ b/qpdf/qtest/qpdf/test4-1.qdf @@ -0,0 +1,145 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 4 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /A [ + 1 + 5 + 3 + ] + /Author (Mr. Potato Head) + /B << + /A [ + 1 + 2 + 3 + ] + /B (B) + >> + /Title (Some Title Is Here) +>> +endobj + +3 0 obj +<< + /A 5 0 R + /B 6 0 R + /Subject (Subject) + /Title (Some Title Is Here) +>> +endobj + +4 0 obj +<< + /Count 1 + /Kids [ + 7 0 R + ] + /Type /Pages +>> +endobj + +5 0 obj +[ + 1 + 2 + 3 +] +endobj + +6 0 obj +<< + /A 5 0 R + /B (B) +>> +endobj + +%% Page 1 +7 0 obj +<< + /Contents 8 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 4 0 R + /Resources << + /Font << + /F1 10 0 R + >> + /ProcSet 11 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +8 0 obj +<< + /Length 9 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +9 0 obj +44 +endobj + +10 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +11 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 12 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000251 00000 n +0000000346 00000 n +0000000418 00000 n +0000000450 00000 n +0000000502 00000 n +0000000719 00000 n +0000000818 00000 n +0000000837 00000 n +0000000956 00000 n +trailer << + /Info 2 0 R + /QTest 3 0 R + /Root 1 0 R + /Size 12 + /ID [<c61bd35bada064f61e0a56aa9588064e><31415926535897932384626433832795>] +>> +startxref +992 +%%EOF diff --git a/qpdf/qtest/qpdf/test4-2.out b/qpdf/qtest/qpdf/test4-2.out new file mode 100644 index 00000000..e5e51762 --- /dev/null +++ b/qpdf/qtest/qpdf/test4-2.out @@ -0,0 +1 @@ +attempt to make a stream into a direct object diff --git a/qpdf/qtest/qpdf/test4-2.pdf b/qpdf/qtest/qpdf/test4-2.pdf new file mode 100644 index 00000000..0acf592c --- /dev/null +++ b/qpdf/qtest/qpdf/test4-2.pdf @@ -0,0 +1,104 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +8 0 obj +<< + % stream + /A 4 0 R +>> +endobj + +xref +0 9 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +0000000647 00000 n +trailer << + /Root 1 0 R + /Size 9 + /QTest 8 0 R + /ID [<c61bd35bada064f61e0a56aa9588064e><c61bd35bada064f61e0a56aa9588064e>] +>> +startxref +691 +%%EOF diff --git a/qpdf/qtest/qpdf/test4-3.out b/qpdf/qtest/qpdf/test4-3.out new file mode 100644 index 00000000..b0deab16 --- /dev/null +++ b/qpdf/qtest/qpdf/test4-3.out @@ -0,0 +1 @@ +loop detected while converting object from indirect to direct diff --git a/qpdf/qtest/qpdf/test4-3.pdf b/qpdf/qtest/qpdf/test4-3.pdf new file mode 100644 index 00000000..6e212619 --- /dev/null +++ b/qpdf/qtest/qpdf/test4-3.pdf @@ -0,0 +1,109 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 2 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /Count 1 + /Kids [ + 3 0 R + ] + /Type /Pages +>> +endobj + +%% Page 1 +3 0 obj +<< + /Contents 4 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 2 0 R + /Resources << + /Font << + /F1 6 0 R + >> + /ProcSet 7 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +4 0 obj +<< + /Length 5 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +5 0 obj +44 +endobj + +6 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +7 0 obj +[ + /PDF + /Text +] +endobj + +8 0 obj +<< + % loop + /A [ 1 2 9 0 R ] +>> +endobj + +9 0 obj +[ 4 5 8 0 R ] +endobj + +xref +0 10 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000161 00000 n +0000000376 00000 n +0000000475 00000 n +0000000494 00000 n +0000000612 00000 n +0000000647 00000 n +0000000699 00000 n +trailer << + /Root 1 0 R + /Size 10 + /QTest 8 0 R + /ID [<c61bd35bada064f61e0a56aa9588064e><c61bd35bada064f61e0a56aa9588064e>] +>> +startxref +730 +%%EOF diff --git a/qpdf/qtest/qpdf/test4-4.pdf b/qpdf/qtest/qpdf/test4-4.pdf new file mode 100644 index 00000000..e0856e3b --- /dev/null +++ b/qpdf/qtest/qpdf/test4-4.pdf @@ -0,0 +1,123 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 3 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /A 4 0 R + /B 5 0 R + /Subject (Subject) + /Title (Some Title Is Here) +>> +endobj + +3 0 obj +<< + /Count 1 + /Kids [ + 6 0 R + ] + /Type /Pages +>> +endobj + +4 0 obj +[ + 1 + 2 + 3 +] +endobj + +5 0 obj +<< + /A 4 0 R + /B (B) +>> +endobj + +%% Page 1 +6 0 obj +<< + /Contents 7 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 3 0 R + /Resources << + /Font << + /F1 9 0 R + >> + /ProcSet 10 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +7 0 obj +<< + /Length 8 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +8 0 obj +44 +endobj + +9 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +10 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 11 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000174 00000 n +0000000246 00000 n +0000000278 00000 n +0000000330 00000 n +0000000546 00000 n +0000000645 00000 n +0000000664 00000 n +0000000782 00000 n +trailer << + /QTest 2 0 R + /Root 1 0 R + /Size 11 + /ID [<c61bd35bada064f61e0a56aa9588064e><c893e7330be149468080ad6518819868>] +>> +startxref +818 +%%EOF diff --git a/qpdf/qtest/qpdf/test4-4.qdf b/qpdf/qtest/qpdf/test4-4.qdf new file mode 100644 index 00000000..98f93d0f --- /dev/null +++ b/qpdf/qtest/qpdf/test4-4.qdf @@ -0,0 +1,145 @@ +%PDF-1.3 +%¿÷¢þ +%QDF-1.0 + +1 0 obj +<< + /Pages 4 0 R + /Type /Catalog +>> +endobj + +2 0 obj +<< + /A [ + 1 + 5 + 3 + ] + /Author (Mr. Potato Head) + /B << + /A [ + 1 + 2 + 3 + ] + /B (B) + >> + /Title (Some Title Is Here) +>> +endobj + +3 0 obj +<< + /A 5 0 R + /B 6 0 R + /Subject (Subject) + /Title (Some Title Is Here) +>> +endobj + +4 0 obj +<< + /Count 1 + /Kids [ + 7 0 R + ] + /Type /Pages +>> +endobj + +5 0 obj +[ + 1 + 2 + 3 +] +endobj + +6 0 obj +<< + /A 5 0 R + /B (B) +>> +endobj + +%% Page 1 +7 0 obj +<< + /Contents 8 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 4 0 R + /Resources << + /Font << + /F1 10 0 R + >> + /ProcSet 11 0 R + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +8 0 obj +<< + /Length 9 0 R +>> +stream +BT + /F1 24 Tf + 72 720 Td + (Potato) Tj +ET +endstream +endobj + +9 0 obj +44 +endobj + +10 0 obj +<< + /BaseFont /Helvetica + /Encoding /WinAnsiEncoding + /Name /F1 + /Subtype /Type1 + /Type /Font +>> +endobj + +11 0 obj +[ + /PDF + /Text +] +endobj + +xref +0 12 +0000000000 65535 f +0000000025 00000 n +0000000079 00000 n +0000000251 00000 n +0000000346 00000 n +0000000418 00000 n +0000000450 00000 n +0000000502 00000 n +0000000719 00000 n +0000000818 00000 n +0000000837 00000 n +0000000956 00000 n +trailer << + /Info 2 0 R + /QTest 3 0 R + /Root 1 0 R + /Size 12 + /ID [<c61bd35bada064f61e0a56aa9588064e><31415926535897932384626433832795>] +>> +startxref +992 +%%EOF diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc new file mode 100644 index 00000000..7333cc69 --- /dev/null +++ b/qpdf/test_driver.cc @@ -0,0 +1,323 @@ +// This program tests miscellaneous functionality in the qpdf library +// that we don't want to pollute the qpdf program with. + +#include <qpdf/QPDF.hh> + +#include <qpdf/QUtil.hh> +#include <qpdf/QTC.hh> +#include <qpdf/Pl_StdioFile.hh> +#include <qpdf/QPDFWriter.hh> +#include <iostream> +#include <string.h> +#include <map> + +static char const* whoami = 0; + +void usage() +{ + std::cerr << "Usage: " << whoami << " n filename" << std::endl; + exit(2); +} + +void runtest(int n, char const* filename) +{ + QPDF pdf; + if (n == 0) + { + pdf.setAttemptRecovery(false); + } + pdf.processFile(filename); + + if ((n == 0) || (n == 1)) + { + QPDFObjectHandle trailer = pdf.getTrailer(); + QPDFObjectHandle qtest = trailer.getKey("/QTest"); + + if (! trailer.hasKey("/QTest")) + { + // This will always happen when /QTest is null because + // hasKey returns false for null keys regardless of + // whether the key exists or not. That way there's never + // any difference between a key that is present and null + // and a key that is absent. + QTC::TC("qpdf", "main QTest implicit"); + std::cout << "/QTest is implicit" << std::endl; + } + + QTC::TC("qpdf", "main QTest indirect", + qtest.isIndirect() ? 1 : 0); + std::cout << "/QTest is " + << (qtest.isIndirect() ? "in" : "") + << "direct" << std::endl; + + if (qtest.isNull()) + { + QTC::TC("qpdf", "main QTest null"); + std::cout << "/QTest is null" << std::endl; + } + else if (qtest.isBool()) + { + QTC::TC("qpdf", "main QTest bool", + qtest.getBoolValue() ? 1 : 0); + std::cout << "/QTest is Boolean with value " + << (qtest.getBoolValue() ? "true" : "false") + << std::endl; + } + else if (qtest.isInteger()) + { + QTC::TC("qpdf", "main QTest int"); + std::cout << "/QTest is an integer with value " + << qtest.getIntValue() << std::endl; + } + else if (qtest.isReal()) + { + QTC::TC("qpdf", "main QTest real"); + std::cout << "/QTest is a real number with value " + << qtest.getRealValue() << std::endl; + } + else if (qtest.isName()) + { + QTC::TC("qpdf", "main QTest name"); + std::cout << "/QTest is a name with value " + << qtest.getName() << std::endl; + } + else if (qtest.isString()) + { + QTC::TC("qpdf", "main QTest string"); + std::cout << "/QTest is a string with value " + << qtest.getStringValue() << std::endl; + } + else if (qtest.isArray()) + { + QTC::TC("qpdf", "main QTest array"); + int n = qtest.getArrayNItems(); + std::cout << "/QTest is an array with " + << n << " items" << std::endl; + for (int i = 0; i < n; ++i) + { + QTC::TC("qpdf", "main QTest array indirect", + qtest.getArrayItem(i).isIndirect() ? 1 : 0); + std::cout << " item " << i << " is " + << (qtest.getArrayItem(i).isIndirect() ? "in" : "") + << "direct" << std::endl; + } + } + else if (qtest.isDictionary()) + { + QTC::TC("qpdf", "main QTest dictionary"); + std::cout << "/QTest is a dictionary" << std::endl; + std::set<std::string> keys = qtest.getKeys(); + for (std::set<std::string>::iterator iter = keys.begin(); + iter != keys.end(); ++iter) + { + QTC::TC("qpdf", "main QTest dictionary indirect", + (qtest.getKey(*iter).isIndirect() ? 1 : 0)); + std::cout << " " << *iter << " is " + << (qtest.getKey(*iter).isIndirect() ? "in" : "") + << "direct" << std::endl; + } + } + else if (qtest.isStream()) + { + QTC::TC("qpdf", "main QTest stream"); + std::cout << "/QTest is a stream. Dictionary: " + << qtest.getDict().unparse() << std::endl; + + std::cout << "Raw stream data:" << std::endl; + std::cout.flush(); + PointerHolder<Pl_StdioFile> out = new Pl_StdioFile("raw", stdout); + qtest.pipeStreamData(out.getPointer(), false, false, false); + + std::cout << std::endl << "Uncompressed stream data:" << std::endl; + if (qtest.pipeStreamData(0, true, false, false)) + { + std::cout.flush(); + out = new Pl_StdioFile("filtered", stdout); + qtest.pipeStreamData(out.getPointer(), true, false, false); + std::cout << std::endl << "End of stream data" << std::endl; + } + else + { + std::cout << "Stream data is not filterable." << std::endl; + } + } + else + { + // Should not happen! + std::cout << "/QTest is an unknown object" << std::endl; + } + + std::cout << "unparse: " << qtest.unparse() << std::endl + << "unparseResolved: " << qtest.unparseResolved() + << std::endl; + } + else if (n == 2) + { + // Encrypted file. This test case is designed for a specific + // PDF file. + + QPDFObjectHandle trailer = pdf.getTrailer(); + std::cout << trailer.getKey("/Info"). + getKey("/CreationDate").getStringValue() << std::endl; + std::cout << trailer.getKey("/Info"). + getKey("/Producer").getStringValue() << std::endl; + + QPDFObjectHandle encrypt = trailer.getKey("/Encrypt"); + std::cout << encrypt.getKey("/O").unparse() << std::endl; + std::cout << encrypt.getKey("/U").unparse() << std::endl; + + QPDFObjectHandle root = pdf.getRoot(); + QPDFObjectHandle pages = root.getKey("/Pages"); + QPDFObjectHandle kids = pages.getKey("/Kids"); + QPDFObjectHandle page = kids.getArrayItem(1); // second page + QPDFObjectHandle contents = page.getKey("/Contents"); + PointerHolder<Pl_StdioFile> out = new Pl_StdioFile("filtered", stdout); + contents.pipeStreamData(out.getPointer(), true, false, false); + } + else if (n == 3) + { + QPDFObjectHandle streams = pdf.getTrailer().getKey("/QStreams"); + for (int i = 0; i < streams.getArrayNItems(); ++i) + { + QPDFObjectHandle stream = streams.getArrayItem(i); + std::cout << "-- stream " << i << " --" << std::endl; + std::cout.flush(); + PointerHolder<Pl_StdioFile> out = + new Pl_StdioFile("tokenized stream", stdout); + stream.pipeStreamData(out.getPointer(), true, true, false); + } + } + else if (n == 4) + { + // Mutability testing: Make /QTest direct recursively, then + // copy to /Info. Also make some other mutations so we can + // tell the difference and ensure that the original /QTest + // isn't effected. + QPDFObjectHandle trailer = pdf.getTrailer(); + QPDFObjectHandle qtest = trailer.getKey("/QTest"); + qtest.makeDirect(); + qtest.removeKey("/Subject"); + qtest.replaceKey("/Author", + QPDFObjectHandle::newString("Mr. Potato Head")); + // qtest.A and qtest.B.A were originally the same object. + // They no longer are after makeDirect(). Mutate one of them + // and ensure the other is not changed. + qtest.getKey("/A").setArrayItem(1, QPDFObjectHandle::newInteger(5)); + trailer.replaceKey("/Info", pdf.makeIndirectObject(qtest)); + QPDFWriter w(pdf, 0); + w.setQDFMode(true); + w.setStaticID(true); + w.write(); + + // Prevent "done" message from getting appended + exit(0); + } + else if (n == 5) + { + std::vector<QPDFObjectHandle> pages = pdf.getAllPages(); + int pageno = 0; + for (std::vector<QPDFObjectHandle>::iterator iter = pages.begin(); + iter != pages.end(); ++iter) + { + QPDFObjectHandle& page = *iter; + ++pageno; + + std::cout << "page " << pageno << ":" << std::endl; + + std::cout << " images:" << std::endl; + std::map<std::string, QPDFObjectHandle> images = + page.getPageImages(); + for (std::map<std::string, QPDFObjectHandle>::iterator iter = + images.begin(); iter != images.end(); ++iter) + { + std::string const& name = (*iter).first; + QPDFObjectHandle image = (*iter).second; + QPDFObjectHandle dict = image.getDict(); + int width = dict.getKey("/Width").getIntValue(); + int height = dict.getKey("/Height").getIntValue(); + std::cout << " " << name + << ": " << width << " x " << height + << std::endl; + } + + std::cout << " content:" << std::endl; + std::vector<QPDFObjectHandle> content = page.getPageContents(); + for (std::vector<QPDFObjectHandle>::iterator iter = content.begin(); + iter != content.end(); ++iter) + { + std::cout << " " << (*iter).unparse() << std::endl; + } + + std::cout << "end page " << pageno << std::endl; + } + + QPDFObjectHandle root = pdf.getRoot(); + QPDFObjectHandle qstrings = root.getKey("/QStrings"); + if (qstrings.isArray()) + { + std::cout << "QStrings:" << std::endl; + int n = qstrings.getArrayNItems(); + for (int i = 0; i < n; ++i) + { + std::cout << qstrings.getArrayItem(i).getUTF8Value() + << std::endl; + } + } + + QPDFObjectHandle qnumbers = root.getKey("/QNumbers"); + if (qnumbers.isArray()) + { + std::cout << "QNumbers:" << std::endl; + int n = qnumbers.getArrayNItems(); + for (int i = 0; i < n; ++i) + { + std::cout << QUtil::double_to_string( + qnumbers.getArrayItem(i).getNumericValue(), 3) + << std::endl; + } + } + } + else + { + throw QEXC::General(std::string("invalid test ") + + QUtil::int_to_string(n)); + } + + std::cout << "test " << n << " done" << std::endl; +} + +int main(int argc, char* argv[]) +{ + if ((whoami = strrchr(argv[0], '/')) == NULL) + { + whoami = argv[0]; + } + else + { + ++whoami; + } + // For libtool's sake.... + if (strncmp(whoami, "lt-", 3) == 0) + { + whoami += 3; + } + + if (argc != 3) + { + usage(); + } + + try + { + int n = atoi(argv[1]); + char const* filename = argv[2]; + runtest(n, filename); + } + catch (std::exception& e) + { + std::cerr << e.what() << std::endl; + exit(2); + } + + return 0; +} |