mirror of
https://github.com/qpdf/qpdf.git
synced 2024-11-17 01:55:09 +00:00
95 lines
2.9 KiB
Perl
95 lines
2.9 KiB
Perl
#!/usr/bin/env perl
|
|
require 5.008;
|
|
use warnings;
|
|
use strict;
|
|
|
|
unshift(@INC, '.');
|
|
require qpdf_test_helpers;
|
|
|
|
chdir("qpdf") or die "chdir testdir failed: $!\n";
|
|
|
|
require TestDriver;
|
|
|
|
cleanup();
|
|
|
|
my $td = new TestDriver('flatten-annotations');
|
|
|
|
my $n_tests = 0;
|
|
|
|
# manual-appearances was created by hand-coding appearance streams
|
|
# with graphics that make it easy to test matrix calculations. The
|
|
# result of flattening the annotations was compared visually with
|
|
# okular. Some PDF viewers don't actually display the original version
|
|
# correctly. The pages are as follows:
|
|
# - page 1: normal
|
|
# - page 2: rotate 90 with /F 20 (NoRotate)
|
|
# - page 3: non-trivial matrix
|
|
# - page 4: non-trivial matrix, rotate
|
|
# - page 5: rotate 180 with /F 20
|
|
# - page 6: rotate 90, /F 20, non-trivial matrix
|
|
# - page 7: flags: top is print, middle is screen, bottom is hidden
|
|
# - page 8: rotate 270 with /F 20
|
|
# - page 9: normal -- available for additional testing
|
|
#
|
|
# form-filled-by-acrobat was filled in using the Acrobat Reader
|
|
# android app. One of its appearance streams is actually an image.
|
|
#
|
|
# need-appearances.pdf is based on field-types.pdf with manual edits
|
|
# to turn on NeedAppearances, change /V for several fields, and add
|
|
# the comment annotation from comment-annotation.pdf. The test output
|
|
# includes a flattened version of the comment annotation but not of
|
|
# the form fields. Changes:
|
|
# - field-types.pdf has /NeedAppearances true
|
|
# - text1: blank -> abc
|
|
# - r1: 1 -> 2
|
|
# - list1: blank -> five
|
|
# - combolist1: blank -> pi
|
|
# - drop1: blank -> elephant
|
|
# - combodrop1: blank -> delta
|
|
|
|
my @annotation_files = (
|
|
'manual-appearances',
|
|
'form-filled-by-acrobat',
|
|
'comment-annotation',
|
|
'comment-annotation-direct',
|
|
'sample-form',
|
|
'need-appearances',
|
|
'need-appearances-more',
|
|
);
|
|
$n_tests += 2 * scalar(@annotation_files);
|
|
|
|
foreach my $f (@annotation_files)
|
|
{
|
|
my $exp_out = {$td->STRING => "", $td->EXIT_STATUS => 0};
|
|
if (-f "$f-warn.out")
|
|
{
|
|
$exp_out = {$td->FILE => "$f-warn.out", $td->EXIT_STATUS => 3};
|
|
}
|
|
$td->runtest("flatten $f",
|
|
{$td->COMMAND =>
|
|
"qpdf --qdf --static-id --no-original-object-ids" .
|
|
" --flatten-annotations=all $f.pdf a.pdf"},
|
|
$exp_out,
|
|
$td->NORMALIZE_NEWLINES);
|
|
$td->runtest("check output",
|
|
{$td->FILE => "a.pdf"},
|
|
{$td->FILE => "$f-out.pdf"});
|
|
}
|
|
|
|
$n_tests += 4;
|
|
foreach my $f (qw(screen print))
|
|
{
|
|
$td->runtest("flatten for $f",
|
|
{$td->COMMAND =>
|
|
"qpdf --qdf --static-id --no-original-object-ids" .
|
|
" --flatten-annotations=$f manual-appearances.pdf a.pdf"},
|
|
{$td->STRING => "", $td->EXIT_STATUS => 0},
|
|
$td->NORMALIZE_NEWLINES);
|
|
$td->runtest("check output",
|
|
{$td->FILE => "a.pdf"},
|
|
{$td->FILE => "manual-appearances-$f-out.pdf"});
|
|
}
|
|
|
|
cleanup();
|
|
$td->report($n_tests);
|