summaryrefslogtreecommitdiff
path: root/support/pdfcrop
diff options
context:
space:
mode:
Diffstat (limited to 'support/pdfcrop')
-rw-r--r--support/pdfcrop/LICENCE416
-rw-r--r--support/pdfcrop/README259
-rw-r--r--support/pdfcrop/README.md261
-rwxr-xr-xsupport/pdfcrop/pdfcrop.pl206
4 files changed, 805 insertions, 337 deletions
diff --git a/support/pdfcrop/LICENCE b/support/pdfcrop/LICENCE
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/support/pdfcrop/LICENCE
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % 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.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/support/pdfcrop/README b/support/pdfcrop/README
deleted file mode 100644
index 4ea8503d79..0000000000
--- a/support/pdfcrop/README
+++ /dev/null
@@ -1,259 +0,0 @@
-README for pdfcrop 2012/11/02 v1.38
-
-TABLE OF CONTENTS
-=================
-A. Description
-B. Copyright, Disclaimer, License
-C. Files
-D. Requirements
-E. Installation
-F. User Interface
-G. Restricted Mode
-H. Author
-I. Acknowledgement
-J. Questions, Suggested Improvements
-K. Known Problems
-L. History
-M. ToDo
-
-A. DESCRIPTION
-==============
-PDFCROP takes a PDF file as input, calculates the BoundingBox
-for each page by the help of ghostscript and generates a output
-PDF file with removed margins.
-
-B. COPYRIGHT, DISCLAIMER, LICENSE
-=================================
-Copyright (C) 2002, 2004, 2005, 2008-2012 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.
-
-C. FILES
-========
-The project `pdfcrop' consists of two files:
-pdfcrop.pl: This perl script is the main program. The extension
- `.pl' may be omitted.
-README: Documentation, the file you are reading.
-
-Following temporary files are produced if `pdfcrop' is invoked:
-tmp-pdfcrop-*.tex: input file for pdfTeX
-tmp-pdfcrop-*.log: log file of pdfTeX run
-tmp-pdfcrop-*.pdf: result after pdfTeX run
-
-D. REQUIREMENTS
-===============
-* Perl5 (version 5 of the perl interpreter)
-* Ghostscript (>= 8.0 if PDF file contains rotated pages)
-* pdfTeX, version >= 1.0 (because of page selecting and \pdfximage syntax)
- or XeTeX or LuaTeX.
-
-E. INSTALLATION
-===============
-
-1. Perl script `pdfcrop.pl':
-
- TDS 1.1 location (TDS means "texmf" tree, see CTAN:tds/tds.pdf):
- * TDS:scripts/pdfcrop/pdfcrop.pl
- * and a directory that is part of PATH contains a wrapper script
- or link with name "pdfcrop".
-
- Unix
- * It is allowed to rename `pdfcrop.pl' to `pdfcrop':
- mv pdfcrop.pl pdfcrop
- * Ensure that the execute permission is set:
- chmod +x pdfcrop
- * Move the file to a directory where the shell can find it
- (environment variable PATH, e.g. /usr/local/bin/).
-
- Dos/Windows
- * See requirements. I do not expect that the perl script
- run under DOS.
-
-2. Restricted program version `rpdfcrop'
-
- Generate links or install `pdfcrop.pl' again under the
- name `rpdfcrop'.
-
- Prefer `rpdfcrop' if you want to add pdfcrop to the
- programs that may be executed in TeX's restricted
- shell escape mode. (This feature is added in TeX Live 2009.)
- For TeX Live (since 2009) see entry for `shell_escape_commands'
- in the configuration file `texmf.cnf'.
-
-3. Documentation `README':
-
- Copy it to an appropriate place, for example
- `/usr/local/share/doc/pdfcrop/README'.
- It is allowed to rename it to `pdfcrop.txt'.
-
- TDS location:
- somewhere below texmf/doc/... (?)
- Examples:
- TDS:doc/support/pdfcrop/README
- TDS:doc/scripts/pdfcrop/README
- TDS:doc/scripts/pdfcrop.txt
- TeXLive 2008 and 2009 put it in
- TDS:doc/support/pdfcrop/README
-
-F. USER INTERFACE
-=================
-* ToDo: User manual
-* Online help:
- pdfcrop --help
-* Ghostscript's calculation of the bounding box is faster,
- if --resolution 72 is used instead of ghostscript's implicite
- default setting of 4000 DPI (hint from Ionut Georgescu).
- Of course the calculation with higher resolution settings are
- more accurate.
-
-G. RESTRICTED MODE
-==================
-Restricted mode is enabled if:
-* option `--restricted' is used,
-* the program is called under the name `rpdfcrop'
-* or the called program name contains `restricted'.
-This mode sets restrictions for the following options:
-* --pdftexcmd: if used, the value must be empty or `pdftex'.
-* --xetexcmd: if used, the value must be empty or `xetex'.
-* --luatexcmd: if used, the value must be empty or `luatex'.
-* --gscmd: if used, the value must
- * be empty or
- * be one of the standard names (gs, gswin32c, mgs, gs386 gsos2) or
- * consists of `gs', followed by a version number and an
- optional `c' (Ghostscript's convention for `console version').
-
-H. AUTHOR
-=========
-Heiko Oberdiek
-Email: heiko.oberdiek at googlemail.com
-
-I. ACKNOWLEDGEMENT
-==================
-Anthony Williams
-Scott Pakin <pakin at uiuc.edu>
-Ionut Georgescu
-Yves J\"ager
-R (Chandra) Chandrasekhar
-Christian Stapfer
-David Menestrina
-Karl Berry
-
-J. QUESTIONS, SUGGESTED IMPROVEMENTS
-====================================
-If you have questions, problems with `pdfcrop', error reports,
-if you have improvements or want to have additional features,
-please send them to the author.
-
-My environment for developing and testing:
-* linux, SuSE 9.0
-* perl v5.8.1
-* pdfTeX 3.141592-1.40.x
-* Ghostscript 8.x
-
-K. KNOWN PROBLEMS
-=================
-* pdfcrop relies on Ghostscript for the calculation of the
- Bounding Box. If Ghostscript returns wrong values or
- cannot process the pdf file, it sometimes helps to try
- another version of Ghostscript.
-* XeTeX (and pdfTeX < 1.10a) does not allow the setting of the
- PDF version in a direct way. Thus pdfcrop fixes the PDF version
- afterwards in the PDF header. Therefore XeTeX warnings as
- ** WARNING ** Version of PDF file (1.6) is newer
- than version limit specification.
- can be safely ignored.
-
-L. 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, --xetexcmds.
-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/17 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).
-2010/01/09 v1.23: * Options --bbox-odd and --bbox-even added.
-2010/08/16 v1.24: * Workaround added for buggy ghostscript ports
- that print the BoundingBox data twice.
-2010/08/26 v1.25: * Fix for the case that the PDF file contains
- an entry /CropBox different to /MediaBox.
- * \pageinclude implemented for XeTeX.
- * XeTeX: --clip does not die, but this option
- is ignored, because XeTeX always clip.
-2010/08/26 v1.26: * XeTeX's \XeTeXpdffile expects keyword
- `media', not `mediabox'.
- * New option --pdfversion.
- Default is `auto' that means the PDF version
- is inherited from the input file. Before
- pdfcrop has used the TeX engine's default.
- * Option --luatex fixed (extra empty page at end).
-2010/09/03 v1.27: * Workaround of v1.24 fixed.
-2010/09/06 v1.28: * The Windows registry is searched if Ghostscript
- is not found via PATH.
- * Windows only: support of spaces in command
- names in unrestricted mode.
-2010/09/06 v1.29: * Find the latest Ghostscript version in registry.
-2010/09/15 v1.30: * Warning of pdfTeX because of \pdfobjcompresslevel
- avoided when reducing \pdfminorversion.
- * Fix for TeX syntax characters in input file names.
-2010/09/17 v1.31: * Passing the input file name via hex string to TeX.
- * Again input file names restricted for Ghostscript
- command line, switch then to symbol link/copy
- method.
-2011/08/10 v1.32: * Detection for gswin64c.exe added.
-2012/02/01 v1.33: * Input file can be `-' (standard input).
-2012/04/18 v1.34: * Format of option --version changed
- from naked version number to a line with
- program name, date and version.
-2012/10/15 v1.35: * Additional debug infos added for Perl version.
-2012/10/16 v1.36: * More error codes added.
-2012/10/16 v1.37: * Extended error messages if available.
- * Fix for broken v1.36.
-2012/11/02 v1.38: * Fix for unsufficient cleanup, if function `cleanup' is
- prematurely called in `eval' for `symlink' checking.
-
-
-M. TODO
-=======
-* Description of user interface.
-* Documentation in other formats, eg. man or info pages.
-* Improved error checking.
-* Units support for option --margins.
diff --git a/support/pdfcrop/README.md b/support/pdfcrop/README.md
new file mode 100644
index 0000000000..839e5d2252
--- /dev/null
+++ b/support/pdfcrop/README.md
@@ -0,0 +1,261 @@
+# pdfcrop
+
+Version: 2020/06/06 v1.40
+
+
+## TABLE OF CONTENTS
+
+1. Description
+2. Copyright, Disclaimer, License
+3. Files
+4. Requirements
+5. Installation
+6. User Interface
+7. Restricted Mode
+8. Author
+9. Acknowledgement
+9. Questions, Suggested Improvements
+9. Known Problems
+9. History
+9. ToDo
+
+## 1\. DESCRIPTION
+
+PDFCROP takes a PDF file as input, calculates the BoundingBox
+for each page by the help of ghostscript and generates a output
+PDF file with removed margins.
+
+## 2\. COPYRIGHT, DISCLAIMER, LICENSE
+
+Copyright (C) 2002, 2004, 2005, 2008-2012 Heiko Oberdiek.
+ 2020 Oberdiek Package Support Group
+
+LaTeX Project Public License, version 1.3c or later.
+
+## 3\. FILES
+
+The project `pdfcrop` consists of two files:
+
+`pdfcrop.pl`: This perl script is the main program. The extension
+ `.pl` may be omitted.\
+`README.md`: Documentation, the file you are reading.
+
+Following temporary files are produced if `pdfcrop` is invoked:
+
+`tmp-pdfcrop-*.tex`: input file for pdfTeX, luatex or xetex\
+`tmp-pdfcrop-*.log`: log file of pdfTeX, luatex or xetex run\
+`tmp-pdfcrop-*.pdf`: result after pdfTeX, luatex or xetex run
+
+The temporary files are deleted after the run unless the `--debug` option is
+used.
+
+## 4\. REQUIREMENTS
+
+* Perl5 (version 5 of the perl interpreter)
+* Ghostscript (>= 8.0 if PDF file contains rotated pages)
+* pdfTeX, version >= 1.0 (because of page selecting and \pdfximage syntax)
+ or XeTeX or LuaTeX.
+
+## 5\. INSTALLATION
+
+Normally `pdfcrop` will be installed by the TeX system.
+
+If a manual installation is needed
+
+### 1\. Perl script `pdfcrop.pl`:
+
+TDS 1.1 location (TDS means "texmf" tree, see CTAN:tds/tds.pdf):
+* TDS:scripts/pdfcrop/pdfcrop.pl
+* and a directory that is part of PATH contains a wrapper script
+ or link with name "pdfcrop".
+
+Unix
+* It is allowed to rename `pdfcrop.pl` to `pdfcrop`:
+ mv pdfcrop.pl pdfcrop
+* Ensure that the execute permission is set:
+ chmod +x pdfcrop
+* Move the file to a directory where the shell can find it
+ (environment variable PATH, e.g. /usr/local/bin/).
+
+Dos/Windows
+ * See requirements. I do not expect that the perl script
+ runs under DOS.
+
+### 2\. Restricted program version `rpdfcrop`
+
+ Generate links or install `pdfcrop.pl` again under the
+ name `rpdfcrop`.
+
+ Prefer `rpdfcrop` if you want to add pdfcrop to the
+ programs that may be executed in TeX's restricted
+ shell escape mode. (This feature is added in TeX Live 2009.)
+ For TeX Live (since 2009) see entry for `shell_escape_commands`
+ in the configuration file `texmf.cnf`.
+
+### 3\. Documentation `README.md`:
+
+ Copy it to an appropriate place, for example
+ `/usr/local/share/doc/pdfcrop/README.md`.
+ It is allowed to rename it to `pdfcrop.txt` or `pdfcrop.md`.
+
+ TDS location:\
+ somewhere below texmf/doc/... (?)
+
+ Examples:\
+ `TDS:doc/support/pdfcrop/README.md`\
+ `TDS:doc/scripts/pdfcrop/README.md`\
+ `TDS:doc/scripts/pdfcrop.txt`
+
+ TeXLive 2020 put it in\
+ `TDS:doc/support/pdfcrop/README.md`
+
+## 6\. USER INTERFACE
+
+* ToDo: User manual
+* Online help:
+ `pdfcrop --help`
+* Ghostscript's calculation of the bounding box is faster,
+ if `--resolution 72` is used instead of ghostscript's implicite
+ default setting of 4000 DPI (hint from Ionut Georgescu).
+ Of course the calculation with higher resolution settings are
+ more accurate.
+
+## 7\. RESTRICTED MODE
+
+Restricted mode is enabled if:
+
+* option `--restricted` is used,
+* the program is called under the name `rpdfcrop`
+* or the called program name contains `restricted`.
+
+This mode sets restrictions for the following options:
+
+* `--pdftexcmd`: if used, the value must be empty or `pdftex`.
+* `--xetexcmd`: if used, the value must be empty or `xetex`.
+* `--luatexcmd`: if used, the value must be empty or `luatex`.
+* `--gscmd`: if used, the value must
+ * be empty or
+ * be one of the standard names (gs, gswin32c, mgs, gs386, gsos2) or
+ * consists of `gs`, followed by a version number and an
+ optional `c` (Ghostscript's convention for `console version`).
+
+## 8\. AUTHORS
+
+Heiko Oberdiek\
+Email: heiko.oberdiek at googlemail.com\
+Oberdiek Package Support Group\
+[https://github.com/ho-tex/pdfcrop]
+
+## 9\. ACKNOWLEDGEMENT
+
+Anthony Williams\
+Scott Pakin <pakin at uiuc.edu>\
+Ionut Georgescu\
+Yves Jäger\
+R (Chandra) Chandrasekhar\
+Christian Stapfer\
+David Menestrina\
+Karl Berry
+
+## 10. QUESTIONS, SUGGESTED IMPROVEMENTS
+
+If you have questions, problems with `pdfcrop`, error reports,
+if you have improvements or want to have additional features,
+please send them to the author or add an issue to
+https://github.com/ho-tex/pdfcrop
+
+My environment for developing and testing:
+* linux, SuSE 9.0
+* perl v5.8.1
+* pdfTeX 3.141592-1.40.x
+* Ghostscript 8.x
+
+## 11. KNOWN PROBLEMS
+
+* pdfcrop relies on Ghostscript for the calculation of the
+ Bounding Box. If Ghostscript returns wrong values or
+ cannot process the pdf file, it sometimes helps to try
+ another version of Ghostscript.
+* Older XeTeX (and pdfTeX < 1.10a) does not allow the setting of the
+ PDF version in a direct way. In this cases pdfcrop tries to fix the PDF version
+ afterwards in the PDF header and XeTeX warnings as the following can be safely ignored.
+
+ ** WARNING ** Version of PDF file (1.6) is newer
+ than version limit specification.
+
+
+
+## 12. HISTORY
+
+|Version | Notes |
+|----------------|-------|
+|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("-`&#124;`")` 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`, `--xetexcmds`.|
+|2008/07/22 v1.11:| Workaround for `(open("-`&#124;`")`.|
+|2008/07/23 v1.12:| Workarounds for the workaround (error detection, ...).|
+|2008/07/24 v1.13:| `(open("-`&#124;`")`/ 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/17 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`, `--pdftexcmd`, `--xetexcmd`.|
+|-- | \* 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).|
+|2010/01/09 v1.23:| \* Options `--bbox`-odd and --bbox-even added.|
+|2010/08/16 v1.24:| \* Workaround added for buggy ghostscript ports that print the BoundingBox data twice.|
+|2010/08/26 v1.25:| \* Fix for the case that the PDF file contains an entry /CropBox different to /MediaBox.|
+|-- | \* \pageinclude implemented for XeTeX. |
+|-- | \* XeTeX: `--clip` does not die, but this option is ignored, because XeTeX always clip.|
+|2010/08/26 v1.26:| \* XeTeX's \XeTeXpdffile expects keyword `media`, not `mediabox`.|
+|-- | \* New option `--pdfversion`.|
+|-- | Default is `auto` that means the PDF version is inherited from the input file. Before pdfcrop has used the TeX engine's default.|
+|-- | \* Option `--luatex` fixed (extra empty page at end).|
+|2010/09/03 v1.27:| \* Workaround of v1.24 fixed.|
+|2010/09/06 v1.28:| \* The Windows registry is searched if Ghostscript is not found via PATH.
+|-- | \* Windows only: support of spaces in command names in unrestricted mode.|
+|2010/09/06 v1.29:| \* Find the latest Ghostscript version in registry.|
+|2010/09/15 v1.30:| \* Warning of pdfTeX because of \pdfobjcompresslevel avoided when reducing \pdfminorversion.|
+|-- | \* Fix for TeX syntax characters in input file names.|
+|2010/09/17 v1.31:| \* Passing the input file name via hex string to TeX.|
+|-- | \* Again input file names restricted for Ghostscript command line, switch then to symbol link/copy method.|
+|2011/08/10 v1.32:| \* Detection for gswin64c.exe added.|
+|2012/02/01 v1.33:| \* Input file can be `-` (standard input).|
+|2012/04/18 v1.34:| \* Format of option `--version` changed from naked version number to a line with program name, date and version.|
+|2012/10/15 v1.35:| \* Additional debug infos added for Perl version.|
+|2012/10/16 v1.36:| \* More error codes added.|
+|2012/10/16 v1.37:| \* Extended error messages if available.|
+|-- | \* Fix for broken v1.36.|
+|2012/11/02 v1.38:| \* Fix for unsufficient cleanup, if function `cleanup` is prematurely called in `eval` for `symlink` checking.|
+|2020/05/24 v1.39:| \* adapted to pdfversion 2.0,|
+|-- | \* corrected luatex support|
+|-- | \* corrected a problem with xetex.|
+|2020/06/06 v1.40:| \* improved ghostscript detection on windows when a bash is used|
+|-- | \* added direct pdfversion support to xetex.|
+
+
+## 13. TODO
+
+* Description of user interface.
+* Documentation in other formats, eg. man or info pages.
+* Improved error checking.
+* Units support for option `--margins`.
diff --git a/support/pdfcrop/pdfcrop.pl b/support/pdfcrop/pdfcrop.pl
index b7662c15f2..c459e5c41e 100755
--- a/support/pdfcrop/pdfcrop.pl
+++ b/support/pdfcrop/pdfcrop.pl
@@ -5,16 +5,12 @@ $^W=1; # turn warning on
# pdfcrop.pl
#
# Copyright (C) 2002, 2004, 2005, 2008-2012 Heiko Oberdiek.
+# 2020 Oberdiek Package Support Group
#
# 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.
+# conditions of the LaTeX Project Public License, version 1.3c or later.
#
-# See file "README" for a list of files that belong to this project.
+# See file "README.md" for a list of files that belong to this project.
#
# This file "pdfcrop.pl" may be renamed to "pdfcrop"
# for installation purposes.
@@ -22,10 +18,10 @@ $^W=1; # turn warning on
my $prj = 'pdfcrop';
my $file = "$prj.pl";
my $program = uc($&) if $file =~ /^\w+/;
-my $version = "1.38";
-my $date = "2012/11/02";
-my $author = "Heiko Oberdiek";
-my $copyright = "Copyright (c) 2002-2012 by $author.";
+my $version = "1.40";
+my $date = "2020/06/06";
+my $author = "Heiko Oberdiek, Oberdiek Package Support Group";
+my $copyright = "Copyright (c) 2002-2020 by $author.";
#
# Reqirements: Perl5, Ghostscript
# History:
@@ -107,6 +103,12 @@ my $copyright = "Copyright (c) 2002-2012 by $author.";
# * Fix for broken v1.36.
# 2012/11/02 v1.38: * Fix for unsufficient cleanup, if function `cleanup' is
# prematurely called in `eval' for `symlink' checking.
+# 2020/05/24 v1.39: * adapted to pdfversion 2.0, corrected luatex support,
+# corrected a problem with xetex.
+# 2020/06/06 v1.40: * improved ghostscript detection on windows when a bash is used
+# added direct pdf version support to xetex.
+
+
### program identification
my $title = "$program $version, $date - $copyright\n";
@@ -171,7 +173,7 @@ sub find_ghostscript () {
print "* Arch name: $archname\n" if $::opt_debug;
print "* System: $system\n" if $::opt_debug;
my %candidates = (
- 'unix' => [qw|gs gsc|],
+ 'unix' => [qw|gs gsc gswin64c gswin32c|],
'dos' => [qw|gs386 gs|],
'os2' => [qw|gsos2 gs|],
'win' => [qw|gswin32c gs|],
@@ -362,6 +364,7 @@ $::opt_bbox_odd = "";
$::opt_bbox_even = "";
$::opt_initex = 0;
$::opt_pdfversion = "auto";
+$::opt_uncompress = 0;
sub usage ($) {
my $ret = shift;
@@ -401,13 +404,15 @@ Expert options:
with origin at the lower left corner
--bbox-odd Same as --bbox, but for odd pages only ($::opt_bbox_odd)
--bbox-even Same as --bbox, but for even pages only ($::opt_bbox_even)
- --pdfversion <1.x> | auto | none
- Set the PDF version to 1.x, 1 < x < 8.
+ --pdfversion <x.y> | auto | none
+ Set the PDF version to x.y, x= 1 or 2, y=0-9.
If `auto' is given as value, then the
PDF version is taken from the header
of the input PDF file.
An empty value or `none' uses the
default of the TeX engine. ($::opt_pdfversion)
+ --uncompress creates an uncompressed pdf,
+ useful for debugging ($bool[$::opt_uncompress])
Input file: If the name is `-', then the standard input is used and
the output file name must be explicitly given.
@@ -454,6 +459,7 @@ GetOptions(
"bbox-even=s" => \$::opt_bbox_even,
"restricted" => sub { $restricted = 1; },
"pdfversion=s" => \$::opt_pdfversion,
+ "uncompress!",
) or usage(1);
!$::opt_help or usage(0);
@@ -471,10 +477,12 @@ print $title;
print "* Restricted mode: ", ($restricted ? "enabled" : "disabled"), "\n"
if $::opt_debug;
-$::opt_pdfversion =~ /^(|none|auto|1\.([2-7]))$/
+$::opt_pdfversion =~ /^(|none|auto|(([1-2])\.(\d)))$/
or die "!!! Error: Invalid value `$::opt_pdfversion' for option `--pdfversion'!\n";
print "* Option `pdfversion': $::opt_pdfversion\n" if $::opt_debug;
$::opt_pdfversion = $2 if $2;
+$::opt_pdfmajorversion = $3 if $2;
+$::opt_pdfminorversion = $4 if $2;
$::opt_pdfversion = '' if $::opt_pdfversion eq 'none';
find_ghostscript();
@@ -721,16 +729,19 @@ if ($::opt_pdfversion eq 'auto') {
or die sprintf "!!! Error: Cannot read the header of `%s' failed (%s)!\n",
$inputfilesafe, exterr;
close(IN);
- if ($buf =~ /%PDF-1.([0-7])\s/) {
+ if ($buf =~ /%PDF-((\d).(\d))\s/) {
$::opt_pdfversion = $1;
- print "* PDF header: %PDF-1.$::opt_pdfversion\n" if $::opt_verbose;
- $::opt_pdfversion = 2 if $::opt_pdfversion < 2;
+ $::opt_pdfmajorversion = $2;
+ $::opt_pdfminorversion = $3;
+ print "* PDF header: %PDF-$::opt_pdfversion\n" if $::opt_verbose;
+ $::opt_pdfminorversion = 2 if ($::opt_pdfmajorversion < 2 && $::opt_pdfminorversion < 2);
+ $::opt_pdfversion = $::opt_pdfmajorversion . '.' . $::opt_pdfminorversion;
}
else {
die "!!! Error: Cannot find PDF header of `$inputfilesafe'!\n";
}
}
-print '* Using PDF minor version: ',
+print '* Using PDF version: ',
($::opt_pdfversion ? $::opt_pdfversion : "engine's default"),
"\n" if $::opt_debug;
@@ -819,75 +830,37 @@ if ($::opt_tex eq 'luatex') {
\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',
- 'pdfminorversion',
- 'pdfobjcompresslevel',
- })
- 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 %
- \global\let\pdfminorversion\TESTpdfminorversion %
- \global\let\pdfobjcompresslevel\TESTpdfobjcompresslevel %
- \else %
- \errmessage{%
- Missing \string\luatexversion %
- }%
- \fi %
- \endgroup %
\fi
END_TMP
}
-if ($::opt_tex eq 'pdftex' or $::opt_tex eq 'luatex') {
+
+my $uncompress = $::opt_uncompress ? '0 ' : '9 ';
+if ($::opt_tex eq 'pdftex') {
+ print TMP "\\pdfcompresslevel=$uncompress ";
print TMP <<'END_TMP_HEAD';
\pdfoutput=1 %
-\pdfcompresslevel=9 %
\csname pdfmapfile\endcsname{}
-\def\setpdfversion#1{%
+\def\setpdfversion#1#2{%
\IfUndefined{pdfobjcompresslevel}{%
}{%
- \ifnum#1<5 %
- \pdfobjcompresslevel=0 %
- \else
- \pdfobjcompresslevel=2 %
- \fi
+ \ifnum#1=1 %
+ \ifnum#2<5
+ \pdfobjcompresslevel=0 %
+ \else
+ \pdfobjcompresslevel=2 %
+ \fi
+ \fi
}%
\IfUndefined{pdfminorversion}{%
\IfUndefined{pdfoptionpdfminorversion}{%
}{%
- \pdfoptionpdfminorversion=#1\relax
+ \pdfoptionpdfminorversion=#2\relax
}%
}{%
- \pdfminorversion=#1\relax
+ \pdfminorversion=#2\relax
+ \IfUndefined{pdfmajorversion}{%
+ \ifnum#2=0 \pdfminorversion=5\fi}
+ {\pdfmajorversion=#1\relax}%
}%
}
\def\page #1 [#2 #3 #4 #5]{%
@@ -943,13 +916,89 @@ if ($::opt_tex eq 'pdftex' or $::opt_tex eq 'luatex') {
}%
}
END_TMP_HEAD
- print TMP "\\setpdfversion{$::opt_pdfversion}\n" if $::opt_pdfversion;
+ print TMP "\\setpdfversion{$::opt_pdfmajorversion}{$::opt_pdfminorversion}\n" if $::opt_pdfversion;
+}
+elsif ($::opt_tex eq 'luatex')
+ {
+ print TMP "\\pdfvariable compresslevel=$uncompress ";
+ print TMP <<'END_TMP_HEAD';
+\outputmode=1 %
+\pdfextension mapfile {}
+\def\setpdfversion#1#2{%
+ \ifnum#1=1 %
+ \ifnum#2<5
+ \pdfvariable objcompresslevel=0 %
+ \else
+ \pdfvariable objcompresslevel=2 %
+ \fi
+ \fi
+ \pdfvariable minorversion= #2
+ \pdfvariable majorversion= #1
}
+\def\page #1 [#2 #3 #4 #5]{%
+ \count0=#1\relax
+ \setbox0=\hbox{%
+ \saveimageresource page #1 mediabox{\pdffile}%
+ \useimageresource\lastsavedimageresourceindex
+ }%
+ \pdfvariable horigin=-#2bp\relax
+ \pdfvariable vorigin=#3bp\relax
+ \pagewidth=#4bp\relax
+ \advance\pagewidth by -#2bp\relax
+ \pageheight=#5bp\relax
+ \advance\pageheight by -#3bp\relax
+ \ht0=\pageheight
+ \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}%
+ \saveimageresource page #1 mediabox{\pdffile}%
+ \setbox0=\hbox{%
+ \kern -#2bp\relax
+ \lower #3bp\hbox{\useimageresource\lastsavedimageresourceindex}%
+ }%
+ \wd0=\imagewidth\relax
+ \ht0=\imageheight\relax
+ \dp0=0pt\relax
+ \pdfvariable horigin=#6pt\relax
+ \pdfvariable vorigin=#7bp\relax
+ \pagewidth=\imagewidth
+ \advance\pagewidth by #6bp\relax
+ \advance\pagewidth by #8bp\relax
+ \pageheight=\imageheight\relax
+ \advance\pageheight by #7bp\relax
+ \advance\pageheight by #9bp\relax
+ \saveboxresource0\relax
+ \shipout\hbox{\useboxresource\lastsavedboxresourceindex}%
+}%
+\def\pageinclude#1{%
+ \pdfvariable horigin=0pt\relax
+ \pdfvariable vorigin=0pt\relax
+ \saveimageresource page #1 mediabox{\pdffile}%
+ \setbox0=\hbox{\useimageresource\lastsavedimageresourceindex}%
+ \pagewidth=\wd0\relax
+ \pageheight=\ht0\relax
+ \advance\pageheight by \dp0\relax
+ \shipout\hbox{%
+ \raise\dp0\box0\relax
+ }%
+}
+END_TMP_HEAD
+ print TMP "\\setpdfversion{$::opt_pdfmajorversion}{$::opt_pdfminorversion}\n" if $::opt_pdfversion;
+}
else { # XeTeX
print TMP <<'END_TMP_HEAD';
\expandafter\ifx\csname XeTeXpdffile\endcsname\relax
\errmessage{XeTeX not found or too old!}%
\fi
+\def\setpdfversion#1#2{%
+ \special{pdf:majorversion #1}%
+ \special{pdf:minorversion #2}}
+
\def\page #1 [#2 #3 #4 #5]{%
\count0=#1\relax
\setbox0=\hbox{%
@@ -990,6 +1039,7 @@ else { # XeTeX
}%
}
END_TMP_HEAD
+print TMP "\\setpdfversion{$::opt_pdfmajorversion}{$::opt_pdfminorversion}\n" if $::opt_pdfversion;
}
print "* Running ghostscript for BoundingBox calculation ...\n"
@@ -1183,15 +1233,15 @@ if ($::opt_pdfversion) {
read PDF, $header, 9
or die sprintf "!!! Error: Cannot read header of `%s' (%s)!\n",
"$tmp.pdf", exterr;
- $header =~ /^%PDF-1\.(\d)\s$/ or die "!!! Error: Cannot find header of `$tmp.pdf'!\n";
+ $header =~ /^%PDF-(\d\.\d)\s$/ or die "!!! Error: Cannot find header of `$tmp.pdf'!\n";
if ($1 ne $::opt_pdfversion) {
- seek PDF, 7, 0
+ seek PDF, 5, 0
or die sprintf "!!! Error: Cannot seek in `%s' (%s)!\n",
"$tmp.pdf", exterr;
print PDF $::opt_pdfversion
or die sprintf "!!! Error: Cannot write in `%s' (%s)!\n",
"$tmp.pdf", exterr;
- print "* PDF version correction in output file: 1.$::opt_pdfversion\n"
+ print "* PDF version correction in output file: $::opt_pdfversion\n"
if $::opt_debug;
}
close(PDF);