diff options
21 files changed, 490 insertions, 234 deletions
diff --git a/Master/tlpkg/tlgs/README.TEXLIVE b/Master/tlpkg/tlgs/README.TEXLIVE index eceb6f81daa..43631c46369 100644 --- a/Master/tlpkg/tlgs/README.TEXLIVE +++ b/Master/tlpkg/tlgs/README.TEXLIVE @@ -1,5 +1,5 @@ -This directory contains a subset of the Ghostscript 9.56.1 distribution +This directory contains a subset of the Ghostscript 10.00.0 distribution for Windows. The only purpose of this package is to support programs shipped with TeX Live. It's not intended for general use. diff --git a/Master/tlpkg/tlgs/Resource/Init/gs_epsf.ps b/Master/tlpkg/tlgs/Resource/Init/gs_epsf.ps index 7f2329d6ab3..fce2e2363bb 100644 --- a/Master/tlpkg/tlgs/Resource/Init/gs_epsf.ps +++ b/Master/tlpkg/tlgs/Resource/Init/gs_epsf.ps @@ -1,4 +1,4 @@ -% Copyright (C) 2001-2021 Artifex Software, Inc. +% Copyright (C) 2001-2022 Artifex Software, Inc. % All Rights Reserved. % % This software is provided AS-IS with no warranty, either express or @@ -120,7 +120,9 @@ % even if HiResBoundingBox occurs first in the EPS file. //systemdict /EPSBoundingBoxState get 1 index lt { % save the BBoxString for possible FitPage when EndComments is seen - exch dup //systemdict /EPSBoundingBoxString 3 -1 roll .forceput + exch dup currentglobal //true setglobal exch + dup length string copy //systemdict /EPSBoundingBoxString 3 -1 roll .forceput + setglobal EPSBoundingBoxParse { //systemdict /EPSCrop known { diff --git a/Master/tlpkg/tlgs/Resource/Init/gs_fonts.ps b/Master/tlpkg/tlgs/Resource/Init/gs_fonts.ps index aaee616f4af..1b1f852aa49 100644 --- a/Master/tlpkg/tlgs/Resource/Init/gs_fonts.ps +++ b/Master/tlpkg/tlgs/Resource/Init/gs_fonts.ps @@ -1,4 +1,4 @@ -% Copyright (C) 2001-2021 Artifex Software, Inc. +% Copyright (C) 2001-2022 Artifex Software, Inc. % All Rights Reserved. % % This software is provided AS-IS with no warranty, either express or @@ -432,6 +432,7 @@ FONTPATH /FONTMAP where { dup /FONTMAP get /FONTMAP exch [ exch //.pathlist exec] put + /FONTMAP dup where pop exch get {/PermitFileReading exch .addcontrolpath} forall } if % Try to enumerate native fonts registered with the os @@ -929,10 +930,14 @@ FAKEFONTS not { (%END FAKEFONTS) .skipeof } if } if % No aliasing. % This mode is incompatible with high level devices. + defaultfontname /None eq { /findfont cvx /invalidfont signalerror } if cleartomark mark defaultfontname } { dup .substitutefont - 2 copy eq { pop defaultfontname } if + 2 copy eq { + defaultfontname /None eq { /findfont cvx /invalidfont signalerror } if + pop defaultfontname + } if //.checkalias exec QUIET not { SHORTERRORS { diff --git a/Master/tlpkg/tlgs/Resource/Init/gs_init.ps b/Master/tlpkg/tlgs/Resource/Init/gs_init.ps index ada1811b177..f1e6d7d684d 100644 --- a/Master/tlpkg/tlgs/Resource/Init/gs_init.ps +++ b/Master/tlpkg/tlgs/Resource/Init/gs_init.ps @@ -1,4 +1,4 @@ -% Copyright (C) 2001-2021 Artifex Software, Inc. +% Copyright (C) 2001-2022 Artifex Software, Inc. % All Rights Reserved. % % This software is provided AS-IS with no warranty, either express or @@ -34,7 +34,7 @@ % Interpreter library version number % NOTE: the interpreter code requires that the first non-comment token % in this file be an integer, and that it match the compiled-in version! -9561 +10000 % Check the interpreter revision. dup revision ne diff --git a/Master/tlpkg/tlgs/Resource/Init/gs_type1.ps b/Master/tlpkg/tlgs/Resource/Init/gs_type1.ps index fa3cdd8826e..ef36509377f 100644 --- a/Master/tlpkg/tlgs/Resource/Init/gs_type1.ps +++ b/Master/tlpkg/tlgs/Resource/Init/gs_type1.ps @@ -1,4 +1,4 @@ -% Copyright (C) 2001-2021 Artifex Software, Inc. +% Copyright (C) 2001-2022 Artifex Software, Inc. % All Rights Reserved. % % This software is provided AS-IS with no warranty, either express or @@ -224,6 +224,12 @@ currentdict /.loadfont1 .undef ifelse /.notdef CharStrings /.notdef get } if + dup type /integertype eq + currentdict /CFFCharStrings known and + { + CFFCharStrings exch .knownget not + { CFFCharStrings 0 get} if + } if end } bind def diff --git a/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps b/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps index 691a8bd6a91..117b362cfb9 100644 --- a/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps +++ b/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps @@ -1421,7 +1421,7 @@ currentdict end readonly def % untouched as set above. % currentpagedevice dup - /Overprint get /simulate eq + /Overprint .knownget {/simulate eq}{false} ifelse 1 index /PageSpotColors known not and exch /PageUsesOverprint .knownget not { //false } if and diff --git a/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps b/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps index 3259c0fe34d..4aa2595f941 100644 --- a/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps +++ b/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps @@ -258,6 +258,9 @@ systemdict /NEWPDF known not {/NEWPDF //true def} if % Uses currentdict as an argument to pdfclose, which closes /PDFfile. Also % executes restore and various cleanup activities. % +% pdfavailable - pdfavailable <bool> +% Determines if there is a PDF interpreter available +% % Also Used by gsview 5 % ===================== % pdfopen <file> pdfopen <dict> @@ -341,10 +344,14 @@ systemdict /NEWPDF known not {/NEWPDF //true def} if /PageUsesTransparency exch % << >> <<page dict>> /PageUsesTransparency bool 3 index 3 1 roll % << >> <<page dict>> <<info dict>> << >> /PageUsesTransparency bool put % <</PageUsesTransparency bool>> <<page dict>> - /NumSpots get % <</PageUsesTransparency bool>> int - /PageSpotColors exch % <</PageUsesTransparency bool>> /PageSpotColors int - 2 index 3 1 roll % <</PageUsesTransparency bool>> <<page dict>> /PageSpotColors int - put % <</PageUsesTransparency bool /PageSpotColors int >> + currentpagedevice /PageSpotColors known { + /NumSpots get % <</PageUsesTransparency bool>> int + /PageSpotColors exch % <</PageUsesTransparency bool>> /PageSpotColors int + 2 index 3 1 roll % <</PageUsesTransparency bool>> <<page dict>> /PageSpotColors int + put % <</PageUsesTransparency bool /PageSpotColors int >> + }{ + pop + } ifelse setpagedevice }bind def @@ -364,6 +371,7 @@ systemdict /NEWPDF known not {/NEWPDF //true def} if 3 1 roll eq or % square media or square page, no point in rotating { + pop pop pop pop //false } { @@ -409,15 +417,33 @@ systemdict /NEWPDF known not {/NEWPDF //true def} if translate % Now use the box and media values to calculate the required x/y scale factors - 3 -1 roll div % box boxwidth mediawidth (mediaheight / boxheight) - 3 1 roll % box (mediaheight / boxheight) boxwidth mediawidth - exch % box (mediaheight / boxheight) mediawidth boxwidth - div % box (mediaheight / boxheight) (mediawidth / boxwidth) - - 2 copy % box Yscale Xscale Yscale Xscale - gt {exch} if % select smallest scale factor - pop % - dup scale % and scale page isomorphically + 4 copy % Stack - box boxwidth boxheight mediawidth mediaheight boxwidth boxheight mediawidth mediaheight + 3 -1 roll div % box boxwidth boxheight mediawidth mediaheight boxwidth mediawidth (mediaheight / boxheight) + 3 1 roll % box boxwidth boxheight mediawidth mediaheight (mediaheight / boxheight) boxwidth mediawidth + exch % box boxwidth boxheight mediawidth mediaheight (mediaheight / boxheight) mediawidth boxwidth + div % box boxwidth boxheight mediawidth mediaheight (mediaheight / boxheight) (mediawidth / boxwidth) + + % Stack - box boxwidth boxheight mediawidth mediaheight Yscale Xscale + + % Centre the output on the media + 2 copy % box boxwidth boxheight mediawidth mediaheight Yscale Xscale Yscale Xscale + gt { + exch pop % box boxwidth boxheight mediawidth mediaheight Xscale + dup 4 index mul % box boxwidth boxheight mediawidth mediaheight Xscale (boxheight * Xscale) + 3 -1 roll sub dup + 0 lt {-1 mul} if % box boxwidth boxheight mediawidth Xscale ((boxheight * Xscale) - mediaheight) + dup 0 ne {2 div} if % box boxwidth boxheight mediawidth Xscale (heightdiff / 2) + 0 exch translate % box boxwidth boxheight mediawidth Xscale + } { + pop % box boxwidth boxheight mediawidth mediaheight Yscale + dup 5 index mul % box boxwidth boxheight mediawidth mediaheight Yscale (boxwidth * Yscale) + 4 -1 roll sub dup + 0 lt {-1 mul} if % box boxwidth boxheight mediaheight Yscale ((boxwidth * Yscale) - mediawidth) + dup 0 ne {2 div} if % box boxwidth boxheight mediawidth Yscale (widthdiff / 2) + 0 translate % box boxwidth boxheight mediawidth Yscale + } ifelse + dup scale % scale both axes the same + pop pop pop % remove the leftover boxwidth, boxheight and mediawidth/height } bind def /newpdf_get_media_box { % <pagedict> get_media_box <box> <bool> @@ -772,172 +798,88 @@ systemdict /NEWPDF known not {/NEWPDF //true def} if % NB device parameters will already have been sent to the device and used to configure it % so here we should only handle parameters which control the behaviour of the interpreter. % +/PDFSwitches [ /QUIET /PDFPassword /PDFDEBUG /PDFSTOPONERROR /PDFSTOPONWARNING /NOTRANSPARENCY /FirstPage /LastPage + /PDFNOCIDFALLBACK /NO_PDFMARK_OUTLINES /NO_PDFMARK_DESTS /PDFFitPage /Printed /UsePDFX3Profile + /UseBleedBox /UseCropBox /UseArtBox /UseTrimBox /ShowAcroForm /ShowAnnots /PreserveAnnots + /NoUserUnit /RENDERTTNOTDEF /DOPDFMARKS /PDFINFO /SHOWANNOTTYPES /PRESERVEANNOTTYPES + /CIDFSubstPath /CIDFSubstFont /SUBSTFONT /IgnoreToUnicode /NONATIVEFONTMAP ] def + /newpdf_gather_parameters { 10 dict begin - /PDFSwitches [ /QUIET /PDFPassword /PDFDEBUG /PDFSTOPONERROR /PDFSTOPONWARNING /NOTRANSPARENCY /FirstPage /LastPage - /PDFNOCIDFALLBACK /NO_PDFMARK_OUTLINES /NO_PDFMARK_DESTS /PDFFitPage /Printed /UsePDFX3Profile - /UseBleedBox /UseCropBox /UseArtBox /UseTrimBox /ShowAcroForm /ShowAnnots /PreserveAnnots - /NoUserUnit /RENDERTTNOTDEF /DOPDFMARKS /PDFINFO /SHOWANNOTTYPES /PRESERVEANNOTTYPES - /CIDSubstPath /CIDSubstFont /IgnoreToUnicode /NONATIVEFONTMAP ] def - - 0 1 PDFSwitches length 1 sub { - PDFSwitches exch get dup where { - exch dup 3 1 roll get def - } - { - pop - } ifelse - } for - currentdict /PDFSwitches undef + + //PDFSwitches { + dup where + { exch dup 3 1 roll get def } + { pop } ifelse + } forall + + % This isn't a command line parameter, we track it internally, but we need to + % send it to the interpreter. It is used to 'offset' the page Dest for Link + % annotations and Outlines by the numebr of pages processed so far. + /PageCount CumulativePageCount def + currentdict end } bind executeonly def +currentdict /PDFSwitches undef + /newpdf_pagecount { - PDFFile //null eq not + currentdict /PDFInfo known { - PDFFile {.PDFInfo} stopped not + PDFInfo + } + { + PDFFile //null eq not { - dup /NumPages known + PDFSTOPONERROR { - /NumPages get + PDFFile .PDFInfo //false } { - pop 0 + PDFFile {.PDFInfo} stopped } ifelse } { - pop 0 - } ifelse + //true + }ifelse + + { + <</NumPages 0>> + } if + } ifelse + + dup /NumPages known + { + /NumPages get } { - 0 + pop 0 } ifelse }bind def /newpdf_runpdfpagerange { /PageList where { - pop PageList - (even) anchorsearch { - pop length 0 gt { - /runpdfpagerange cvx /syntaxerror signalerror - } if - /PDFPageList pdfpagecount 1 add array def - 2 2 pdfpagecount { - PDFPageList exch 1 put - } for - QUIET not { - (Processing even-numbered pages\n) print (1 through ) print pdfpagecount =only - (.) = flush - } if - } { - (odd) anchorsearch { - pop length 0 gt { - /runpdfpagerange cvx /syntaxerror signalerror - } if - /PDFPageList pdfpagecount 1 add array def - 1 2 pdfpagecount { - PDFPageList exch 1 put - } for - QUIET not { - (Processing odd-numbered pages\n) print (1 through ) print pdfpagecount =only - (.) = flush - } if - } { - %% validate string contents, check for digit comma or minus - dup - { - dup 44 eq not { - dup 45 eq not { - dup 48 lt 1 index 57 gt or { - /runpdfpagerange cvx /syntaxerror signalerror - } if - } if - } if - pop - } - forall - /PDFPageList pdfpagecount 1 add array def - { - (,) search { - %% We now have (post) (,) (pre) - exch pop %% get rid of the (,), leave the (post) as the string for the next iteration, deal with the section up to the comma - (-) search { - %% Now we have (end) (-) (start) - exch pop %% get rid of the minus (end) (start) - 0 exch {48 sub exch 10 mul add} forall - %% Make sure the start of the range is inside the number of available pages - dup pdfpagecount le { - exch - %% deal with a trailing '-' by replacing it with the number of pages in the file - dup length 0 eq { - pop pdfpagecount - }{ - 0 exch {48 sub exch 10 mul add} forall - } ifelse - 1 exch %% start 1 end - %% Make sure the end of the range is inside the number of available pages - dup pdfpagecount gt {pop pdfpagecount} if - {PDFPageList exch 1 put} for - } { - %% start of range invalid, drop this range. - pop pop - }ifelse - }{ - %% no minus signs, must be a simple page number - 0 exch {48 sub exch 10 mul add} forall - %% ensure its in the valid range of pages - dup pdfpagecount le { - PDFPageList exch 1 put - } { - pop - } ifelse - } ifelse - }{ - %% no commas separating pages, just the original string (), deal with its as a section, then exit the loop - (-) search { - %% Now we have (end) (-) (start) - exch pop %% get rid of the minus (end) (start) - 0 exch {48 sub exch 10 mul add} forall - %% Make sure the start of the range is inside the number of available pages - dup pdfpagecount le { - exch - %% deal with a trailing '-' by replacing it with the number of pages in the file - dup length 0 eq { - pop pdfpagecount - }{ - 0 exch {48 sub exch 10 mul add} forall - } ifelse - 1 exch %% start 1 end - %% Make sure the end of the range is inside the number of available pages - dup pdfpagecount gt {pop pdfpagecount} if - {PDFPageList exch 1 put} for - } { - %% start of range invalid, drop this range. - pop pop - }ifelse - }{ - %% no minus signs, must be a simple page number - 0 exch {48 sub exch 10 mul add} forall - %% ensure its in the valid range of pages - dup pdfpagecount le { - PDFPageList exch 1 put - } { - pop - } ifelse - } ifelse - exit %% done all the sections. - } ifelse - } loop - QUIET not { - (Processing pages ) print PageList =only - (.) = flush - } if - } ifelse - } ifelse - 1 pdfpagecount + pop + % make sure string is NUL terminated as C expects. + PageList 1 string dup 0 0 put concatstrings + pdfpagecount + .PDFparsePageList + dup 0 eq { % No ranges, error + (\n **** Error: Invalid PageList: ) print + PageList print + (\n No pages will be processed.) = flush + /runpdfpagerange cvx /syntaxerror signalerror + } if + array astore % move integer triples from the stack to the array + % newpdf PDFPageList is an array of 3 elements per range: even/odd flag, start, end + /PDFPageList exch def + QUIET not { + (Processing pages ) print PageList =only (.) = flush + } if + 1 pdfpagecount % dummy parameters for newpdf_dopages }{ /FirstPage where { pop FirstPage dup pdfpagecount gt { @@ -963,22 +905,27 @@ systemdict /NEWPDF known not {/NEWPDF //true def} if /newpdf_runpdf { runpdfbegin % <file> runpdfbegin - - PDFInfo /Collection known + PDFInfo type /dicttype eq { - PDFInfo /Collection get - pdfclose - dup length 1 sub 0 2 3 -1 roll + PDFInfo /Collection known { - 1 index exch get (r) file runpdf - } for - pop - } - { - process_trailer_attrs % - process_trailer_attrs - - runpdfpagerange % - runpdfpagerange <int> <int> - dopdfpages % <int> <int> dopdfpages - - runpdfend % - runpdfend - - } ifelse + PDFInfo /Collection get + pdfclose + dup length 1 sub 0 2 3 -1 roll + { + 1 index exch get (r) file runpdf + } for + pop + } + { + process_trailer_attrs % - process_trailer_attrs - + runpdfpagerange % - runpdfpagerange <int> <int> + dopdfpages % <int> <int> dopdfpages - + runpdfend % - runpdfend - + } ifelse + } { + pop pop + }ifelse } bind def /newpdf_runpdfbegin @@ -986,6 +933,8 @@ systemdict /NEWPDF known not {/NEWPDF //true def} if /pdfdict 10 dict def pdfdict begin + currentpagedevice /PageCount get + /CumulativePageCount exch def % This is for the benefit of pdf2dsc which assumes it will be present /Trailer << >> def /PDFSave save def @@ -1011,28 +960,51 @@ systemdict /NEWPDF known not {/NEWPDF //true def} if /pget {2 copy known {get //true}{pop pop //false}ifelse}bind def newpdf_gather_parameters - {.PDFInit} stopped - { - /PDFFile //null def - /PDFInfo //null def - } + PDFSTOPONERROR { + .PDFInit /PDFFile exch def pdfopen /PDFInfo exch def pop + } + { + {.PDFInit} stopped + { + ( **** Error: Failed to initialise PDF interpreter.\n) newpdf_pdfformaterror + /PDFFile //null def + /PDFInfo //null def + } + { + /PDFFile exch def + pdfopen + /PDFInfo exch def + pop + }ifelse }ifelse } bind def /newpdf_pdfgetpage { - PDFFile exch 1 sub {.PDFPageInfo} stopped + dup 1 sub + PDFSTOPONERROR { - pop pop - ( **** Error: Couldn't get page info.\n) newpdf_pdfformaterror - ( Output may be incorrect.\n) newpdf_pdfformaterror - //null - } if + PDFFile exch .PDFPageInfo + dup 3 -1 roll + /Page# exch put + } + { + PDFFile exch {.PDFPageInfo} stopped + { + pop pop + ( **** Error: Couldn't get page info.\n) newpdf_pdfformaterror + ( Output may be incorrect.\n) newpdf_pdfformaterror + //null + }{ + dup 3 -1 roll + /Page# exch put + } ifelse + }ifelse } bind def /newpdf_process_trailer_attrs @@ -1052,54 +1024,88 @@ systemdict /NEWPDF known not {/NEWPDF //true def} if /newpdf_pdfshowpage_finish { - /Page# get PDFFile exch 1 sub {.PDFDrawPage} stopped + PDFSTOPONERROR { - pop pop - ( **** Error: Page drawing error occured.\n) newpdf_pdfformaterror - ( Output may be incorrect.\n) newpdf_pdfformaterror - } if - {showpage} stopped + /Page# get PDFFile exch 1 sub .PDFDrawPage + showpage + } { - ( **** Error: Page drawing error occured.\n) newpdf_pdfformaterror - ( Could not draw this page at all, page will be missing in the output.\n) newpdf_pdfformaterror - } if + /Page# get PDFFile exch 1 sub {.PDFDrawPage} stopped + { + pop pop + ( **** Error: Page drawing error occurred.\n) newpdf_pdfformaterror + ( Output may be incorrect.\n) newpdf_pdfformaterror + } if + {showpage} stopped + { + ( **** Error: Page drawing error occurred.\n) newpdf_pdfformaterror + ( Could not draw this page at all, page will be missing in the output.\n) newpdf_pdfformaterror + } if + }ifelse grestore } bind def /newpdf_pdfshowpage { - pdfshowpage_init - pdfshowpage_setpage - pdfshowpage_finish + /PDFINFO where {/PDFINFO get}{//false}ifelse + { + /Page# get PDFFile exch 1 sub {.PDFDrawPage} stopped pop + } + { + pdfshowpage_init + pdfshowpage_setpage + pdfshowpage_finish + }ifelse } bind def /newpdf_runpdfend { + % Get the accumulated count of pages processed so far + % and the number of pages in this file. Do this before + % we close the file and restore the state. Save the values + % on the stack. + pdfpagecount + CumulativePageCount + pdfclose PDFSave restore + end % pdfdict + + % add the number of pages in this file to the accumulated count, + % and store that in the device for later reuse. This allows us to + % add the number of pages already in the output to the 'Dest' of + % Outlines and Link annotations. + add <</PageCount 3 -1 roll >> setpagedevice } bind def /newpdf_pdfopen { dup PDFFile //null ne { - PDFFile {.PDFStream} stopped + PDFSTOPONERROR { - pop pop - ( **** Error: Couldn't initialise file.\n) newpdf_pdfformaterror - ( Output may be incorrect.\n) newpdf_pdfformaterror - <</NumPages 0>> + PDFFile .PDFStream + PDFFile .PDFInfo } { - PDFFile {.PDFInfo} stopped + PDFFile {.PDFStream} stopped { - pop - ( **** Error: Couldn't get page information.\n) newpdf_pdfformaterror + pop pop + ( **** Error: Couldn't initialise file.\n) newpdf_pdfformaterror ( Output may be incorrect.\n) newpdf_pdfformaterror <</NumPages 0>> - } if - } ifelse + } + { + PDFFile {.PDFInfo} stopped + { + pop + ( **** Error: Couldn't get page information.\n) newpdf_pdfformaterror + ( Output may be incorrect.\n) newpdf_pdfformaterror + <</NumPages 0>> + } if + } ifelse + }ifelse } { pop @@ -1109,30 +1115,48 @@ systemdict /NEWPDF known not {/NEWPDF //true def} if /newpdf_pdfclose { - PDFFile {.PDFClose} stopped + PDFSTOPONERROR { - pop - } if + PDFFile .PDFClose + } + { + PDFFile {.PDFClose} stopped + { + pop + } if + }ifelse +} bind def + +/pdfavailable +{ + .PDFAvailable NEWPDF not or } bind def % <int> <int> dopdfpages - % First Page and then LastPage +% If PDFPageList array exists, the parameters are 1 pdfpagecount and are ignored. /newpdf_dopdfpages { //DisablePageHandlerDevice exec - 1 exch - { - %% If we have a array of pages to render, use it. - /PDFPageList where { - pop dup PDFPageList exch get 1 eq - } - {//true} ifelse - + %% If we have a array of page ranges to render, use it. + /PDFPageList where { + pop + pop pop % don't use dummy parameters + PDFPageList + % process the ranges (3 elements per range) + 0 3 2 index length 1 sub { + 1 index 1 index get % even = 2, odd = 1 any = 0 + 2 index 2 index 1 add get % start of range + exch + 3 index 3 index 2 add get % end of range + exch + % stack: start end even/odd + 0 eq { 1 } { 2 } ifelse + 2 index 2 index gt { neg } if % negate increment for reverse range + exch { - dup pdfgetpage + pdfgetpage dup //null ne { - exch 1 index - /Page# 3 -1 roll put pdfshowpage } { PDFSTOPONERROR { @@ -1143,10 +1167,28 @@ systemdict /NEWPDF known not {/NEWPDF //true def} if ( not found.\n) newpdf_pdfformaterror } ifelse } ifelse - }{ - pop - }ifelse - } for + } for + pop % for loop index + } for + pop % done with array + } { + % else, Process the pages given by the FirstPage, LastPage + 1 exch + { + pdfgetpage + dup //null ne { + pdfshowpage + } { + PDFSTOPONERROR { + /dopdfpages cvx /syntaxerror signalerror + } { + pop pop + ( **** Error: page) newpdf_pdfformaterror + ( not found.\n) newpdf_pdfformaterror + } ifelse + } ifelse + } for + } ifelse //EnablePageHandlerDevice exec } bind def @@ -1195,10 +1237,20 @@ systemdict /NEWPDF known not {/NEWPDF //true def} if % stack: tempname tempfile dup 0 setfileposition dup - runpdf + pdfavailable { + runpdf + }{ + closefile + (%stderr) (w) file ( **** ERROR: No PDF interpreter available, unable to process PDF files as input.\n)writestring + } ifelse closefile deletefile } { - runpdf + pdfavailable { + runpdf + }{ + closefile + (%stderr) (w) file ( **** ERROR: No PDF interpreter available, unable to process PDF files as input.\n)writestring + } ifelse } ifelse } { pop pop pop pop cvx .runps % (%!PS) found first @@ -1219,6 +1271,7 @@ currentdict /runpdfstring .undef newpdf_runpdfbegin } { + (%stderr) (w) file (\n **** Warning: You are using the legacy PDF interpreter \(-dNEWPDF=false\) which is now deprecated and unsupported\n) writestring userdict begin % It turns out that the PDF interpreter uses memory more % effectively if it is run under at least one level of save. @@ -1596,7 +1649,26 @@ currentdict /EnablePageHandlerDevice undef /runpdf { % <file> runpdf - /NEWPDF where {/NEWPDF get} {//true} ifelse - {newpdf_runpdf} + { + dup type /filetype eq + { + dup + PDFSTOPONERROR + { + newpdf_runpdf + } + { + {newpdf_runpdf} stopped + { + ( **** Error: PDF interpreter encountered an error processing the file.\n) pdfformaterror + } if + }ifelse + closefile + } + { + ( **** Error: Attempt to process something other than a file object in runpdf.\n) pdfformaterror + } ifelse + } { %% Get the PDF filename (it *must* be a file even if it came from stdin it gets %% copied to a temporary file) and store it in pdfdict. We will use this for diff --git a/Master/tlpkg/tlgs/bin/gsdll32.dll b/Master/tlpkg/tlgs/bin/gsdll32.dll Binary files differindex 13779e711d7..d9f28a953ab 100755 --- a/Master/tlpkg/tlgs/bin/gsdll32.dll +++ b/Master/tlpkg/tlgs/bin/gsdll32.dll diff --git a/Master/tlpkg/tlgs/bin/gsdll64.dll b/Master/tlpkg/tlgs/bin/gsdll64.dll Binary files differindex ccc45e3e5f3..1c22ca61a4c 100755 --- a/Master/tlpkg/tlgs/bin/gsdll64.dll +++ b/Master/tlpkg/tlgs/bin/gsdll64.dll diff --git a/Master/tlpkg/tlgs/bin/gswin32.exe b/Master/tlpkg/tlgs/bin/gswin32.exe Binary files differindex 7345772111c..13202c7b32a 100755 --- a/Master/tlpkg/tlgs/bin/gswin32.exe +++ b/Master/tlpkg/tlgs/bin/gswin32.exe diff --git a/Master/tlpkg/tlgs/bin/gswin32c.exe b/Master/tlpkg/tlgs/bin/gswin32c.exe Binary files differindex 83a0a415cca..4de996b1721 100755 --- a/Master/tlpkg/tlgs/bin/gswin32c.exe +++ b/Master/tlpkg/tlgs/bin/gswin32c.exe diff --git a/Master/tlpkg/tlgs/bin/gswin64.exe b/Master/tlpkg/tlgs/bin/gswin64.exe Binary files differindex 8a1c9230a0a..2ba86626f0e 100755 --- a/Master/tlpkg/tlgs/bin/gswin64.exe +++ b/Master/tlpkg/tlgs/bin/gswin64.exe diff --git a/Master/tlpkg/tlgs/bin/gswin64c.exe b/Master/tlpkg/tlgs/bin/gswin64c.exe Binary files differindex 4e27dae815e..02eef8a431e 100755 --- a/Master/tlpkg/tlgs/bin/gswin64c.exe +++ b/Master/tlpkg/tlgs/bin/gswin64c.exe diff --git a/Master/tlpkg/tlgs/lib/pdf_info.ps b/Master/tlpkg/tlgs/lib/pdf_info.ps index 35951e9a736..2a5f5796658 100644 --- a/Master/tlpkg/tlgs/lib/pdf_info.ps +++ b/Master/tlpkg/tlgs/lib/pdf_info.ps @@ -527,6 +527,164 @@ systemdict /.sort known not { } ifelse } bind def -enum-pdfs +/NEWPDF where {/NEWPDF get}{false}ifelse +{ + /knownoget + { + 2 copy known { + get + true + }{ + pop pop false + } ifelse + }bind def + + /PDFContext << >> .PDFInit def + {File (r) file PDFContext .PDFStream} stopped not + { + + PDFContext .PDFInfo + File + () = ( ) print print ( has ) print + dup /NumPages get dup =print 10 mod 1 eq { ( page.\n) } { ( pages\n) } ifelse = flush + + /DumpXML where {/DumpXML get}{//false}ifelse + { + (\n*** DumpXML is no longer supported. ***\n\n) print + }if + + dup /Title knownoget { (Title: ) print write-doc-string () = flush } if + dup /Author knownoget { (Author: ) print write-doc-string () = flush } if + dup /Subject knownoget { (Subject: ) print write-doc-string () = flush } if + dup /Keywords knownoget { (Keywords: ) print write-doc-string () = flush } if + dup /Creator knownoget { (Creator: ) print write-doc-string () = flush } if + dup /Producer knownoget { (Producer: ) print write-doc-string () = flush } if + dup /CreationDate knownoget { (CreationDate: ) print write-doc-string () = flush } if + dup /ModDate knownoget { (ModDate: ) print write-doc-string () = flush } if + dup /Trapped knownoget { (Trapped: ) print write-doc-string () = flush } if + (\n) print flush + + /EmbeddedFonts 10 dict def + /UnEmbeddedFonts 10 dict def + /FontNumbers 10 dict def + + /NumPages get 0 1 3 -1 roll 1 sub + { + dup + PDFContext exch .PDFPageInfoExt exch + DumpMediaSizes { + (Page ) print 1 add =print + dup /UserUnit knownoget {( UserUnit: ) print =print} if + dup /MediaBox knownoget {( MediaBox: ) print ==only} if + dup /CropBox knownoget {( CropBox: ) print ==only} if + dup /BleedBox knownoget {( BleedBox: ) print ==only} if + dup /TrimBox knownoget {( TrimBox: ) print ==only} if + dup /ArtBox knownoget {( ArtBox: ) print ==only} if + dup /Rotate knownoget not {0}if ( Rotate = ) print =print + dup /Annots knownoget {{( Page contains Annotations) print} if} if + dup /UsesTransparency knownoget {{( Page uses transparency features) print} if} if + dup /Spots knownoget { + (\n Page Spot colors: ) = + {( ) print (') print 256 string cvs print (') =} forall + } if + (\n) print flush + (\n) print flush + } + { + pop + } ifelse + + /Fonts knownoget + { + { + dup /ObjectNum known + { + %% Fonts with an ObjectNumber may have been previously referenced on another page + dup /ObjectNum get + dup FontNumbers exch known + { + pop + %% found the ObjectNumber in the FontNumbers dictionary so we've seen this one. + //false + } + { + %% Not seen before, add the number to the array and process this font + FontNumbers exch dup put + //true + }ifelse + }{ + %% Fonts without an ObjectNumber are defined inline and so must be unique + //true + } ifelse + { + % First time we've seen the font + dup /Descendants known + { + dup /BaseFont get + EmbeddedFonts exch dup put % We class the Type 0 font as 'embedded', but it's really the descendant which is embedded or not. + dup /Descendants get + 1 index /BaseFont get + 2 index /Embedded get + { + EmbeddedFonts exch dup put + } + { + UnEmbeddedFonts exch dup put + }ifelse + pop + } + { + dup /BaseFont get + 1 index /Embedded get + { + EmbeddedFonts exch dup put + } + { + UnEmbeddedFonts exch dup put + } ifelse + }ifelse + pop + } + { + pop + } ifelse + }forall + } if + } for + + /DumpFontsUsed where {/DumpFontsUsed get}{//false}ifelse + { + [ + UnEmbeddedFonts {pop} forall + /ShowEmbeddedFonts where {/ShowEmbeddedFonts get}{//false}ifelse + { + EmbeddedFonts {pop} forall + } if + ] + dup length 0 gt { + { 100 string cvs exch 100 string cvs exch lt } .sort + (\nFont or CIDFont resources used (plain name and ASCIIHEX string representation):) = + { 128 string cvs dup print ( ) print (<) print 128 string cvs {16 8 string cvrs print} forall (>) print (\n) print} forall + } if + } + { + [ + DumpFontsNeeded + { + UnEmbeddedFonts {pop} forall + } if + ] + dup length 0 gt { + { 100 string cvs exch 100 string cvs exch lt } .sort + (\nFonts Needed that are not embedded \(system fonts required\):) = + { ( ) print 128 string cvs dup print ( ) print (<) print {16 8 string cvrs print} forall (>) print (\n) print} forall + } if + }ifelse + } if + PDFContext .PDFClose +} +{ + enum-pdfs +} ifelse end quit diff --git a/Master/tlpkg/tlgs/lib/viewcmyk.ps b/Master/tlpkg/tlgs/lib/viewcmyk.ps index e8034e53346..33c5bdceb15 100644 --- a/Master/tlpkg/tlgs/lib/viewcmyk.ps +++ b/Master/tlpkg/tlgs/lib/viewcmyk.ps @@ -56,6 +56,8 @@ cleartomark (Usage: gs -- viewcmyk.ps filename.cmyk width\n) print ( e.g.: gs -- viewcmyk.ps my.cmyk 2550\n) print flush + (From version 9.50 you must supply permissions for this program to read the input file(s)\n) print flush + (either by using -dNOSAFER or by supplying --permit-file-read=<filename>\n) = flush } ifelse } { pop diff --git a/Master/tlpkg/tlgs/lib/viewjpeg.ps b/Master/tlpkg/tlgs/lib/viewjpeg.ps index 71cb5d44131..54453fe4d83 100644 --- a/Master/tlpkg/tlgs/lib/viewjpeg.ps +++ b/Master/tlpkg/tlgs/lib/viewjpeg.ps @@ -35,6 +35,9 @@ % Usage example: % (jpeg-6/testimg.jpg) viewJPEG +% From version 9.50 you must supply permissions for this program +% to read the input file(s) either by using -dNOSAFER or by +% supplying --permit-file-read=<filename> /languagelevel where {pop languagelevel 2 lt}{true} ifelse { (JPEG needs PostScript Level 2!\n) print flush stop diff --git a/Master/tlpkg/tlgs/lib/viewpbm.ps b/Master/tlpkg/tlgs/lib/viewpbm.ps index c8d3f86bc84..143a056a68a 100644 --- a/Master/tlpkg/tlgs/lib/viewpbm.ps +++ b/Master/tlpkg/tlgs/lib/viewpbm.ps @@ -327,6 +327,8 @@ ( e.g.: gs [-dSCALE=#.#] [-dFITPAGE] [--] viewpbm.ps my.ppm another.ppm\n) print flush ( also -dTAG option can be used to show the pseudo-color tag image from a\n) print flush ( P7 RGB_TAG PAM file created by the bitrgbtags device.\n) print flush + (From version 9.50 you must supply permissions for this program to read the input file(s)\n) print flush + (either by using -dNOSAFER or by supplying --permit-file-read=<filename>\n) = flush } ifelse } diff --git a/Master/tlpkg/tlgs/lib/viewpcx.ps b/Master/tlpkg/tlgs/lib/viewpcx.ps index 76bfdfae6eb..0b549ad90fe 100644 --- a/Master/tlpkg/tlgs/lib/viewpcx.ps +++ b/Master/tlpkg/tlgs/lib/viewpcx.ps @@ -183,6 +183,8 @@ { cleartomark (Usage: gs -- viewpcx.ps filename.pcx ...\n) print ( e.g.: gs -- viewpcx.ps my.pcx another.pcx\n) print flush + (From version 9.50 you must supply permissions for this program to read the input file(s)\n) print flush + (either by using -dNOSAFER or by supplying --permit-file-read=<filename>\n) = flush } ifelse } diff --git a/Master/tlpkg/tlgs/lib/viewraw.ps b/Master/tlpkg/tlgs/lib/viewraw.ps index dee86e02300..85438ffa103 100644 --- a/Master/tlpkg/tlgs/lib/viewraw.ps +++ b/Master/tlpkg/tlgs/lib/viewraw.ps @@ -181,6 +181,8 @@ cleartomark (Usage: gs -- viewraw filename.raw width\n) print ( e.g.: gs -- viewraw my.raw 2550\n) print flush + (From version 9.50 you must supply permissions for this program to read the input file(s)\n) print flush + (either by using -dNOSAFER or by supplying --permit-file-read=<filename>\n) = flush } ifelse } { pop diff --git a/Master/tlpkg/tlgs/lib/viewrgb.ps b/Master/tlpkg/tlgs/lib/viewrgb.ps index ab2f6d82c4a..c2c34fec635 100644 --- a/Master/tlpkg/tlgs/lib/viewrgb.ps +++ b/Master/tlpkg/tlgs/lib/viewrgb.ps @@ -143,6 +143,8 @@ ( e.g.: gs -- viewrgb.ps my.rgb 2550\n) print flush ( -dSCALE=### sets specific scaling \(default = 1.0\)) = flush ( -dBITS=# sets the BitsPerComponent \(1, 2, 8, 12] \(default = 1\)) = flush + (From version 9.50 you must supply permissions for this program to read the input file(s)\n) print flush + (either by using -dNOSAFER or by supplying --permit-file-read=<filename>\n) = flush } ifelse } { pop diff --git a/Master/tlpkg/tlgs/lib/zugferd.ps b/Master/tlpkg/tlgs/lib/zugferd.ps index 97d33d4d2b4..d20c39edc0c 100644 --- a/Master/tlpkg/tlgs/lib/zugferd.ps +++ b/Master/tlpkg/tlgs/lib/zugferd.ps @@ -455,7 +455,7 @@ ZUGFeRDVersion (2p1) eq { [ /_objdef {FSDict} /type /dict /OBJ pdfmark % Fill in the required dictionary elements [ {FSDict} << - /Type /FileSpec + /Type /Filespec /F ZUGFeRDDocumentFileName /UF ZUGFeRDDocumentFileName SimpleUTF16BE /Desc (ZUGFeRD electronic invoice) |