diff options
author | Reinhard Kotucha <reinhard.kotucha@web.de> | 2017-04-23 22:15:25 +0000 |
---|---|---|
committer | Reinhard Kotucha <reinhard.kotucha@web.de> | 2017-04-23 22:15:25 +0000 |
commit | 54448d6ab44d2033482fafa56ddc40d42a6815eb (patch) | |
tree | d4fdfff7b7f75c367a76f872e2986af75c5f81a3 /Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps | |
parent | f2a947f3017b82f1dfa1058d1d720fe11d298e92 (diff) |
Add files needed for CJK to tlgs, adapt runscript.tlu accordingly.
git-svn-id: svn://tug.org/texlive/trunk@43997 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps')
-rw-r--r-- | Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps | 1054 |
1 files changed, 1054 insertions, 0 deletions
diff --git a/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps b/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps new file mode 100644 index 00000000000..b49eec43f9b --- /dev/null +++ b/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps @@ -0,0 +1,1054 @@ +% 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. +% + +% PDF writer additions to systemdict. + +% This file should be included iff the pdfwrite "device" is included +% in the executable. + +% ---------------- Predefined configurations ---------------- % + +% These correspond to the 4 predefined settings in Acrobat Distiller 5, +% plus a "default" setting that doesn't downsample images. + +{ /pdfwrite finddevice pop } .internalstopped +{pop pop (%END PDFWR) .skipeof} if + +languagelevel 2 .setlanguagelevel + +/.a2112 [2 1 1 2] readonly def +/.a1111 [1 1 1 1] readonly def +/.standardfonts [ + /Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique + /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique + /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic + /Symbol /ZapfDingbats +] readonly def + +% Parameters common to all non-default configurations. +% Note that the default configuration overrides a few of these. +/.defaultImageDict mark + /QFactor 0.9 /Blend 1 + /HSamples .a2112 /VSamples .a2112 +.dicttomark readonly def +/.distillercommon mark + /AlwaysEmbed [] + /AntiAliasColorImages //false + /AntiAliasGrayImages //false + /AntiAliasMonoImages //false + /ASCII85EncodePages //false + /AutoFilterColorImages //true + /AutoFilterGrayImages //true + /AutoPositionEPSFiles //true + /Binding /Left + /CalCMYKProfile (None) % (U.S. Web Coated (SWOP) v2) + /CalGrayProfile (None) % (Dot Gain 20%) + /CalRGBProfile (None) % (sRGB IEC61966-2.1) + /ColorImageDepth -1 + /ColorImageDict .defaultImageDict + /ColorImageDownsampleThreshold 1.5 + /ColorImageFilter /DCTEncode + /CompressPages //true + /ConvertImagesToIndexed //true + /DefaultRenderingIntent /Default + /DetectBlends //true + /DownsampleColorImages //true + /DownsampleGrayImages //true + /DownsampleMonoImages //true + /EmitDSCWarnings //false + /EncodeColorImages //true + /EncodeGrayImages //true + /EncodeMonoImages //true + /EndPage -1 + /GrayImageDepth -1 + /GrayImageDict .defaultImageDict + /GrayImageDownsampleThreshold 1.5 + /GrayImageFilter /DCTEncode + /ImageMemory 524288 + /LockDistillerParams //false + /MaxSubsetPct 100 + /MonoImageDepth -1 + /MonoImageDict mark + /K -1 + .dicttomark readonly + /MonoImageDownsampleThreshold 1.5 + /MonoImageFilter /CCITTFaxEncode + /OffOptimizations 0 + /OPM 1 + /Optimize //true + /ParseDSCComments //true + /ParseDSCCommentsForDocInfo //true + /PDFXTrimBoxToMediaBoxOffset [0 0 0 0] + /PDFXSetBleedBoxToMediaBox //true + /PDFXBleedBoxToTrimBoxOffset [0 0 0 0] + /PreserveCopyPage //true + /PreserveHalftoneInfo //false + /sRGBProfile (None) % (sRGB IEC61966-2.1) + /StartPage 1 + /SubsetFonts //true + /TransferFunctionInfo /Preserve + /UseFlateCompression //true + /UsePrologue //false +.dicttomark readonly def + +/.distillersettings mark + +/default mark + /AutoRotatePages /PageByPage + /CannotEmbedFontPolicy /Warning + /ColorACSImageDict .defaultImageDict + /ColorConversionStrategy /LeaveColorUnchanged +% /ColorImageDownsampleType +% /ColorImageResolution +% /CompatibilityLevel + /CreateJobTicket //false + /DoThumbnails //false + /DownsampleColorImages //false % override + /DownsampleGrayImages //false % override + /DownsampleMonoImages //false % override + /EmbedAllFonts //true + /GrayACSImageDict .defaultImageDict +% /GrayImageDownsampleType +% /GrayImageResolution +% /MonoImageDownsampleType +% /MonoImageResolution + /NeverEmbed .standardfonts + /Optimize //false % override + /PreserveEPSInfo //true + /PreserveOPIComments //true + /PreserveOverprintSettings //true + /UCRandBGInfo /Preserve +.dicttomark readonly + +/.screenACSImageDict mark + /QFactor 0.76 /Blend 1 /ColorTransform 1 + /HSamples .a2112 /VSamples .a2112 +.dicttomark readonly def +/screen mark + /AutoRotatePages /PageByPage +% /CalGrayProfile (None) + /CannotEmbedFontPolicy /Warning + /ColorACSImageDict .screenACSImageDict + /ColorConversionStrategy /sRGB + /ColorImageDownsampleType /Average + /ColorImageResolution 72 + /CompatibilityLevel 1.5 + /CreateJobTicket //false + /DoThumbnails //false + /EmbedAllFonts //true + /GrayACSImageDict .screenACSImageDict + /GrayImageDownsampleType /Average + /GrayImageResolution 72 + /MonoImageDownsampleType /Subsample + /MonoImageResolution 300 + /NeverEmbed .standardfonts + /PreserveEPSInfo //false + /PreserveOPIComments //false + /PreserveOverprintSettings //false + /UCRandBGInfo /Remove +.dicttomark readonly + +/ebook mark + /AutoRotatePages /All +% /CalGrayProfile (None) + /CannotEmbedFontPolicy /Warning + /ColorACSImageDict .screenACSImageDict + /ColorConversionStrategy /sRGB + /ColorImageDownsampleType /Average + /ColorImageResolution 150 + /CompatibilityLevel 1.5 + /CreateJobTicket //false + /DoThumbnails //false + /EmbedAllFonts //true + /GrayACSImageDict .screenACSImageDict + /GrayImageDownsampleType /Average + /GrayImageResolution 150 + /MonoImageDownsampleType /Subsample + /MonoImageResolution 300 + /NeverEmbed .standardfonts + /PreserveEPSInfo //false + /PreserveOPIComments //false + /PreserveOverprintSettings //false + /UCRandBGInfo /Remove +.dicttomark readonly + +/.printerACSImageDict mark + /QFactor 0.4 /Blend 1 /ColorTransform 1 + /HSamples .a1111 /VSamples .a1111 +.dicttomark readonly def +/printer mark + /AutoRotatePages /None +% /CalGrayProfile (None) + /CannotEmbedFontPolicy /Warning + /ColorACSImageDict .printerACSImageDict + /ColorConversionStrategy /UseDeviceIndependentColor + /ColorImageDownsampleType /Average + /ColorImageResolution 300 + /CompatibilityLevel 1.5 + /CreateJobTicket //true + /DoThumbnails //false + /EmbedAllFonts //true + /GrayACSImageDict .printerACSImageDict + /GrayImageDownsampleType /Average + /GrayImageResolution 300 + /MonoImageDownsampleType /Subsample + /MonoImageResolution 1200 + /NeverEmbed [] + /PreserveEPSInfo //true + /PreserveOPIComments //true + /PreserveOverprintSettings //true + /UCRandBGInfo /Preserve +.dicttomark readonly + +/.prepressACSImageDict mark + /QFactor 0.15 /Blend 1 /ColorTransform 1 + /HSamples .a1111 /VSamples .a1111 +.dicttomark readonly def +/prepress mark + /AutoRotatePages /None + /CannotEmbedFontPolicy /Error + /ColorACSImageDict .prepressACSImageDict + /ColorConversionStrategy /LeaveColorUnchanged + /ColorImageDownsampleType /Bicubic + /ColorImageResolution 300 + /CompatibilityLevel 1.5 + /CreateJobTicket //true + /DoThumbnails //true + /EmbedAllFonts //true + /GrayACSImageDict .prepressACSImageDict + /GrayImageDownsampleType /Bicubic + /GrayImageResolution 300 + /MonoImageDownsampleType /Subsample + /MonoImageResolution 1200 + /NeverEmbed [] + /PreserveEPSInfo //true + /PreserveOPIComments //true + /PreserveOverprintSettings //true + /UCRandBGInfo /Preserve +.dicttomark readonly + +% Define distiller settings for the ps2write device and for the ps2ps2 script : +/PSL2Printer mark + /AutoRotatePages /None + /CannotEmbedFontPolicy /Error + /ColorACSImageDict .prepressACSImageDict + /ColorConversionStrategy /LeaveColorUnchanged + /ColorImageDownsampleType /Subsample + /ColorImageResolution 600 + /DownsampleColorImages false + /CompatibilityLevel 1.2 % Always 1.2 with ps2write. + % /CreateJobTicket //true % Not sure + /DoThumbnails //false + /EmbedAllFonts //true + /GrayACSImageDict .prepressACSImageDict + /GrayImageDownsampleType /Subsample + /GrayImageResolution 600 + /DownsampleGrayImages false + /MonoImageDownsampleType /Subsample + /MonoImageResolution 1200 + /DownsampleMonoImages false + /NeverEmbed [] + /PreserveEPSInfo //true + /PreserveOPIComments //true + /PreserveOverprintSettings //true + /UCRandBGInfo /Preserve + /PreserveHalftoneInfo //true + /TransferFunctionInfo /Preserve +%% Deprecated in 9.06 +%% /MaxViewerMemorySize 8000000 + /CompressPages //false + /CompressFonts //true + /ASCII85EncodePages //true +.dicttomark readonly + +.dicttomark readonly def + +% ---------------- End of predefined configurations ---------------- % + +% Set optimizations for converting PostScript to PDF. +% The ps2pdf* scripts invoke this. +/.setpdfwrite { % - .setpdfwrite - + % Set a large VM threshold to reduce garbage collection. + currentuserparams /VMThreshold get 3000000 .max setvmthreshold +} bind def + +% ---------------- pdfmark and DSC processing ---------------- % + +/.write_small_positive_real % <file> <real> .write_small_positive_real - +{ % The argument must be grater than 0 and must be strongly samller than 0.1. + % The conversion isn't simple due to the low (24 bits) precision + % of the floating point arithmetics in Postscript. + % For best result we first use the 1e8 factor since its binary + % representation 101111101011110000100000000 well rounds into 14 significant + % bits : 101111101011110000000000000 . + 1 index (.) writestring + { dup 100000000 mul + dup 10 mul 1 ge { + % Will need not greater than 0.1 due to a rounding below. + pop exit + } if + exch pop + 1 index (00000000) writestring + } loop + % Now it is not smaller than 1e-9, use simple digitizing. + { dup 10 mul + dup 10 mul 1 ge { + pop exit + } if + exch pop + 1 index (0) writestring + } loop + % Now 0.01 <= n < 0.1, but rounding may give 0.1 . + % Convert to integer with 7 digits precision : + 100000000 % precision factor 1e8 % f n r + dup 10 idiv 3 1 roll mul 0.5 add cvi % f r' N + 2 copy le { + % The rounding overflows, suppress it. + % Note it carries out an additional digit, + % that's why we needed <0.1 above. + pop pop (1) writestring + } { + % Didn't cary out, put 0. + 2 index (0) writestring + exch % f N r + % Continue the simple digitizing : + { 10 idiv dup % f N r' r' + 2 index exch idiv % f N r' d + (0123456789) exch 1 getinterval % f N r' (d) + 3 index exch writestring % f N r' + dup 3 2 roll exch mod % f r' N' + dup 0 eq { + % Don't write trailing zeros. + exit + } if + exch % f N' r' + } loop + pop pop pop + } ifelse +} bind def + +% Encode values to pass for the /pdfmark or /DSC pseudo-parameter. +/.pdf===dict mark + /arraytype + { dup xcheck { ({) (}) } { ([) (]) } ifelse + % Stack: file obj left right + 4 1 roll 2 index exch writestring () exch + { exch 2 index exch writestring + 1 index exch pdf===only ( ) + } + forall pop exch writestring + } bind + /packedarraytype 1 index + /dicttype + { 1 index (<<\n) writestring + { 2 index 3 -1 roll pdf===only 1 index ( ) writestring + 1 index exch pdf===only dup (\n) writestring + } + forall (>>) writestring + } bind + /nametype { + % If the name string includes any non-regular characters, + % write it with two preceding and one following null character(s). + % (Null characters in the name itself are not allowed.) + % This non-standard escape convention is required for passing names + % that include non-regular characters, because PostScript provides + % no way to do this. The pdf_scan_token procedure in the C code of + % the pdfwrite driver is currently the only place that recognizes + % this convention. + % Note that \004 may be self-delimiting in gs, but is not in standard PS. + dup .namestring (\000\004\011\012\014\015 %()/<>[]{}) .stringbreak //null ne { + dup .namestring (\000) .stringbreak //null ne { + 1 index <000000> writestring 1 index exch write===only 1 index exch 0 write 0 write + }{ + 1 index <0000> writestring 1 index exch write===only 0 write + }ifelse + } { + write===only + } ifelse + } bind + /realtype { + % Prevent using floating point format - see Bug 688167. + dup dup 0 lt { neg } if 0.01 lt { + dup 0 eq { + pop (0) writestring + } { + dup 0 lt { + 1 index (-) writestring neg + } if + .write_small_positive_real + } ifelse + } { + write===only + } ifelse + } bind +.dicttomark readonly def +/pdf===only { % <file> <obj> pdf===only - + .pdf===dict 1 index type .knownget { exec } { write===only } ifelse +} bind def +/.pdfcvbuf 30 string def % enough for most arguments +userdict /.pdfcvstring () put +/.pdfcvs { % <obj> .pdfcvs <string> + currentglobal exch //false .setglobal + /.pdfcvstring () store + % We can't handle long values yet. + { pop dup length 0 eq { pop } { + /.pdfcvstring .pdfcvstring 3 -1 roll concatstrings store + } ifelse //.pdfcvbuf + } /NullEncode filter dup 3 -1 roll pdf===only + closefile + .setglobal .pdfcvstring +} bind def + +% Redefine pdfmark to pass the data to the driver. +% We use a pseudo-parameter named /pdfmark whose value is an array: +% /key1 (value1) ... (CTM) /type +/.pdfputparams { % -mark- <key1> <value1> ... .pdfputparams <result...> + currentdevice //null //false counttomark 1 add 3 roll + % Don't allow the page device to get cleared.... + {.putdeviceparams} .currentpagedevice pop {.setpagedevice} 3 .execn +} bind def +% Convert relevant operands to strings in an array. +/.pdfcvsloop { % -mark- values ... markname start step .pdfcvsloop + % [values ... ctm markname] + matrix currentmatrix .pdfcvs 4 1 roll + counttomark 1 add 2 roll + counttomark .localvmarray astore exch pop + 3 1 roll + % Stack: values start step + 2 index length 3 sub { 2 copy 2 copy get .pdfcvs put pop } for +} bind def +/.pdfcvsall { % -mark- values ... markname .pdfcvsall <<same>> + 0 1 .pdfcvsloop +} bind def +/.pdfcvseven { % -mark- key value ... markname .pdfcvseven <<same>> + 1 2 .pdfcvsloop +} bind def +/.pdfcvsnone { % -mark- values ... markname .pdfcvsnone <<same>> + 100000 1 .pdfcvsloop +} bind def +/.pdfcvsfirst { % -mark- first values ... markname .pdfcvsfirst<<same>> + .pdfcvsnone + dup 0 2 copy get .pdfcvs put +} bind def +% The procedures in the following dictionary are called with the entire +% pdfmark operand list (including the pdfmark name) on the stack; +% they may modify this ad lib. They must call .pdfcvsxxx. +/.pdfmarkparams mark + % Unpack a dictionary for PUT, and don't convert stream data. + /PUT { + counttomark 3 eq { + 1 index type /dicttype eq { + pop { } forall /.PUTDICT .pdfcvsall + } { + pop dup type /filetype eq { + % Read the file into a sequence of strings. + % This isn't great, but it's simple. + { + dup 64000 string readstring not { exch exit } if + exch + } loop closefile + } if + /.PUTSTREAM .pdfcvsfirst + } ifelse + } { + .pdfcvsall + } ifelse + } bind + % Unpack the array for PUTINTERVAL. + /PUTINTERVAL { + pop aload pop /.PUTINTERVAL .pdfcvsall + } bind +.dicttomark readonly def +/.pdfparamerror { % ? ? ? -mark- ... <errname> <opname> .pdfparamerror - + counttomark 4 add 2 roll cleartomark pop pop pop + .systemvar exch signalerror +} bind def + +/.CountLeafs { + 0 exch + { + oforce dup type /dicttype eq { + /Limits knownoget { + dup type /arraytype eq { + 1 get 2 copy lt { + exch pop + }{ + pop + }ifelse + }{ + (invalid number tree, /Limits not an array\n) print + pop pop 0 exit + } ifelse + }{ + (invalid number tree, /Limits not defined in intermediate or leaf node\n) print + pop pop 0 exit + }ifelse + } { + (invalid number tree, /Kids entry not a dictionary\n) print + pop pop 0 exit + } ifelse + } forall +} bind def + +/.ExtractLeafs +{ + { + oforce dup /Nums knownoget { + exch pop + dup length 1 sub 0 2 3 -1 roll { + %% dict array index + dup %% dict array index index + 2 index exch get %% dict array index + 20 string cvs cvn %% dict array index name + exch 1 add %% dict array name index+1 + 2 index exch oget %% dict array name object + 3 index %% dict array name object dict + 3 1 roll %% dict array dict name object + put %% dict array + } for + pop %% array + }{ + /Kids knownoget { + .ExtractLeafs + } if + } ifelse + } forall +} bind def + +/.pdfpagelabels { + dup type /dicttype eq { + dup /Nums knownoget { + exch pop + mark exch + 0 1 2 index length 1 sub { + 1 index exch oget + exch + } for + pop + counttomark array astore + 1 dict dup begin exch /Nums exch def end + .pdfcvs + mark /pdfpagelabels 3 -1 roll .pdfputparams + dup type /booleantype ne { + /pdfpagelabels .pdfparamerror + } if cleartomark + }{ + /Kids knownoget { + dup .CountLeafs dup 1000 ge { + (PageLabel tree too complex, ignoring PageLabels\n) print flush + pop pop + }{ + dict exch .ExtractLeafs mark exch dup length 0 1 3 -1 roll { + dup 20 string cvs cvn %% mark dict index name + 2 index exch .knownget{ + %% mark ... dict index object + 3 -1 roll %% mark ... index object dict + }{ + pop + }ifelse + } for + pop + counttomark array astore + 1 dict dup begin exch /Nums exch def end + .pdfcvs + mark /pdfpagelabels 3 -1 roll .pdfputparams + dup type /booleantype ne { + /pdfpagelabels .pdfparamerror + } if cleartomark + }ifelse + }{ + (Invalid number tree in PageLabels, ignoring PageLabels\n) print flush + }ifelse + }ifelse + }{ + /pdfpagelabels .pdfparamerror + } ifelse +} bind def + +/pdfmark { % -mark- <key> <value> ... <markname> pdfmark - + counttomark 0 eq { + /pdfmark /stackunderflow signalerror + } if + dup type /nametype eq not { + /pdfmark /typecheck signalerror + } if + dup /SP eq { + % A hack for synchronizing the clipping path. + gsave + [1 0 0 1 0 0] setmatrix 0 setlinewidth + newpath -3 -3 moveto closepath stroke % Paints outside the device bbox. + grestore + } if + dup /PS eq systemdict /PDFX .knownget not { //false } if + systemdict /PDFA .knownget not { //false }{0 eq {//false}{//true} ifelse} ifelse or and { + % Execute it since PDF/X doesn't allow to embed it. + pop + { dup mark eq { + pop exit + } if + 1 index /DataSource eq { + exch pop + cvx exec + } { + pop pop + } ifelse + } loop + } { + counttomark 1 add copy + //.pdfmarkparams 1 index .knownget { exec } { .pdfcvsall } ifelse + mark /pdfmark 3 -1 roll .pdfputparams + dup type /booleantype ne { + /pdfmark .pdfparamerror + } if cleartomark + } ifelse +} odef +userdict /pdfmark .undef +currentdict /.pdfmarkparams .undef + +% <dict> .hook_DSC_Creator - +/.pdf_hook_DSC_Creator +{ + % If the Creator is PScript5.dll, disable the 32 /FontType resource for + % handling GlyphNames2Unicode. Since /FontType category can't redefine, + % we can do only with redefining the operator 'resourcestatus'. + systemdict /.pdf_hooked_DSC_Creator .knownget + { + {//false}{//true} ifelse + } + { + //true + } ifelse + + { + /WantsToUnicode /GetDeviceParam .special_op { + exch pop + }{ + //true + }ifelse + { + /Creator .knownget { + (PScript5.dll) search { + pop pop + systemdict /resourcestatus dup + { dup /FontType eq 2 index 32 eq and { + pop pop //false + } { + resourcestatus + } ifelse + } bind .makeoperator .forceput + systemdict /.pdf_hooked_DSC_Creator //true .forceput + } if + pop + } if + } { + pop + } ifelse + } + { + pop + } ifelse +} +bind def + +% Use the DSC processing hook to pass DSC comments to the driver. +% We use a pseudo-parameter named DSC whose value is an array: +% /key1 (value1) ... /type +/.pdfdsc_dict 2 dict def +/.pdfdsc { % <file> <DSC string> <dsc dict> [<prev proc>] .pdfdsc - + 0 get dup //null ne { 4 copy exch pop exec pop } { pop } ifelse 3 -1 roll pop + % Stack: <dsc string> <dsc dict> + 20 .localvmdict 1 index { 3 copy put pop pop } forall + 3 -1 roll .parse_dsc_comments % <dsc dict> <dict> <type> + 1 index //.pdf_hook_DSC_Creator exec + dup /NOP ne 2 index length 1 gt or { % Skip unparsed comments + PDFWRDEBUG { (**** DSC comment: ) print dup //== exec 1 index === flush } if + exch mark 4 1 roll { + % mark <key1> <value1> ... <dsc dict> <type> <key> <value> + 3 index 2 index known { % Skip the DSC_struct entry + pop pop + } { + .pdfcvs 4 -2 roll + } ifelse + } forall exch pop counttomark .localvmarray astore + mark /DSC 3 -1 roll .pdfputparams + dup type /booleantype ne { + /DSC .pdfparamerror + } { + cleartomark + } ifelse + } { + pop pop pop + } ifelse +} bind def +currentdict /.pdf_hook_DSC_Creator undef +/.initialize_dsc_parser where { + pop + 3000 % priority + { + currentglobal //true setglobal + 2 dict dup .initialize_dsc_parser readonly + currentuserparams /ProcessDSCComment get + 1 array astore % in case the value is executable + //.pdfdsc /exec load 4 array astore cvx readonly + << /ProcessDSCComment 3 -1 roll >> setuserparams + setglobal + } bind .schedule_init +} if + +% ---------------- {set,current}distillerparams ---------------- % + +% Define setdistillerparams / currentdistillerparams. +% Distiller parameters are currently treated as device parameters. +/.distillerparamkeys mark + % General parameters -- all distillers + /ASCII85EncodePages { } + /AutoRotatePages { } + /Binding { } + /CompressPages { } + /DefaultRenderingIntent { } + /DetectBlends { } + /DoThumbnails { } + /ImageMemory { } + /LockDistillerParams { } + /LZWEncodePages { } + /OPM { } + /PreserveHalftoneInfo { } + /PreserveOPIComments { } + /PreserveOverprintSettings { } + /TransferFunctionInfo { } + /UCRandBGInfo { } + /UseFlateCompression { } + % General parameters -- PDF writer + % StartPage and EndPage are renamed because EndPage + % clashes with a page device parameter. + /CoreDistVersion { } + /CompatibilityLevel { } + % ****** NOTE: StartPage and EndPage are disabled because + % ****** EndPage clashes with a page device parameter. +% /EndPage { exch pop /PDFEndPage exch } + /PDFEndPage { pop pop } +% /StartPage { exch pop /PDFStartPage exch } + /PDFStartPage { pop pop } + /Optimize { } + /ParseDSCCommentsForDocInfo { } + /ParseDSCComments { } + /EmitDSCWarnings { } + /CreateJobTicket { } + /PreserveEPSInfo { } + /AutoPositionEPSFiles { } + /PreserveCopyPage { } + /UsePrologue { } + /OffOptimizations { } + % PDF/X parameters + /PDFXTrimBoxToMediaBoxOffset { } + /PDFXSetBleedBoxToMediaBox { } + /PDFXBleedBoxToTrimBoxOffset { } + % Color sampled image parameters + /ColorACSImageDict { } + /AntiAliasColorImages { } + /AutoFilterColorImages { } + /ColorImageDepth { } + /ColorImageDict { } + /DownsampleColorImages { } + /ColorImageDownsampleThreshold { } + /ColorImageDownsampleType { } + /ColorImageAutoFilterStrategy { } + /EncodeColorImages { } + /ColorImageFilter { } + /ColorImageResolution { } + % Color processing parameters + /CalCMYKProfile { } + /CalGrayProfile { } + /CalRGBProfile { } + /sRGBProfile { } + /ColorConversionStrategy { } + /ConvertCMYKImagesToRGB { } + /ConvertImagesToIndexed { } + % Grayscale sampled image parameters + /GrayACSImageDict { } + /AntiAliasGrayImages { } + /AutoFilterGrayImages { } + /GrayImageDepth { } + /GrayImageDict { } + /DownsampleGrayImages { } + /GrayImageDownsampleThreshold { } + /GrayImageDownsampleType { } + /GrayImageAutoFilterStrategy { } + /EncodeGrayImages { } + /GrayImageFilter { } + /GrayImageResolution { } + % Monochrome sampled image parameters + /AntiAliasMonoImages { } + /MonoImageDepth { } + /MonoImageDict { } + /DownsampleMonoImages { } + /MonoImageDownsampleThreshold { } + /MonoImageDownsampleType { } + /EncodeMonoImages { } + /MonoImageFilter { } + /MonoImageResolution { } + % Font embedding parameters + /AlwaysEmbed + { dup length 0 gt + { dup 0 get type /booleantype eq } { //false } ifelse + { dup 0 get + { dup length 1 sub 1 exch getinterval + } + { dup length 1 sub 1 exch getinterval exch pop /~AlwaysEmbed exch + } ifelse + } + { exch pop /.AlwaysEmbed exch + } ifelse + } + /NeverEmbed + { dup length 0 gt + { dup 0 get type /booleantype eq } { //false } ifelse + { dup 0 get + { dup length 1 sub 1 exch getinterval + } + { dup length 1 sub 1 exch getinterval exch pop /~NeverEmbed exch + } ifelse + } + { exch pop /.NeverEmbed exch + } ifelse + } + /CannotEmbedFontPolicy { } + /EmbedAllFonts { } + /MaxSubsetPct { } + /SubsetFonts { } + /DSCEncodingToUnicode { } + /PSDocOptions { } + /PSPageOptions { } +.dicttomark readonly def +/.distillerdevice + { + % Check to see if the current device is a Distiller + % and return it if so. + /IsDistiller /GetDeviceParam .special_op { + exch pop + }{ + //false + }ifelse + { currentdevice } + { /pdfwrite finddevice } + ifelse + } bind def + +% Some badly designed PostScript files only expect the current/set +% distillerparams operators to exist in a distiller. Since we have +% this as a runtime option, we enable these operators IFF the +% currentdevice is pdfwrite. Also, we mask their existence in +% systemdict so that 'where' and 'known' don't show them unless +% the currentdevice is pdfwrite. +/.setdistillerparams { % <dict> setdistillerparams - + .distillerdevice //null //false mark 4 index { + //.distillerparamkeys 2 index .knownget { exec } { pop pop } ifelse + } forall .putdeviceparamsonly + dup type /booleantype ne { + /setdistillerparams .pdfparamerror + } { + pop pop pop + } ifelse +} odef +/.currentdistillerparams { % - currentdistillerparams <dict> + .distillerdevice //.distillerparamkeys .getdeviceparams .dicttomark + % Patch StartPage and EndPage + % ****** NOTE: StartPage and EndPage are disabled because + % ****** EndPage clashes with a page device parameter. +% begin /StartPage PDFStartPage /EndPage PDFEndPage +% currentdict dup /PDFStartPage undef /PDFEndPage undef +% def def currentdict end +} odef +/setdistillerparams { + % Check to see if the current device is a Distiller + /IsDistiller /GetDeviceParam .special_op { + exch pop not + }{ + //true + }ifelse + { + /setdistillerparams /undefined signalerror + } if + .setdistillerparams +} bind odef +/currentdistillerparams { + % Check to see if the current device is a Distiller + /IsDistiller /GetDeviceParam .special_op { + exch pop not + }{ + //true + }ifelse + { + /currentdistillerparams /undefined signalerror + } if + .currentdistillerparams +} bind odef + +% Patch 'where' so that the distiller operators are only visible +% if the pdfwrite device is the current one. +{ + % Check to see if the current device is a Distiller + /IsDistiller /GetDeviceParam .special_op { + exch pop + }{ + //false + }ifelse + { + .where + } { + .where pop dup //systemdict eq { pop //false } { //true } ifelse + } ifelse +} bind +{ /currentdistillerparams /setdistillerparams /pdfmark } +{ .wheredict exch 2 index put } forall pop + +% Patch 'known' to hide the systemdict version of distiller operators +% unless the currentdevice is pdfwrite. +/known { + /currentdistillerparams 1 index eq /setdistillerparams 2 index eq or + /pdfmark 2 index eq or { + systemdict 2 index eq { % only mask the operator in systemdict + known + % Check to see if the current device is a Distiller + /IsDistiller /GetDeviceParam .special_op { + exch pop not + }{ + //true + }ifelse + { pop false } if + } { + known + } ifelse + } { + known + } ifelse +} .bind odef + +% Create a table for translation DSC comments into Unicode UTF-16 +/.make_DSC_translation_table { % <encoding> .make_DSC_translation_table <array> + dup type /stringtype eq { + cvn + } if + dup type /nametype eq { + /Encoding findresource + } if + dup length array exch % [out] [in] + 0 1 2 index length 1 sub { % [out] [in] i + dup 2 index exch get % [out] [in] i n + dup dup //null eq exch /.notdef eq or { + pop -1 + } { + dup //AdobeGlyphList exch .knownget { % [out] [in] i n c + dup type dup /arraytype eq exch /packedarraytype eq or { + 0 get % fixme: using the 1st char + } if + exch pop % [out] [in] i c + } { % [out] [in] i n + (DSCEncoding defines a character that is not in AdobeGlyphList : ) + exch .namestring concatstrings = + /.make_DSC_translation_table cvx /undefined signalerror + } ifelse + } ifelse + 3 index % [out] [in] i c [out] + 3 1 roll put % [out] [in] + } for + pop % [out] +} bind def + +1000 % priority +{ + % Note, this may not work if the initial device is not pdfwrite + % and may require the use of -dProvideUnicode on the command line. + % Check to see if the current device wants ToUnicode info + /WantsToUnicode /GetDeviceParam .special_op { + exch pop + }{ + //false + }ifelse + systemdict /ProvideUnicode .knownget not { //false } if or + { + currentglobal true setglobal + systemdict /.setupUnicodeDecoder known { + /Unicode /Decoding resourcestatus { + pop pop + /Unicode /Decoding findresource + .setupUnicodeDecoder + } { + QUIET not { + (WARNING: /Unicode /Decoding resource is not accessible but it is useful for generating ToUnicode CMap.) = + } if + } ifelse + } if + setglobal + } if +} bind .schedule_init + +1010 % priority +{ + % Set a predefined configuration in the distiller device (pdfwrite) + /PDFSETTINGS where { + pop /PDFSETTINGS load + } { + % We use the presence of the OPDFRead key as a proxy for a pdfwrite-family device + /ForOPDFRead /GetDeviceParam .special_op { + % Get rid of the OPDFRead key + exch pop + % and then check the value to see if its pdfwrite or ps2write + { /PSL2Printer } { /default } ifelse + } { + /default + } ifelse + } ifelse + .distillersettings exch get + % Don't override parameters defined on the command line. + dup length .distillercommon length add dict begin + .distillercommon 2 { + { + systemdict 2 index known { pop pop } { def } ifelse + } forall + } repeat + % We use the presence of the OPDFRead key as a proxy for a pdfwrite-family device + /ForOPDFRead /GetDeviceParam .special_op { + % Get rid of the OPDFRead key + exch pop + % Then check to see if OPDFRead is true or not + not { + systemdict /PDFX known systemdict /PDFA known or { + /DSCEncoding where { + /DSCEncoding get .make_DSC_translation_table + /DSCEncodingToUnicode exch def + } if + } if + } if + } if + currentdict end .setdistillerparams + .distillerdevice //null //false mark .putdeviceparams + dup type /booleantype eq not { cleartomark pop } if pop pop +} bind .schedule_init + +2000 % priority +{ % Note, this may not work if the initial device is not pdfwrite + % We use the presence of the OPDFRead key as a proxy for a pdfwrite-family device + /ForOPDFRead /GetDeviceParam .special_op { + % Get rid of the OPDFRead key and value + pop pop + % Inform the device with initial graphic state. See gdev_pdf_fill_path. + newpath fill + } if +} bind .schedule_init + +.setlanguagelevel + +%END PDFWR |