add methods for getting encryption data

git-svn-id: svn+q:///qpdf/trunk@733 71b93d88-0707-0410-a8cf-f5a4172ac649
This commit is contained in:
Jay Berkenbilt 2009-09-27 20:05:38 +00:00
parent 40f4b1ef52
commit 8d7bb3ff50
58 changed files with 859 additions and 29 deletions

View File

@ -1,5 +1,9 @@
2009-09-27 Jay Berkenbilt <ejb@ql.org>
* Add several methods to query permissions controlled by the
encryption dictionary. Note that qpdf does not enforce these
permissions even though it allows the user to query them.
* The function QPDF::getUserPassword returned the user password
with the required padding as specified by the PDF specification.
This is seldom useful to users. This function has been replaced

2
TODO
View File

@ -12,8 +12,6 @@
Stefan Heinsen <stefan.heinsen@gmx.de> in August, 2009. He seems
to like to send encrypted mail. (key 01FCC336)
* Translate the encryption dictionary data to human-readable form
* Improve the error message generated when processing the broken
files...ideally we should provide the object number currently being
read

View File

@ -128,6 +128,29 @@ class QPDF
DLL_EXPORT
bool isEncrypted() const;
DLL_EXPORT
bool isEncrypted(int& R, int& P);
// Encryption permissions -- not enforced by QPDF
DLL_EXPORT
bool allowAccessibility();
DLL_EXPORT
bool allowExtractAll();
DLL_EXPORT
bool allowPrintLowRes();
DLL_EXPORT
bool allowPrintHighRes();
DLL_EXPORT
bool allowModifyAssembly();
DLL_EXPORT
bool allowModifyForm();
DLL_EXPORT
bool allowModifyAnnotation();
DLL_EXPORT
bool allowModifyOther();
DLL_EXPORT
bool allowModifyAll();
// Helper function to trim padding from user password. Calling
// trim_user_password on the result of getPaddedUserPassword gives
// getTrimmedUserPassword's result.

View File

@ -161,6 +161,25 @@ extern "C" {
DLL_EXPORT
QPDF_BOOL qpdf_is_encrypted(qpdf_data qpdf);
DLL_EXPORT
QPDF_BOOL qpdf_allow_accessibility(qpdf_data qpdf);
DLL_EXPORT
QPDF_BOOL qpdf_allow_extract_all(qpdf_data qpdf);
DLL_EXPORT
QPDF_BOOL qpdf_allow_print_low_res(qpdf_data qpdf);
DLL_EXPORT
QPDF_BOOL qpdf_allow_print_high_res(qpdf_data qpdf);
DLL_EXPORT
QPDF_BOOL qpdf_allow_modify_assembly(qpdf_data qpdf);
DLL_EXPORT
QPDF_BOOL qpdf_allow_modify_form(qpdf_data qpdf);
DLL_EXPORT
QPDF_BOOL qpdf_allow_modify_annotation(qpdf_data qpdf);
DLL_EXPORT
QPDF_BOOL qpdf_allow_modify_other(qpdf_data qpdf);
DLL_EXPORT
QPDF_BOOL qpdf_allow_modify_all(qpdf_data qpdf);
/* WRITE FUNCTIONS */
/* Set up for writing. No writing is actually performed until the

View File

@ -463,3 +463,185 @@ QPDF::isEncrypted() const
{
return this->encrypted;
}
DLL_EXPORT
bool
QPDF::isEncrypted(int& R, int& P)
{
if (this->encrypted)
{
QPDFObjectHandle trailer = getTrailer();
QPDFObjectHandle encrypt = trailer.getKey("/Encrypt");
QPDFObjectHandle Pkey = encrypt.getKey("/P");
QPDFObjectHandle Rkey = encrypt.getKey("/R");
P = Pkey.getIntValue();
R = Rkey.getIntValue();
return true;
}
else
{
return false;
}
}
static bool
is_bit_set(int P, int bit)
{
// Bits in P are numbered from 1 in the spec
return (P & (1 << (bit - 1)));
}
DLL_EXPORT
bool
QPDF::allowAccessibility()
{
int R = 0;
int P = 0;
bool status = true;
if (isEncrypted(R, P))
{
if (R < 3)
{
status = is_bit_set(P, 5);
}
else
{
status = is_bit_set(P, 10);
}
}
return status;
}
DLL_EXPORT
bool
QPDF::allowExtractAll()
{
int R = 0;
int P = 0;
bool status = true;
if (isEncrypted(R, P))
{
status = is_bit_set(P, 5);
}
return status;
}
DLL_EXPORT
bool
QPDF::allowPrintLowRes()
{
int R = 0;
int P = 0;
bool status = true;
if (isEncrypted(R, P))
{
status = is_bit_set(P, 3);
}
return status;
}
DLL_EXPORT
bool
QPDF::allowPrintHighRes()
{
int R = 0;
int P = 0;
bool status = true;
if (isEncrypted(R, P))
{
status = is_bit_set(P, 3);
if ((R >= 3) && (! is_bit_set(P, 12)))
{
status = false;
}
}
return status;
}
DLL_EXPORT
bool
QPDF::allowModifyAssembly()
{
int R = 0;
int P = 0;
bool status = true;
if (isEncrypted(R, P))
{
if (R < 3)
{
status = is_bit_set(P, 4);
}
else
{
status = is_bit_set(P, 11);
}
}
return status;
}
DLL_EXPORT
bool
QPDF::allowModifyForm()
{
int R = 0;
int P = 0;
bool status = true;
if (isEncrypted(R, P))
{
if (R < 3)
{
status = is_bit_set(P, 6);
}
else
{
status = is_bit_set(P, 9);
}
}
return status;
}
DLL_EXPORT
bool
QPDF::allowModifyAnnotation()
{
int R = 0;
int P = 0;
bool status = true;
if (isEncrypted(R, P))
{
status = is_bit_set(P, 6);
}
return status;
}
DLL_EXPORT
bool
QPDF::allowModifyOther()
{
int R = 0;
int P = 0;
bool status = true;
if (isEncrypted(R, P))
{
status = is_bit_set(P, 4);
}
return status;
}
DLL_EXPORT
bool
QPDF::allowModifyAll()
{
int R = 0;
int P = 0;
bool status = true;
if (isEncrypted(R, P))
{
status = (is_bit_set(P, 4) && is_bit_set(P, 6));
if (R >= 3)
{
status = status && (is_bit_set(P, 9) && is_bit_set(P, 11));
}
}
return status;
}

View File

@ -185,6 +185,69 @@ QPDF_BOOL qpdf_is_encrypted(qpdf_data qpdf)
return (qpdf->qpdf->isEncrypted() ? QPDF_TRUE : QPDF_FALSE);
}
DLL_EXPORT
QPDF_BOOL qpdf_allow_accessibility(qpdf_data qpdf)
{
QTC::TC("qpdf", "qpdf-c called qpdf_allow_accessibility");
return qpdf->qpdf->allowAccessibility();
}
DLL_EXPORT
QPDF_BOOL qpdf_allow_extract_all(qpdf_data qpdf)
{
QTC::TC("qpdf", "qpdf-c called qpdf_allow_extract_all");
return qpdf->qpdf->allowExtractAll();
}
DLL_EXPORT
QPDF_BOOL qpdf_allow_print_low_res(qpdf_data qpdf)
{
QTC::TC("qpdf", "qpdf-c called qpdf_allow_print_low_res");
return qpdf->qpdf->allowPrintLowRes();
}
DLL_EXPORT
QPDF_BOOL qpdf_allow_print_high_res(qpdf_data qpdf)
{
QTC::TC("qpdf", "qpdf-c called qpdf_allow_print_high_res");
return qpdf->qpdf->allowPrintHighRes();
}
DLL_EXPORT
QPDF_BOOL qpdf_allow_modify_assembly(qpdf_data qpdf)
{
QTC::TC("qpdf", "qpdf-c called qpdf_allow_modify_assembly");
return qpdf->qpdf->allowModifyAssembly();
}
DLL_EXPORT
QPDF_BOOL qpdf_allow_modify_form(qpdf_data qpdf)
{
QTC::TC("qpdf", "qpdf-c called qpdf_allow_modify_form");
return qpdf->qpdf->allowModifyForm();
}
DLL_EXPORT
QPDF_BOOL qpdf_allow_modify_annotation(qpdf_data qpdf)
{
QTC::TC("qpdf", "qpdf-c called qpdf_allow_modify_annotation");
return qpdf->qpdf->allowModifyAnnotation();
}
DLL_EXPORT
QPDF_BOOL qpdf_allow_modify_other(qpdf_data qpdf)
{
QTC::TC("qpdf", "qpdf-c called qpdf_allow_modify_other");
return qpdf->qpdf->allowModifyOther();
}
DLL_EXPORT
QPDF_BOOL qpdf_allow_modify_all(qpdf_data qpdf)
{
QTC::TC("qpdf", "qpdf-c called qpdf_allow_modify_all");
return qpdf->qpdf->allowModifyAll();
}
DLL_EXPORT
QPDF_ERROR_CODE qpdf_init_write(qpdf_data qpdf, char const* filename)
{

View File

@ -29,6 +29,24 @@ static void test01(char const* infile,
if (qpdf_is_encrypted(qpdf))
{
printf("user password: %s\n", qpdf_get_user_password(qpdf));
printf("extract for accessibility: %d\n",
qpdf_allow_accessibility(qpdf));
printf("extract for any purpose: %d\n",
qpdf_allow_extract_all(qpdf));
printf("print low resolution: %d\n",
qpdf_allow_print_low_res(qpdf));
printf("print high resolution: %d\n",
qpdf_allow_print_high_res(qpdf));
printf("modify document assembly: %d\n",
qpdf_allow_modify_assembly(qpdf));
printf("modify forms: %d\n",
qpdf_allow_modify_form(qpdf));
printf("modify annotations: %d\n",
qpdf_allow_modify_annotation(qpdf));
printf("modify other: %d\n",
qpdf_allow_modify_other(qpdf));
printf("modify anything: %d\n",
qpdf_allow_modify_all(qpdf));
}
report_errors();
}

View File

@ -165,21 +165,44 @@ void usage(std::string const& msg)
exit(EXIT_ERROR);
}
static std::string show_bool(bool v)
{
return v ? "allowed" : "not allowed";
}
static void show_encryption(QPDF& pdf)
{
// Extract /P from /Encrypt
if (! pdf.isEncrypted())
int R = 0;
int P = 0;
if (! pdf.isEncrypted(R, P))
{
std::cout << "File is not encrypted" << std::endl;
}
else
{
QPDFObjectHandle trailer = pdf.getTrailer();
QPDFObjectHandle encrypt = trailer.getKey("/Encrypt");
QPDFObjectHandle P = encrypt.getKey("/P");
std::cout << "P = " << P.getIntValue() << std::endl;
std::cout << "R = " << R << std::endl;
std::cout << "P = " << P << std::endl;
std::string user_password = pdf.getTrimmedUserPassword();
std::cout << "User password = " << user_password << std::endl;
std::cout << "extract for accessibility: "
<< show_bool(pdf.allowAccessibility()) << std::endl;
std::cout << "extract for any purpose: "
<< show_bool(pdf.allowExtractAll()) << std::endl;
std::cout << "print low resolution: "
<< show_bool(pdf.allowPrintLowRes()) << std::endl;
std::cout << "print high resolution: "
<< show_bool(pdf.allowPrintHighRes()) << std::endl;
std::cout << "modify document assembly: "
<< show_bool(pdf.allowModifyAssembly()) << std::endl;
std::cout << "modify forms: "
<< show_bool(pdf.allowModifyForm()) << std::endl;
std::cout << "modify annotations: "
<< show_bool(pdf.allowModifyAnnotation()) << std::endl;
std::cout << "modify other: "
<< show_bool(pdf.allowModifyOther()) << std::endl;
std::cout << "modify anything: "
<< show_bool(pdf.allowModifyAll()) << std::endl;
}
}

View File

@ -144,3 +144,12 @@ qpdf-c called qpdf_set_r2_encryption_parameters 0
qpdf-c called qpdf_set_r3_encryption_parameters 0
qpdf-c called qpdf_set_linearization 0
qpdf-c called qpdf_write 3
qpdf-c called qpdf_allow_accessibility 0
qpdf-c called qpdf_allow_extract_all 0
qpdf-c called qpdf_allow_print_low_res 0
qpdf-c called qpdf_allow_print_high_res 0
qpdf-c called qpdf_allow_modify_assembly 0
qpdf-c called qpdf_allow_modify_form 0
qpdf-c called qpdf_allow_modify_annotation 0
qpdf-c called qpdf_allow_modify_other 0
qpdf-c called qpdf_allow_modify_all 0

View File

@ -683,33 +683,48 @@ $td->notify("--- Encryption Tests ---");
# 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.
# Values: basename, password, encryption flags, /P Encrypt key,
# extract-for-accessibility, extract-for-any-purpose,
# print-low-res, print-high-res, modify-assembly, modify-forms,
# modify-annotate, modify-other, modify-all
my @encrypted_files =
(['base', ''],
['R3,V2', '',
'-accessibility=n -extract=n -print=full -modify=all', -532],
'-accessibility=n -extract=n -print=full -modify=all', -532,
0, 0, 1, 1, 1, 1, 1, 1, 1],
['R3,V2,U=view', 'view',
'-accessibility=y -extract=n -print=none -modify=none', -3392],
'-accessibility=y -extract=n -print=none -modify=none', -3392,
1, 0, 0, 0, 0, 0, 0, 0, 0],
['R3,V2,O=master', 'master',
'-accessibility=n -extract=y -print=none -modify=annotate', -2576],
'-accessibility=n -extract=y -print=none -modify=annotate', -2576,
0, 1, 0, 0, 1, 1, 1, 0, 0],
['R3,V2,O=master', '',
'-accessibility=n -extract=n -print=none -modify=form', -2624],
'-accessibility=n -extract=n -print=none -modify=form', -2624,
0, 0, 0, 0, 1, 1, 0, 0, 0],
['R3,V2,U=view,O=master', 'view',
'-accessibility=n -extract=n -print=none -modify=assembly', -2880],
'-accessibility=n -extract=n -print=none -modify=assembly', -2880,
0, 0, 0, 0, 1, 0, 0, 0, 0],
['R3,V2,U=view,O=master', 'master',
'-accessibility=n -print=low', -2564],
'-accessibility=n -print=low', -2564,
0, 1, 1, 0, 1, 1, 1, 1, 1],
['R2,V1', '',
'-print=n -modify=n -extract=n -annotate=n', -64],
'-print=n -modify=n -extract=n -annotate=n', -64,
0, 0, 0, 0, 0, 0, 0, 0, 0],
['R2,V1,U=view', 'view',
'-print=y -modify=n -extract=n -annotate=n', -60],
'-print=y -modify=n -extract=n -annotate=n', -60,
0, 0, 1, 1, 0, 0, 0, 0, 0],
['R2,V1,O=master', 'master',
'-print=n -modify=y -extract=n -annotate=n', -56],
'-print=n -modify=y -extract=n -annotate=n', -56,
0, 0, 0, 0, 1, 0, 0, 1, 0],
['R2,V1,O=master', '',
'-print=n -modify=n -extract=y -annotate=n', -48],
'-print=n -modify=n -extract=y -annotate=n', -48,
1, 1, 0, 0, 0, 0, 0, 0, 0],
['R2,V1,U=view,O=master', 'view',
'-print=n -modify=n -extract=n -annotate=y', -32],
'-print=n -modify=n -extract=n -annotate=y', -32,
0, 0, 0, 0, 0, 1, 1, 0, 0],
['R2,V1,U=view,O=master', 'master',
'', -4],
'', -4,
1, 1, 1, 1, 1, 1, 1, 1, 1],
['long-password', 'asdf asdf asdf asdf asdf asdf qwer'],
['long-password', 'asdf asdf asdf asdf asdf asdf qw']);
@ -732,7 +747,23 @@ $td->runtest("recheck encrypted file",
foreach my $d (@encrypted_files)
{
my ($file, $pass, $xeflags, $P) = @$d;
my ($file, $pass, $xeflags, $P,
$accessible, $extract, $printlow, $printhigh,
$modifyassembly, $modifyform, $modifyannot,
$modifyother, $modifyall) = @$d;
my $f = sub { $_[0] ? "allowed" : "not allowed" };
my $enc_details =
"extract for accessibility: " . &$f($accessible) . "\n" .
"extract for any purpose: " . &$f($extract) . "\n" .
"print low resolution: " . &$f($printlow) . "\n" .
"print high resolution: " . &$f($printhigh) . "\n" .
"modify document assembly: " . &$f($modifyassembly) . "\n" .
"modify forms: " . &$f($modifyform) . "\n" .
"modify annotations: " . &$f($modifyannot) . "\n" .
"modify other: " . &$f($modifyother) . "\n" .
"modify anything: " . &$f($modifyall) . "\n";
# Test writing to stdout
$td->runtest("decrypt $file",
{$td->COMMAND =>
@ -776,8 +807,9 @@ foreach my $d (@encrypted_files)
{$td->COMMAND =>
"qpdf --show-encryption --password=\"$pass\"" .
" $file.enc2"},
{$td->STRING => "P = $P\nUser password = $upass\n",
$td->EXIT_STATUS => 0},
{$td->STRING => "R = $R\nP = $P\n" .
"User password = $upass\n$enc_details",
$td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("decrypt again",
{$td->COMMAND =>
@ -799,8 +831,9 @@ foreach my $d (@encrypted_files)
{$td->COMMAND =>
"qpdf --show-encryption --password=\"$pass\"" .
" $file.enc4"},
{$td->STRING => "P = $P\nUser password = $upass\n",
$td->EXIT_STATUS => 0},
{$td->STRING => "R = $R\nP = $P\n" .
"User password = $upass\n$enc_details",
$td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
}
}
@ -828,8 +861,9 @@ $td->runtest("linearize encrypted file",
{$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->COMMAND => "qpdf --show-encryption a.pdf",
$td->FILTER => "grep -v allowed"},
{$td->STRING => "R = 2\nP = -60\nUser password = \n",
$td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check linearization",
@ -844,8 +878,9 @@ $td->runtest("linearize and encrypt file",
{$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->COMMAND => "qpdf --show-encryption --password=owner a.pdf",
$td->FILTER => "grep -v allowed"},
{$td->STRING => "R = 3\nP = -4\nUser password = user\n",
$td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
$td->runtest("check linearization",

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 0
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is not linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.4
linearized: 0
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.4
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is not linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 1
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.4
linearized: 1
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.4
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 0
encrypted: 1
user password:
extract for accessibility: 0
extract for any purpose: 0
print low resolution: 1
print high resolution: 1
modify document assembly: 0
modify forms: 0
modify annotations: 0
modify other: 0
modify anything: 0

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 2
P = -60
User password =
extract for accessibility: not allowed
extract for any purpose: not allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: not allowed
modify forms: not allowed
modify annotations: not allowed
modify other: not allowed
modify anything: not allowed
File is not linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.3
linearized: 0
encrypted: 1
user password:
extract for accessibility: 0
extract for any purpose: 0
print low resolution: 1
print high resolution: 1
modify document assembly: 0
modify forms: 0
modify annotations: 0
modify other: 0
modify anything: 0

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.3
R = 2
P = -60
User password =
extract for accessibility: not allowed
extract for any purpose: not allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: not allowed
modify forms: not allowed
modify annotations: not allowed
modify other: not allowed
modify anything: not allowed
File is not linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 1
encrypted: 1
user password:
extract for accessibility: 0
extract for any purpose: 0
print low resolution: 1
print high resolution: 1
modify document assembly: 0
modify forms: 0
modify annotations: 0
modify other: 0
modify anything: 0

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 2
P = -60
User password =
extract for accessibility: not allowed
extract for any purpose: not allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: not allowed
modify forms: not allowed
modify annotations: not allowed
modify other: not allowed
modify anything: not allowed
File is linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.3
linearized: 1
encrypted: 1
user password:
extract for accessibility: 0
extract for any purpose: 0
print low resolution: 1
print high resolution: 1
modify document assembly: 0
modify forms: 0
modify annotations: 0
modify other: 0
modify anything: 0

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.3
R = 2
P = -60
User password =
extract for accessibility: not allowed
extract for any purpose: not allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: not allowed
modify forms: not allowed
modify annotations: not allowed
modify other: not allowed
modify anything: not allowed
File is linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 0
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is not linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 0
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is not linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 1
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 1
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 0
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is not linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.4
linearized: 0
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.4
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is not linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 1
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.4
linearized: 1
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.4
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 0
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is not linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.4
linearized: 0
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.4
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is not linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 1
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.4
linearized: 1
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.4
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 0
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is not linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 0
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is not linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 1
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is linearized
No errors found

View File

@ -2,3 +2,12 @@ version: 1.5
linearized: 1
encrypted: 1
user password:
extract for accessibility: 1
extract for any purpose: 1
print low resolution: 1
print high resolution: 1
modify document assembly: 1
modify forms: 1
modify annotations: 1
modify other: 1
modify anything: 1

View File

@ -1,6 +1,16 @@
checking a.pdf
PDF Version: 1.5
R = 3
P = -4
User password =
extract for accessibility: allowed
extract for any purpose: allowed
print low resolution: allowed
print high resolution: allowed
modify document assembly: allowed
modify forms: allowed
modify annotations: allowed
modify other: allowed
modify anything: allowed
File is linearized
No errors found