| @@ -11,13 +11,32 @@ | |||||
| # And: https://gist.github.com/MichaelJCole/86e4968dbfc13256228a | # And: https://gist.github.com/MichaelJCole/86e4968dbfc13256228a | ||||
| VERSION="1.3.5" | |||||
| ################################################### | |||||
| # PAGESIZE LOGIC | |||||
| # 1- Try to get Mediabox with CAT/GREP | |||||
| # Remove /BBox search as it is unreliable | |||||
| # 2- MacOS => try to use mdls | |||||
| # Linux => try to use pdfinfo | |||||
| # 3- Try to use identify (imagemagick) | |||||
| # 4- Fail | |||||
| # Remove postscript method, | |||||
| # may have licensing problems | |||||
| ################################################### | |||||
| VERSION="1.4.1" | |||||
| SCALE="0.95" # scaling factor (0.95 = 95%, e.g.) | SCALE="0.95" # scaling factor (0.95 = 95%, e.g.) | ||||
| VERBOSE=0 # verbosity Level | VERBOSE=0 # verbosity Level | ||||
| BASENAME="$(basename $0)" # simplified name of this script | BASENAME="$(basename $0)" # simplified name of this script | ||||
| GSBIN="" # Set with which after we check dependencies | |||||
| BCBIN="" # Set with which after we check dependencies | |||||
| IDBIN="" # Set with which after we check dependencies | |||||
| # Set with which after we check dependencies | |||||
| GSBIN="" # GhostScript Binaries | |||||
| BCBIN="" # BC Math binary | |||||
| IDBIN="" # Identify Binary | |||||
| PDFINFOBIN="" # PDF Info Binary | |||||
| MDLSBIN="" # MacOS mdls binary | |||||
| OSNAME="$(uname 2>/dev/null)" # Check were we are running | |||||
| LC_MEASUREMENT="C" # To make sure our numbers have .decimals | LC_MEASUREMENT="C" # To make sure our numbers have .decimals | ||||
| LC_ALL="C" # Some languages use , as decimal token | LC_ALL="C" # Some languages use , as decimal token | ||||
| @@ -27,10 +46,15 @@ LC_NUMERIC="C" | |||||
| TRUE=0 # Silly stuff | TRUE=0 # Silly stuff | ||||
| FALSE=1 | FALSE=1 | ||||
| ADAPTIVEMODE=$TRUE # Automatically try to guess best mode | |||||
| MODE="" | |||||
| USEIMGMGK=$FALSE # ImageMagick Flag, will use identify if true | USEIMGMGK=$FALSE # ImageMagick Flag, will use identify if true | ||||
| USECATGREP=$FALSE # Use old cat + grep method | USECATGREP=$FALSE # Use old cat + grep method | ||||
| # Prints version | # Prints version | ||||
| printVersion() { | printVersion() { | ||||
| if [[ $1 -eq 2 ]]; then | if [[ $1 -eq 2 ]]; then | ||||
| @@ -139,428 +163,37 @@ getPageSizeImagemagick() { | |||||
| } | } | ||||
| # Gets page size using toolbin_pdfinfo.ps | |||||
| getPageSizeGS() { | |||||
| local PDFINFOGS='' | |||||
| read -r -d '' PDFINFOGS <<'EOF' | |||||
| %!PS | |||||
| % Copyright (C) 2001-2012 Artifex Software, Inc. | |||||
| % All Rights Reserved. | |||||
| % | |||||
| % This software is provided AS-IS with no warranty, either express or | |||||
| % implied. | |||||
| % | |||||
| % This software is distributed under license and may not be copied, | |||||
| % modified or distributed except as expressly authorized under the terms | |||||
| % of the license contained in the file LICENSE in this distribution. | |||||
| % | |||||
| % Refer to licensing information at http://www.artifex.com or contact | |||||
| % Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, San Rafael, | |||||
| % CA 94903, U.S.A., +1(415)492-9861, for further information. | |||||
| % | |||||
| % | |||||
| % $Id: pdf_info.ps 6300 2005-12-28 19:56:24Z alexcher $ | |||||
| % Dump some info from a PDF file | |||||
| % usage: gs -dNODISPLAY -q -sFile=____.pdf [-dDumpMediaSizes=false] [-dDumpFontsNeeded=false] [-dDumpXML] | |||||
| % [-dDumpFontsUsed [-dShowEmbeddedFonts] ] toolbin/pdf_info.ps | |||||
| 128 dict begin | |||||
| /QUIET true def % in case they forgot | |||||
| /showoptions { | |||||
| ( where "options" are:) = | |||||
| ( -dDumpMediaSizes=false (default true) MediaBox and CropBox for each page) = | |||||
| ( -dDumpFontsNeeded=false (default true)Fonts used, but not embedded) = | |||||
| ( -dDumpXML print the XML Metadata from the PDF, if present) = | |||||
| ( -dDumpFontsUsed List all fonts used) = | |||||
| ( -dShowEmbeddedFonts only meaningful with -dDumpFontsUsed) = | |||||
| (\n If no options are given, the default is -dDumpMediaSizes -dDumpFontsNeeded) = | |||||
| () = | |||||
| flush | |||||
| } bind def | |||||
| /DumpMediaSizes where { pop } { /DumpMediaSizes true def } ifelse | |||||
| /DumpFontsNeeded where { pop } { /DumpFontsNeeded true def } ifelse | |||||
| [ shellarguments | |||||
| { counttomark 1 eq { | |||||
| dup 0 get (-) 0 get ne { | |||||
| % File specified on the command line using: -- toolbin/pdf_info.ps infile.pdf | |||||
| /File exch def | |||||
| false % dont show usage | |||||
| } { | |||||
| true % show usage and quit | |||||
| } ifelse | |||||
| } { true } ifelse | |||||
| { | |||||
| (\n*** Usage: gs [options] -- toolbin/pdf_info.ps infile.pdf ***\n\n) print | |||||
| showoptions | |||||
| quit | |||||
| } if | |||||
| } if | |||||
| /File where not { | |||||
| (\n *** Missing input file name \(use -sFile=____.pdf\)\n) = | |||||
| ( usage: gs -dNODISPLAY -q -sFile=____.pdf [ options ] toolbin/pdf_info.ps\n) = | |||||
| showoptions | |||||
| quit | |||||
| } if | |||||
| cleartomark % discard the dict from --where-- | |||||
| % ---- No more executable code on the top level after this line ----- | |||||
| % ---- except 2 lines at the very end ----- | |||||
| /printXML { % <string> printXML - | |||||
| % print non-blank lines without trailing spaces | |||||
| dup dup length 1 sub -1 0 { | |||||
| 1 index 1 index get 32 eq { | |||||
| 0 exch getinterval exch | |||||
| } { | |||||
| exch = exit % non-blank on this line | |||||
| } | |||||
| ifelse | |||||
| } for | |||||
| pop pop % clean up | |||||
| } bind def | |||||
| /dump-pdf-info { % (fname) -> - | |||||
| () = ( ) print print ( has ) print | |||||
| PDFPageCount dup =print 10 mod 1 eq { ( page.\n) } { ( pages\n) } ifelse = flush | |||||
| /DumpXML where { | |||||
| pop | |||||
| Trailer /Root oget /Metadata knownoget { | |||||
| //false resolvestream | |||||
| { dup 256 string readline exch printXML not { exit } if } loop | |||||
| pop % done with the stream | |||||
| (_____________________________________________________________) = | |||||
| flush | |||||
| } if | |||||
| } if | |||||
| % Print out the "Info" dictionary if present | |||||
| Trailer /Info knownoget { | |||||
| dup /Title knownoget { (Title: ) print = flush } if | |||||
| dup /Author knownoget { (Author: ) print = flush } if | |||||
| dup /Subject knownoget { (Subject: ) print = flush } if | |||||
| dup /Keywords knownoget { (Keywords: ) print = flush } if | |||||
| dup /Creator knownoget { (Creator: ) print = flush } if | |||||
| dup /Producer knownoget { (Producer: ) print = flush } if | |||||
| dup /CreationDate knownoget { (CreationDate: ) print = flush } if | |||||
| dup /ModDate knownoget { (ModDate: ) print = flush } if | |||||
| dup /Trapped knownoget { (Trapped: ) print = flush } if | |||||
| pop | |||||
| } if | |||||
| } bind def | |||||
| % <page index> <page dict> dump-media-sizes - | |||||
| /dump-media-sizes { | |||||
| DumpMediaSizes { | |||||
| () = | |||||
| % Print out the Page Size info for each page. | |||||
| (Page ) print =print | |||||
| dup /UserUnit pget { | |||||
| ( UserUnit: ) print =print | |||||
| } if | |||||
| dup /MediaBox pget { | |||||
| ( MediaBox: ) print oforce_array ==only | |||||
| } if | |||||
| dup /CropBox pget { | |||||
| ( CropBox: ) print oforce_array ==only | |||||
| } if | |||||
| dup /BleedBox pget { | |||||
| ( BleedBox: ) print oforce_array ==only | |||||
| } if | |||||
| dup /TrimBox pget { | |||||
| ( TrimBox: ) print oforce_array ==only | |||||
| } if | |||||
| dup /ArtBox pget { | |||||
| ( ArtBox: ) print oforce_array ==only | |||||
| } if | |||||
| dup /Rotate pget { | |||||
| ( Rotate = ) print =print | |||||
| } if | |||||
| dup /Annots pget { | |||||
| pop | |||||
| ( Page contains Annotations) print | |||||
| } if | |||||
| pageusestransparency { | |||||
| ( Page uses transparency features) print | |||||
| } if | |||||
| () = flush | |||||
| } | |||||
| { | |||||
| pop pop | |||||
| } ifelse | |||||
| } bind def | |||||
| % List of standard font names for use when we are showing the FontsNeeded | |||||
| /StdFontNames [ | |||||
| /Times-Roman /Helvetica /Courier /Symbol | |||||
| /Times-Bold /Helvetica-Bold /Courier-Bold /ZapfDingbats | |||||
| /Times-Italic /Helvetica-Oblique /Courier-Oblique | |||||
| /Times-BoldItalic /Helvetica-BoldOblique /Courier-BoldOblique | |||||
| ] def | |||||
| /res-type-dict 10 dict begin | |||||
| /Font { | |||||
| { | |||||
| exch pop oforce | |||||
| dup //null ne { | |||||
| dup /DescendantFonts knownoget { | |||||
| exch pop 0 get oforce | |||||
| } if | |||||
| dup /FontDescriptor knownoget { | |||||
| dup /FontFile known 1 index /FontFile2 known or exch /FontFile3 known or | |||||
| /ShowEmbeddedFonts where { pop pop //false } if { | |||||
| pop % skip embedded fonts | |||||
| } { | |||||
| /BaseFont knownoget { % not embedded | |||||
| 2 index exch //null put | |||||
| } if | |||||
| } ifelse | |||||
| } { | |||||
| /BaseFont knownoget { % no FontDescriptor, not embedded | |||||
| 2 index exch //null put | |||||
| } if | |||||
| } ifelse | |||||
| } { | |||||
| pop | |||||
| } ifelse | |||||
| } forall % traverse the dictionary | |||||
| } bind def | |||||
| /XObject { | |||||
| { | |||||
| exch pop oforce | |||||
| dup //null ne { | |||||
| dup /Subtype knownoget { | |||||
| /Form eq { | |||||
| /Resources knownoget { | |||||
| get-fonts-from-res | |||||
| } if | |||||
| } { | |||||
| pop | |||||
| } ifelse | |||||
| } { | |||||
| pop | |||||
| } ifelse | |||||
| } { | |||||
| pop | |||||
| } ifelse | |||||
| } forall | |||||
| } bind def | |||||
| /Pattern { | |||||
| { | |||||
| exch pop oforce | |||||
| dup //null ne { | |||||
| /Resources knownoget { | |||||
| get-fonts-from-res | |||||
| } if | |||||
| } { | |||||
| pop | |||||
| } ifelse | |||||
| } forall | |||||
| } bind def | |||||
| currentdict end readonly def | |||||
| % <dict for fonts> <<res-dict>> get-fonts-from-res - | |||||
| /get-fonts-from-res { | |||||
| oforce | |||||
| dup //null ne { | |||||
| { | |||||
| oforce | |||||
| dup //null ne { | |||||
| //res-type-dict 3 -1 roll | |||||
| .knownget { | |||||
| exec | |||||
| } { | |||||
| pop | |||||
| } ifelse | |||||
| } { | |||||
| pop pop | |||||
| } ifelse | |||||
| } forall | |||||
| } { | |||||
| pop | |||||
| } ifelse | |||||
| } bind def | |||||
| currentdict /res-type-dict undef | |||||
| /getPDFfonts { % <dict for fonts> <page dict> getPDFfonts - | |||||
| dup /Resources pget { get-fonts-from-res } if | |||||
| /Annots knownoget { | |||||
| { oforce | |||||
| dup //null ne { | |||||
| /AP knownoget { | |||||
| { exch pop oforce | |||||
| dup //null ne { | |||||
| dup /Resources knownoget { | |||||
| get-fonts-from-res | |||||
| } if | |||||
| { exch pop oforce | |||||
| dup type /dicttype eq { | |||||
| /Resources knownoget { | |||||
| get-fonts-from-res | |||||
| } if | |||||
| } { | |||||
| pop | |||||
| } ifelse | |||||
| } forall | |||||
| } { | |||||
| pop | |||||
| } ifelse | |||||
| } forall | |||||
| } if | |||||
| } { | |||||
| pop | |||||
| } ifelse | |||||
| } forall | |||||
| } if | |||||
| pop | |||||
| } bind def | |||||
| /dump-fonts-used { % <dict for fonts> dump-fonts-used - | |||||
| % If DumpFontsUsed is not true, then remove the "standard" fonts from the list | |||||
| systemdict /DumpFontsUsed known not { | |||||
| StdFontNames { | |||||
| 1 index 1 index known { 1 index 1 index undef } if | |||||
| pop | |||||
| } forall | |||||
| } if | |||||
| % Now dump the FontsUsed dict into an array so we can sort it. | |||||
| [ 1 index { pop } forall ] | |||||
| { 100 string cvs exch 100 string cvs exch lt } .sort | |||||
| systemdict /DumpFontsUsed known | |||||
| { | |||||
| (\nFont or CIDFont resources used:) = | |||||
| { = } forall | |||||
| } { | |||||
| DumpFontsNeeded { | |||||
| dup length 0 gt { | |||||
| (\nFonts Needed that are not embedded \(system fonts required\):) = | |||||
| { ( ) print = } forall | |||||
| } { | |||||
| pop | |||||
| (\nNo system fonts are needed.) = | |||||
| } ifelse | |||||
| } { | |||||
| pop | |||||
| } ifelse | |||||
| } ifelse | |||||
| pop | |||||
| } bind def | |||||
| % Copy selected subfiles to temporary files and return the file names | |||||
| % as a PostScript names to protect them from restore. | |||||
| % Currently, all PDF files in the Portfolio are extracted and returned. | |||||
| % | |||||
| % - pdf_collection_files [ /temp_file_name ... /temp_file_name | |||||
| /pdf_collection_files { | |||||
| mark | |||||
| Trailer /Root oget | |||||
| dup /Collection oknown { | |||||
| /Names knownoget { | |||||
| /EmbeddedFiles knownoget { | |||||
| pdf_collection_names | |||||
| } if | |||||
| } if | |||||
| } { | |||||
| pop | |||||
| } ifelse | |||||
| } bind def | |||||
| % Output all the info about the file | |||||
| /dump { % (title) -> - | |||||
| /PDFPageCount pdfpagecount def | |||||
| dump-pdf-info | |||||
| % dict will be populated with fonts through a call to "getPDFfonts" | |||||
| % per page, then the contents dumped out in "dump-fonts-used" | |||||
| 1000 dict | |||||
| 1 1 PDFPageCount | |||||
| { | |||||
| dup pdfgetpage dup 3 -1 roll | |||||
| dump-media-sizes | |||||
| 1 index exch getPDFfonts | |||||
| } for | |||||
| dump-fonts-used | |||||
| } bind def | |||||
| % Choose between collection vs plain file. | |||||
| % Enumerate collections and apply the dump procedure. | |||||
| /enum-pdfs { % - -> - | |||||
| File (r) file runpdfbegin | |||||
| pdf_collection_files | |||||
| dup mark eq { | |||||
| pop | |||||
| File dump | |||||
| runpdfend | |||||
| } { | |||||
| runpdfend | |||||
| ] 0 1 2 index length 1 sub { | |||||
| 2 copy get exch % [file ... ] file i | |||||
| 1 add (0123456789) cvs % [file ... ] file (i+1) | |||||
| File exch ( part ) exch concatstrings concatstrings | |||||
| exch % [file ... ] (fname part i+1) file | |||||
| dup type /filetype eq { | |||||
| runpdfbegin | |||||
| dump | |||||
| runpdfend | |||||
| closefile | |||||
| } { | |||||
| .namestring | |||||
| dup (r) file | |||||
| runpdfbegin | |||||
| exch dump | |||||
| runpdfend | |||||
| deletefile | |||||
| } ifelse | |||||
| } for | |||||
| pop | |||||
| } ifelse | |||||
| } bind def | |||||
| enum-pdfs | |||||
| end | |||||
| quit | |||||
| EOF | |||||
| # get data from gs script | |||||
| local identify="$("$GSBIN" -dNODISPLAY -q -sFile="$INFILEPDF" -dDumpMediaSizes -dDumpFontsNeeded=false -c "$PDFINFOGS" 2>/dev/null | grep MediaBox | head -n1)" | |||||
| identify="${identify##*MediaBox:}" # get page size only for 1st page | |||||
| # remove chars [ and ] | |||||
| identify="${identify//[}" | |||||
| identify="${identify//]}" | |||||
| # Gets page size using Mac Quarts mdls | |||||
| getPageSizeMdls() { | |||||
| [[ ! $OSNAME = "Darwin" ]] && return | |||||
| # get data from image magick | |||||
| local identify="$("$MDLSBIN" -mdls -name kMDItemPageHeight -name kMDItemPageWidth "$INFILEPDF" 2>/dev/null)" | |||||
| identify=($identify) # make it an array | identify=($identify) # make it an array | ||||
| echo " - ${identify[0]} - ${identify[1] - ${identify[3]} - ${identify[4]}}" | |||||
| PGWIDTH=$(printf '%.0f' "${identify[1]}") # assign | |||||
| PGHEIGHT=$(printf '%.0f' "${identify[3]}") # assign | |||||
| } | |||||
| # sanity | |||||
| if [[ ${#identify[@]} -lt 4 ]]; then | |||||
| echo "Error when reading the page size!" | |||||
| echo "The page size information is invalid!" | |||||
| exit 16 | |||||
| fi | |||||
| PGWIDTH=$(printf '%.0f' "${identify[2]}") # assign | |||||
| # Gets page size using Mac Quarts mdls | |||||
| getPageSizePdfInfo() { | |||||
| # get data from image magick | |||||
| local identify="$("$MDLSBIN" -mdls -name kMDItemPageHeight -name kMDItemPageWidth "$INFILEPDF" 2>/dev/null)" | |||||
| identify=($identify) # make it an array | |||||
| echo " - ${identify[0]} - ${identify[1] - ${identify[3]} - ${identify[4]}}" | |||||
| PGWIDTH=$(printf '%.0f' "${identify[1]}") # assign | |||||
| PGHEIGHT=$(printf '%.0f' "${identify[3]}") # assign | PGHEIGHT=$(printf '%.0f' "${identify[3]}") # assign | ||||
| } | } | ||||
| # Gets page size using cat and grep | # Gets page size using cat and grep | ||||
| getPageSize() { | |||||
| getPageSizeCatGrep() { | |||||
| # get MediaBox info from PDF file using cat and grep, these are all possible | # get MediaBox info from PDF file using cat and grep, these are all possible | ||||
| # /MediaBox [0 0 595 841] | # /MediaBox [0 0 595 841] | ||||
| # /MediaBox [ 0 0 595.28 841.89] | # /MediaBox [ 0 0 595.28 841.89] | ||||
| @@ -570,19 +203,15 @@ getPageSize() { | |||||
| local mediaBox="$(cat "$INFILEPDF" | grep -a '/MediaBox' | head -n1)" | local mediaBox="$(cat "$INFILEPDF" | grep -a '/MediaBox' | head -n1)" | ||||
| mediaBox="${mediaBox##*/MediaBox}" | mediaBox="${mediaBox##*/MediaBox}" | ||||
| # If no MediaBox, try BBox | |||||
| if [[ -z $mediaBox ]]; then | |||||
| mediaBox="$(cat "$INFILEPDF" | grep -a '/BBox' | head -n1)" | |||||
| mediaBox="${mediaBox##*/BBox}" | |||||
| fi | |||||
| # No page size data available | # No page size data available | ||||
| if [[ -z $mediaBox ]]; then | |||||
| if [[ -z $mediaBox && $ADAPTIVEMODE = $FALSE ]]; then | |||||
| echo "Error when reading input file!" | echo "Error when reading input file!" | ||||
| echo "Could not determine the page size!" | echo "Could not determine the page size!" | ||||
| echo "There is no MediaBox or BBox in the pdf document!" | |||||
| echo "Aborting..." | |||||
| echo "There is no MediaBox in the pdf document!" | |||||
| echo "Aborting! You may want to try the adaptive mode." | |||||
| exit 15 | exit 15 | ||||
| elif [[ -z $mediaBox && $ADAPTIVEMODE = $TRUE ]]; then | |||||
| return $FALSE | |||||
| fi | fi | ||||
| # remove chars [ and ] | # remove chars [ and ] | ||||
| @@ -602,6 +231,34 @@ getPageSize() { | |||||
| # we are done | # we are done | ||||
| PGWIDTH=$(printf '%.0f' "${mediaBox[2]}") # Get Round Width | PGWIDTH=$(printf '%.0f' "${mediaBox[2]}") # Get Round Width | ||||
| PGHEIGHT=$(printf '%.0f' "${mediaBox[3]}") # Get Round Height | PGHEIGHT=$(printf '%.0f' "${mediaBox[3]}") # Get Round Height | ||||
| return $TRUE | |||||
| } | |||||
| getPageSize() { | |||||
| vprint "Detecting page size with cat+grep method" | |||||
| getPageSizeCatGrep | |||||
| if [[ -z $PGWIDTH && -z $PGHEIGHT ]]; then | |||||
| vprint " -> method failed!" | |||||
| if [[ $OSNAME = "Darwin" ]]; then | |||||
| vprint "Detecting page size with Mac Quartz mdls" | |||||
| getPageSizeMdls | |||||
| else | |||||
| vprint "Detecting page size with Linux pdfinfo" | |||||
| getPageSizePdfInfo | |||||
| fi | |||||
| fi | |||||
| if [[ -z $PGWIDTH && -z $PGHEIGHT ]]; then | |||||
| vprint " -> method failed!" | |||||
| vprint " Detecting page size with ImageMagick's identify" | |||||
| getPageSizeImagemagick | |||||
| fi | |||||
| if [[ -z $PGWIDTH && -z $PGHEIGHT ]]; then | |||||
| echo "Error when detecting PDF paper size!" | |||||
| echo "All methods of detection failed" | |||||
| exit 17 | |||||
| fi | |||||
| } | } | ||||
| @@ -657,9 +314,13 @@ fi | |||||
| # Get dependency binaries | # Get dependency binaries | ||||
| GSBIN=$(which gs 2>/dev/null) | |||||
| BCBIN=$(which bc 2>/dev/null) | |||||
| GSBIN="$(which gs 2>/dev/null)" | |||||
| BCBIN="$(which bc 2>/dev/null)" | |||||
| if [[ $OSNAME = "Darwin" ]]; then | |||||
| MDLSBIN="$(which mdls 2>/dev/null)" | |||||
| else | |||||
| PDFINFOBIN="$(which pdfinfo 2>/dev/null)" | |||||
| fi | |||||
| # Verbose scale info | # Verbose scale info | ||||
| vprint " Scale factor: $SCALE" | vprint " Scale factor: $SCALE" | ||||
| @@ -681,15 +342,16 @@ else | |||||
| fi | fi | ||||
| vprint " Output file: $OUTFILEPDF" | vprint " Output file: $OUTFILEPDF" | ||||
| getPageSizeMdls | |||||
| # Set PGWIDTH and PGHEIGHT | # Set PGWIDTH and PGHEIGHT | ||||
| if [[ $USEIMGMGK -eq $TRUE ]]; then | |||||
| getPageSizeImagemagick | |||||
| elif [[ $USECATGREP -eq $TRUE ]]; then | |||||
| getPageSize | |||||
| else | |||||
| getPageSizeGS | |||||
| fi | |||||
| #if [[ $USEIMGMGK -eq $TRUE ]]; then | |||||
| # getPageSizeImagemagick | |||||
| #elif [[ $USECATGREP -eq $TRUE ]]; then | |||||
| # getPageSize | |||||
| #else | |||||
| # getPageSizeGS | |||||
| #fi | |||||
| vprint " Width: $PGWIDTH postscript-points" | vprint " Width: $PGWIDTH postscript-points" | ||||
| vprint " Height: $PGHEIGHT postscript-points" | vprint " Height: $PGHEIGHT postscript-points" | ||||