diff options
author | Karl Berry <karl@freefriends.org> | 2010-09-08 23:09:42 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-09-08 23:09:42 +0000 |
commit | 09c06007c38c5bd1bfe5a3b367fe3a273277da8d (patch) | |
tree | 6eec50f8ad3b635e9d549d2ddd061baba211af86 /Build/source/texk | |
parent | ee2de76f7db0b19a657a7f3b9ba8768bc8e69e37 (diff) |
pdfcrop 1.29 (26aug10ff.)
git-svn-id: svn://tug.org/texlive/trunk@19616 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk')
-rwxr-xr-x | Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl | 756 |
1 files changed, 0 insertions, 756 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl b/Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl index 16ff326b71d..e69de29bb2d 100755 --- a/Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl +++ b/Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl @@ -1,756 +0,0 @@ -eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q' - if 0; -use strict; -$^W=1; # turn warning on -# -# pdfcrop.pl -# -# Copyright (C) 2002, 2004, 2005, 2008, 2009 Heiko Oberdiek. -# -# This program may be distributed and/or modified under the -# conditions of the LaTeX Project Public License, either version 1.2 -# of this license or (at your option) any later version. -# The latest version of this license is in -# http://www.latex-project.org/lppl.txt -# and version 1.2 or later is part of all distributions of LaTeX -# version 1999/12/01 or later. -# -# See file "README" for a list of files that belong to this project. -# -# This file "pdfcrop.pl" may be renamed to "pdfcrop" -# for installation purposes. -# -my $file = "pdfcrop.pl"; -my $program = uc($&) if $file =~ /^\w+/; -my $version = "1.22"; -my $date = "2009/12/29"; -my $author = "Heiko Oberdiek"; -my $copyright = "Copyright (c) 2002-2009 by $author."; -# -# Reqirements: Perl5, Ghostscript -# History: -# 2002/10/30 v1.0: First release. -# 2002/10/30 v1.1: Option --hires added. -# 2002/11/04 v1.2: "nul" instead of "/dev/null" for windows. -# 2002/11/23 v1.3: Use of File::Spec module's "devnull" call. -# 2002/11/29 v1.4: Option --papersize added. -# 2004/06/24 v1.5: Clear map file entries so that pdfTeX -# does not touch the fonts. -# 2004/06/26 v1.6: Use mgs.exe instead of gswin32c.exe for MIKTEX. -# 2005/03/11 v1.7: Support of spaces in file names -# (open("-|") is used for ghostscript call). -# 2008/01/09 v1.8: Fix for moving the temporary file to the output -# file across file system boundaries. -# 2008/04/05 v1.9: Options --resolution and --bbox added. -# 2008/07/16 v1.10: Support for XeTeX added with new options -# --pdftex, --xetex, and --xetexcmd. -# 2008/07/22 v1.11: Workaround for open("-|"). -# 2008/07/23 v1.12: Workarounds for the workaround (error detection, ...). -# 2008/07/24 v1.13: open("-|")/workaround removed. -# Input files with unsafe file names are linked/copied -# to temporary file with safe file name. -# 2008/09/12 v1.14: Error detection for invalid Bounding Boxes. -# 2009/07/14 v1.15: Fix for negative coordinates in Bounding Boxes -# (David Menestrina). -# 2009/07/16 v1.16: Security fixes: -# * -dSAFER added for Ghostscript, -# * -no-shell-escape added for pdfTeX/XeTeX. -# 2009/07/17 v1.17: Security fixes: -# * Backticks and whitespace are forbidden -# for options --(gs|pdftex|xetex)cmd. -# * Validation of options --papersize and --resolution. -# 2009/07/18 v1.18: * Restricted mode added. -# * Option --version added. -# 2009/09/24 v1.19: * Ghostscript detection rewritten. -# * Cygwin: `gs' is preferred to `gswin32c'. -# 2009/10/06 v1.20: * File name sanitizing in .tex file. -# 2009/12/21 v1.21: * Option --ini added for IniTeX mode. -# * Option --luatex and --luatexcmd added for LuaTeX. -# 2009/12/29 v1.22: * Syntax description for option --bbox fixed -# (Lukas Prochazka). - -### program identification -my $title = "$program $version, $date - $copyright\n"; - -### error strings -my $Error = "!!! Error:"; # error prefix - -### make ENV safer -delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; - -### string constants for Ghostscript run -# get Ghostscript command name -$::opt_gscmd = ''; -sub find_ghostscript () { - return if $::opt_gscmd; - my $system = 'unix'; - $system = "dos" if $^O =~ /dos/i; - $system = "os2" if $^O =~ /os2/i; - $system = "win" if $^O =~ /mswin32/i; - $system = "cygwin" if $^O =~ /cygwin/i; - $system = "miktex" if defined($ENV{"TEXSYSTEM"}) and - $ENV{"TEXSYSTEM"} =~ /miktex/i; - print "* System: $system\n" if $::opt_debug; - my %candidates = ( - 'unix' => [qw|gs gsc|], - 'dos' => [qw|gs386 gs|], - 'os2' => [qw|gsos2 gs|], - 'win' => [qw|gswin32c gs|], - 'cygwin' => [qw|gs gswin32c|], - 'miktex' => [qw|mgs gswin32c gs|] - ); - my %ext = ( - 'unix' => '', - 'dos' => '.exe', - 'os2' => '.exe', - 'win' => '.exe', - 'cygwin' => '.exe', - 'miktex' => '.exe' - ); - my $candidates_ref = $candidates{$system}; - my $ext = $ext{$system}; - use File::Spec; - my @path = File::Spec->path(); - my $found = 0; - foreach my $candidate (@$candidates_ref) { - foreach my $dir (@path) { - my $file = File::Spec->catfile($dir, "$candidate$ext"); - if (-x $file) { - $::opt_gscmd = $candidate; - $found = 1; - print "* Found ($candidate): $file\n" if $::opt_debug; - last; - } - print "* Not found ($candidate): $file\n" if $::opt_debug; - } - last if $found; - } - if ($found) { - print "* Autodetected ghostscript command: $::opt_gscmd\n" if $::opt_debug; - } - else { - $::opt_gscmd = $$candidates_ref[0]; - print "* Default ghostscript command: $::opt_gscmd\n" if $::opt_debug; - } -} - -# Windows detection (no SIGHUP) -my $Win = 0; -$Win = 1 if $^O =~ /mswin32/i; -$Win = 1 if $^O =~ /cygwin/i; - -# restricted mode -my $restricted = 0; -if ($0 =~ /rpdfcrop/ or $0 =~ /restricted/) { - $restricted = 1; -} - -# "null" device -use File::Spec::Functions qw(devnull); -my $null = devnull(); - -### variables -my $inputfile = ""; -my $outputfile = ""; -my $tmp = "tmp-\L$program\E-$$"; - -### paper sizes - -my @papersizes = qw[ - 11x17 ledger legal letter lettersmall - archE archD archC archB archA - a0 a1 a2 a3 a4 a4small a5 a6 a7 a8 a9 a10 - isob0 isob1 isob2 isob3 isob4 isob5 isob6 - c0 c1 c2 c3 c4 c5 c6 - jisb0 jisb1 jisb2 jisb3 jisb4 jisb5 jisb6 - b0 b1 b2 b3 b4 b5 - flsa flse halfletter -]; -my %papersizes; -foreach (@papersizes) { - $papersizes{$_} = 1; -} - -### option variables -my @bool = ("false", "true"); -$::opt_version = 0; -$::opt_help = 0; -$::opt_debug = 0; -$::opt_verbose = 0; -$::opt_pdftexcmd = "pdftex"; -$::opt_xetexcmd = "xetex"; -$::opt_luatexcmd = "luatex"; -$::opt_tex = "pdftex"; -$::opt_margins = "0 0 0 0"; -$::opt_clip = 0; -$::opt_hires = 0; -$::opt_papersize = ""; -$::opt_resolution = ""; -$::opt_bbox = ""; -$::opt_initex = 0; - -sub usage ($) { - my $ret = shift; - find_ghostscript(); - my $usage = <<"END_OF_USAGE"; -${title}Syntax: \L$program\E [options] <input[.pdf]> [output file] -Function: Margins are calculated and removed for each page in the file. -Options: (defaults:) - --help print usage - --version print version number - --(no)verbose verbose printing ($bool[$::opt_verbose]) - --(no)debug debug informations ($bool[$::opt_debug]) - --gscmd <name> call of ghostscript ($::opt_gscmd) - --pdftex | --xetex | --luatex - use pdfTeX | use XeTeX | use LuaTeX ($::opt_tex) - --pdftexcmd <name> call of pdfTeX ($::opt_pdftexcmd) - --xetexcmd <name> call of XeTeX ($::opt_xetexcmd) - --luatexcmd <name> call of LuaTeX ($::opt_luatexcmd) - --margins "<left> <top> <right> <bottom>" ($::opt_margins) - add extra margins, unit is bp. If only one number is - given, then it is used for all margins, in the case - of two numbers they are also used for right and bottom. - --(no)clip clipping support, if margins are set ($bool[$::opt_clip]) - (not available for --xetex) - --(no)hires using `%%HiResBoundingBox' ($bool[$::opt_hires]) - instead of `%%BoundingBox' - --(no)ini use iniTeX variant of the TeX compiler ($bool[$::opt_initex]) -Expert options: - --restricted turn on restricted mode ($bool[$restricted]) - --papersize <foo> parameter for gs's -sPAPERSIZE=<foo>, - use only with older gs versions <7.32 ($::opt_papersize) - --resolution <xres>x<yres> () - --resolution <res> pass argument to ghostscript's option -r - Example: --resolution 72 - --bbox "<left> <bottom> <right> <top>" () - override bounding box found by ghostscript - with origin at the lower left corner -Examples: - \L$program\E --margins 10 input.pdf output.pdf - \L$program\E --margins '5 10 5 20' --clip input.pdf output.pdf -In case of errors: - Try option --verbose first to get more information. -In case of bugs: - Please, use option --debug for bug reports. -END_OF_USAGE - if ($ret) { - die $usage; - } - else { - print $usage; - exit(0); - } -} - -### process options -my @OrgArgv = @ARGV; -use Getopt::Long; -GetOptions( - "help!", - "version!", - "debug!", - "verbose!", - "gscmd=s", - "pdftexcmd=s", - "xetexcmd=s", - "luatexcmd=s", - "pdftex" => sub { $::opt_tex = 'pdftex'; }, - "xetex" => sub { $::opt_tex = 'xetex'; }, - "luatex" => sub { $::opt_tex = 'luatex'; }, - "initex!", - "margins=s", - "clip!", - "hires!", - "papersize=s", - "resolution=s", - "bbox=s", - "restricted" => sub { $restricted = 1; }, -) or usage(1); -!$::opt_help or usage(0); - -if ($::opt_version) { - print "$version\n"; - exit(0); -} - -$::opt_verbose = 1 if $::opt_debug; - -@ARGV >= 1 or usage(1); - -print $title; - -find_ghostscript(); - -if ($::opt_bbox) { - $::opt_bbox =~ s/^\s+//; - $::opt_bbox =~ s/\s+$//; - $::opt_bbox =~ s/\s+/ /; - if ($::opt_bbox =~ /^-?\d*\.?\d+ -?\d*\.?\d+ -?\d*\.?\d+ -?\d*\.?\d+$/) { - print "* Explicite Bounding Box: $::opt_bbox\n" if $::opt_debug; - } - else { - die "$Error Parse error (option --bbox \"$::opt_bbox\")!\n"; - } -} - -@ARGV <= 2 or die "$Error Too many files!\n"; - -### input file -$inputfile = shift @ARGV; - -if (! -f $inputfile) { - if (-f "$inputfile.pdf") { - $inputfile .= ".pdf"; - } - else { - die "$Error Input file `$inputfile' not found!\n"; - } -} - -print "* Input file: $inputfile\n" if $::opt_debug; - -### output file -if (@ARGV) { - $outputfile = shift @ARGV; -} -else { - $outputfile = $inputfile; - $outputfile =~ s/\.pdf$//i; - $outputfile .= "-crop.pdf"; -} - -print "* Output file: $outputfile\n" if $::opt_debug; - -if (($::opt_tex eq 'xetex') && $::opt_clip) { - die "$Error No clipping support for XeTeX!\n"; -} - -### margins -my ($llx, $lly, $urx, $ury) = (0, 0, 0, 0); -if ($::opt_margins =~ - /^\s*([\-\.\d]+)\s+([\-\.\d]+)\s+([\-\.\d]+)\s+([\-\.\d]+)\s*$/) { - ($llx, $lly, $urx, $ury) = ($1, $2, $3, $4); -} -else { - if ($::opt_margins =~ /^\s*([\-\.\d]+)\s+([\-\.\d]+)\s*$/) { - ($llx, $lly, $urx, $ury) = ($1, $2, $1, $2); - } - else { - if ($::opt_margins =~ /^\s*([\-\.\d]+)\s*$/) { - ($llx, $lly, $urx, $ury) = ($1, $1, $1, $1); - } - else { - die "$Error Parse error (option --margins)!\n"; - } - } -} -print "* Margins: $llx $lly $urx $ury\n" if $::opt_debug; - -### papersize validation (security) -if ($::opt_papersize ne '') { - $::opt_papersize =~ /^[0-9A-Za-z]+$/ - or die "$Error Invalid papersize ($::opt_papersize)!\n"; - $papersizes{$::opt_papersize} - or die "$Error Unknown papersize ($::opt_papersize)," - . " see ghostscript's documentation for option `-r'!\n"; -} - -### resolution validation (security) -if ($::opt_resolution ne '') { - $::opt_resolution =~ /^\d+(x\d+)?$/ - or die "$Error Invalid resolution ($::opt_resolution)," - . " see ghostscript's documentation!\n"; -} - -### command name validation (security) -my %cmd = ( - 'gscmd' => \$::opt_gscmd, - 'pdftexcmd' => \$::opt_pdftexcmd, - 'luatexcmd' => \$::opt_luatexcmd, - 'xetexcmd' => \$::opt_xetexcmd -); -foreach my $cmd (keys %cmd) { - my $val = ${$cmd{$cmd}}; - next unless $val; - $val =~ s/^\s+//; - $val =~ s/\s+$//; - next unless $val; - if ($val =~ /`/) { - die "$Error Forbidden backtick for option `--$cmd' ($val)!\n"; - } - if ($val =~ /\s/) { - die "$Error Forbidden whitespace for option `--$cmd' ($val)!\n"; - } -} -if ($restricted) { - if ($::opt_pdftexcmd and $::opt_pdftexcmd ne 'pdftex') { - die "$Error pdfTeX program name must not be changed in restricted mode!\n"; - } - if ($::opt_xetexcmd and $::opt_xetexcmd ne 'xetex') { - die "$Error XeTeX program name must not be changed in restricted mode!\n"; - } - if ($::opt_luatexcmd and $::opt_luatexcmd ne 'luatex') { - die "$Error LuaTeX program name must not be changed in restricted mode!\n"; - } - if ($::opt_gscmd) { - $::opt_gscmd =~ /^(gs|mgs|gswin32c|gs386|gsos2)$/ - or $::opt_gscmd =~ /^gs[\-_]?(\d|\d[\.-_]?\d\d)c?$/ - or die "$Error: Invalid Ghostscript program name in restricted mode!\n"; - } -} - -### cleanup system -my @unlink_files = (); -my $exit_code = 1; -sub clean { - print "* Cleanup\n" if $::opt_debug; - if ($::opt_debug) { - print "* Temporary files: @unlink_files\n"; - } - else { - for (; @unlink_files>0; ) { - unlink shift @unlink_files; - } - } -} -sub cleanup { - clean(); - exit($exit_code); -} -$SIG{'INT'} = \&cleanup; -$SIG{'__DIE__'} = \&clean; - -### Calculation of BoundingBoxes - -# use safe file name for use within cmd line of gs (unknown shell: space, ...) -# and pdfTeX (dollar, ...) -my $inputfilesafe = $inputfile; -if ($inputfile =~ /[\s\$~'"]/) { - $inputfilesafe = "$tmp-img.pdf"; - push @unlink_files, $inputfilesafe; - my $symlink_exists = eval { symlink("", ""); 1 }; - print "* Input file name `$inputfile' contains special characters.\n" - . "* " . ($symlink_exists ? "Link" : "Copy") - . " input file to temporary file `$inputfilesafe'.\n" - if $::opt_verbose; - if ($symlink_exists) { - symlink($inputfile, $inputfilesafe) - or die "$Error Link from `$inputfile' to" - . " `$inputfilesafe' failed: $!\n"; - } - else { - use File::Copy; - copy($inputfile, $inputfilesafe) - or die "$Error Copy from `$inputfile' to" - . " `$inputfilesafe' failed: $!\n"; - } -} - -my @gsargs = ( - "-sDEVICE=bbox", - "-dBATCH", - "-dNOPAUSE" -); -push @gsargs, "-sPAPERSIZE=$::opt_papersize" if $::opt_papersize; -push @gsargs, "-r$::opt_resolution" if $::opt_resolution; -push @gsargs, - "-c", - "save", - "pop", - "-f", - $inputfilesafe -; - -my $tmpfile = "$tmp.tex"; -push @unlink_files, $tmpfile; -open(TMP, ">$tmpfile") or - die "$Error Cannot write tmp file `$tmpfile'!\n"; -print TMP <<'END_TMP'; -\catcode`\{=1 % -\catcode`\}=2 % -\catcode`\#=6 % -END_TMP -print TMP "\\def\\pdffile{$inputfilesafe}\n"; -print TMP <<'END_TMP'; -\def\stripprefix#1>{} -\def\onelevelsanitize#1{% - \edef#1{\expandafter\stripprefix\meaning#1}% -} -\onelevelsanitize\pdffile -END_TMP -if ($::opt_tex eq 'luatex') { - print TMP <<'END_TMP'; -\begingroup\expandafter\expandafter\expandafter\endgroup -\expandafter\ifx\csname directlua\endcsname\relax - \errmessage{LuaTeX not found!}% -\else - \begingroup - \newlinechar=10 % - \endlinechar=\newlinechar % - \ifnum0% - \directlua{% - if tex.enableprimitives then - tex.enableprimitives('TEST', { - 'luatexversion', - 'pdfoutput', - 'pdfcompresslevel', - 'pdfhorigin', - 'pdfvorigin', - 'pdfpagewidth', - 'pdfpageheight', - 'pdfmapfile', - 'pdfximage', - 'pdflastximage', - 'pdfrefximage' - }) - tex.print('1') - end - }% - \ifx\TESTluatexversion\UnDeFiNeD\else 1\fi % - =11 % - \global\let\luatexversion\luatexversion - \global\let\pdfoutput\TESTpdfoutput - \global\let\pdfcompresslevel\TESTpdfcompresslevel - \global\let\pdfhorigin\TESTpdfhorigin - \global\let\pdfvorigin\TESTpdfvorigin - \global\let\pdfpagewidth\TESTpdfpagewidth - \global\let\pdfpageheight\TESTpdfpageheight - \global\let\pdfmapfile\TESTpdfmapfile - \global\let\pdfximage\TESTpdfximage - \global\let\pdflastximage\TESTpdflastximage - \global\let\pdfrefximage\TESTpdfrefximage - \else % - \errmessage{% - Missing \string\luatexversion % - }% - \fi % - \endgroup % -\fi -END_TMP -} -if ($::opt_tex eq 'pdftex' or $::opt_tex eq 'luatex') { - print TMP <<'END_TMP_HEAD'; -\pdfoutput=1 % -\pdfcompresslevel=9 % -\csname pdfmapfile\endcsname{} -\def\page #1 [#2 #3 #4 #5]{% - \count0=#1\relax - \setbox0=\hbox{% - \pdfximage page #1{\pdffile}% - \pdfrefximage\pdflastximage - }% - \pdfhorigin=-#2bp\relax - \pdfvorigin=#3bp\relax - \pdfpagewidth=#4bp\relax - \advance\pdfpagewidth by -#2bp\relax - \pdfpageheight=#5bp\relax - \advance\pdfpageheight by -#3bp\relax - \ht0=\pdfpageheight - \shipout\box0\relax -} -\def\pageclip #1 [#2 #3 #4 #5][#6 #7 #8 #9]{% - \count0=#1\relax - \dimen0=#4bp\relax \advance\dimen0 by -#2bp\relax - \edef\imagewidth{\the\dimen0}% - \dimen0=#5bp\relax \advance\dimen0 by -#3bp\relax - \edef\imageheight{\the\dimen0}% - \pdfximage page #1{\pdffile}% - \setbox0=\hbox{% - \kern -#2bp\relax - \lower #3bp\hbox{\pdfrefximage\pdflastximage}% - }% - \wd0=\imagewidth\relax - \ht0=\imageheight\relax - \dp0=0pt\relax - \pdfhorigin=#6pt\relax - \pdfvorigin=#7bp\relax - \pdfpagewidth=\imagewidth - \advance\pdfpagewidth by #6bp\relax - \advance\pdfpagewidth by #8bp\relax - \pdfpageheight=\imageheight\relax - \advance\pdfpageheight by #7bp\relax - \advance\pdfpageheight by #9bp\relax - \pdfxform0\relax - \shipout\hbox{\pdfrefxform\pdflastxform}% -}% -\def\pageinclude#1{% - \pdfhorigin=0pt\relax - \pdfvorigin=0pt\relax - \pdfximage page #1{\pdffile}% - \setbox0=\hbox{\pdfrefximage\pdflastximage}% - \pdfpagewidth=\wd0\relax - \pdfpageheight=\ht0\relax - \advance\pdfpageheight by \dp0\relax - \shipout\hbox{% - \raise\dp0\box0\relax - }% -} -END_TMP_HEAD -} -else { # XeTeX - print TMP <<'END_TMP_HEAD'; -\expandafter\ifx\csname XeTeXpdffile\endcsname\relax - \errmessage{XeTeX not found or too old!}% -\fi -\def\page #1 [#2 #3 #4 #5]{% - \count0=#1\relax - \setbox0=\hbox{% - \XeTeXpdffile "\pdffile" page #1% - }% - \pdfpagewidth=#4bp\relax - \advance\pdfpagewidth by -#2bp\relax - \pdfpageheight=#5bp\relax - \advance\pdfpageheight by -#3bp\relax - \shipout\hbox{% - \kern-1in% - \kern-#2bp% - \vbox{% - \kern-1in% - \kern#3bp% - \ht0=\pdfpageheight - \box0 % - }% - }% -} -END_TMP_HEAD -} - -print "* Running ghostscript for BoundingBox calculation ...\n" - if $::opt_verbose; -print "* Ghostscript call: $::opt_gscmd @gsargs\n" if $::opt_debug; - -my @bbox; -if ($::opt_bbox) { - $::opt_bbox =~ /([-\d\.]+) ([-\d\.]+) ([-\d\.]+) ([-\d\.]+)/; - @bbox = ($1, $2, $3, $4); -} -my $page = 0; -my $gs_pipe = "$::opt_gscmd -dSAFER @gsargs 2>&1"; -$gs_pipe .= " 1>$null" unless $::opt_verbose; -$gs_pipe .= "|"; - -open(GS, $gs_pipe) or - die "$Error Cannot call ghostscript ($::opt_gscmd)!\n"; -my $bb = ($::opt_hires) ? "%%HiResBoundingBox" : "%%BoundingBox"; -while (<GS>) { - print $_ if $::opt_verbose; - next unless - /^$bb:\s*(-?[\.\d]+) (-?[\.\d]+) (-?[\.\d]+) (-?[\.\d]+)/o; - @bbox = ($1, $2, $3, $4) unless $::opt_bbox; - $page++; - - my $empty = 0; - $empty = 1 if $bbox[0] >= $bbox[2]; - $empty = 1 if $bbox[1] >= $bbox[3]; - if ($empty) { - print <<"END_WARNING"; - -!!! Warning: Empty Bounding Box is returned by Ghostscript! -!!! Page $page: @bbox -!!! Either there is a problem with the page or with Ghostscript. -!!! Recovery is tried by embedding the page in its original size. - -END_WARNING - print TMP "\\pageinclude{$page}\n"; - next; - } - - print "* Page $page: @bbox\n" if $::opt_verbose; - - my @bb = ($bbox[0] - $llx, $bbox[1] - $ury, - $bbox[2] + $urx, $bbox[3] + $lly); - - $empty = 0; - $empty = 1 if $bb[0] >= $bb[2]; - $empty = 1 if $bb[1] >= $bb[3]; - if ($empty) { - print <<"END_WARNING"; - -!!! Warning: The final Bounding Box is empty! -!!! Page: $page: @bb -!!! Probably caused by too large negative margin values. -!!! Recovery by ignoring margin values. - -END_WARNING - print TMP "\\page $page [@bbox]\n"; - # clipping shouldn't make a difference - next; - } - if ($::opt_clip) { - print TMP "\\pageclip $page [@bbox][$llx $lly $urx $ury]\n"; - } - else { - print TMP "\\page $page [@bb]\n"; - } -} -close(GS); - -if ($? & 127) { - die sprintf "$Error Ghostscript died with signal %d!\n", - ($? & 127); -} -elsif ($? != 0) { - die sprintf "$Error Ghostscript exited with error code %d!\n", - $? >> 8; -} - -print TMP "\\csname \@\@end\\endcsname\n\\end\n"; -close(TMP); - -if ($page == 0) { - die "$Error Ghostscript does not report bounding boxes!\n"; -} - -### Run pdfTeX/XeTeX - -push @unlink_files, "$tmp.log"; -my $cmd; -my $texname; -if ($::opt_tex eq 'pdftex') { - $cmd = $::opt_pdftexcmd; - $texname = 'pdfTeX'; -} -elsif ($::opt_tex eq 'luatex') { - $cmd =$::opt_luatexcmd; - $texname = 'LuaTeX'; -} -else { - $cmd = $::opt_xetexcmd; - $texname = 'XeTeX'; -} -$cmd .= ' -no-shell-escape'; -if ($::opt_initex) { - $cmd .= ' --ini --etex'; -} -if ($::opt_verbose) { - $cmd .= " -interaction=nonstopmode $tmp"; -} -else { - $cmd .= " -interaction=batchmode $tmp"; -} -print "* Running $texname ...\n" if $::opt_verbose; -print "* $texname call: $cmd\n" if $::opt_debug; -if ($::opt_verbose) { - system($cmd); -} -else { - `$cmd`; -} -if ($?) { - die "$Error $texname run failed!\n"; -} - -### Move temp file to output -if (!rename("$tmp.pdf", $outputfile)) { - use File::Copy; - move "$tmp.pdf", $outputfile or - die "$Error Cannot move `$tmp.pdf' to `$outputfile'!\n"; -} - -print "==> $page page", (($page == 1) ? "" : "s"), - " written on `$outputfile'.\n"; - -$exit_code = 0; -cleanup(); - -__END__ |