home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 April / PCWorld_2001-04_cd.bin / Software / Vyzkuste / gs / gs650w32.exe / gs6.50 / lib / gs_pdfwr.ps < prev    next >
Text File  |  2000-12-05  |  14KB  |  451 lines

  1. %    Copyright (C) 1996, 2000 Aladdin Enterprises.  All rights reserved.
  2. % This file is part of AFPL Ghostscript.
  3. % AFPL Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author or
  4. % distributor accepts any responsibility for the consequences of using it, or
  5. % for whether it serves any particular purpose or works at all, unless he or
  6. % she says so in writing.  Refer to the Aladdin Free Public License (the
  7. % "License") for full details.
  8. % Every copy of AFPL Ghostscript must include a copy of the License, normally
  9. % in a plain ASCII text file named PUBLIC.  The License grants you the right
  10. % to copy, modify and redistribute AFPL Ghostscript, but only under certain
  11. % conditions described in the License.  Among other things, the License
  12. % requires that the copyright notice and this notice be preserved on all
  13. % copies.
  14.  
  15. % $Id: gs_pdfwr.ps,v 1.6 2000/09/19 18:29:11 lpd Exp $
  16. % PDF writer additions to systemdict.
  17.  
  18. % This file should be included iff the pdfwrite "device" is included
  19. % in the executable.
  20.  
  21. % ---------------- Predefined configurations ---------------- %
  22.  
  23. % These correspond to the 3 predefined settings in Acrobat Distiller 4,
  24. % plus a "default" setting.
  25.  
  26. % Parameters common to all configurations.
  27. % Note that we don't set AlwaysEmbed or NeverEmbed, since the default values
  28. % depend on the CompatibilityLevel and are initialized internally.
  29. /.defaultImageDict mark
  30.   /QFactor 0.9 /Blend 1
  31.   /HSamples [2 1 1 2] /VSamples [2 1 1 2]
  32. .dicttomark readonly def
  33. /.distillercommon mark
  34.   /ASCII85EncodePages false
  35.   /AntiAliasColorImages false
  36.   /AntiAliasGrayImages false
  37.   /AntiAliasMonoImages false
  38.   /AutoFilterColorImages true
  39.   /AutoFilterGrayImages true
  40.   /AutoFilterMonoImages true
  41.   /AutoPositionEPSFiles true
  42.   /Binding /Left
  43.     % What to do about the CalxxxProfiles?
  44.   /ColorACSImageDict .defaultImageDict
  45.   /ColorImageDepth -1
  46.   /ColorImageDict .defaultImageDict
  47.   /ColorImageDownsampleThreshold 1.5
  48.   /ColorImageFilter /DCTEncode
  49.   /CompressPages true
  50.   /ConvertImagesToIndexed true
  51.   /DefaultRenderingIntent /Default
  52.   /DetectBlends true
  53.   /DownsampleColorImages true
  54.   /DownsampleGrayImages true
  55.   /DownsampleMonoImages true
  56.   /EmitDSCWarnings false
  57.   /EncodeColorImages true
  58.   /EncodeGrayImages true
  59.   /EncodeMonoImages true
  60.   /EndPage -1
  61.   /GrayACSImageDict .defaultImageDict
  62.   /GrayImageDepth -1
  63.   /GrayImageDict .defaultImageDict
  64.   /GrayImageDownsampleThreshold 1.5
  65.   /GrayImageFilter /DCTEncode
  66.   /ImageMemory 500000
  67.   /LockDistillerParams false
  68.   /MaxSubsetPct 100
  69.   /MonoImageDepth -1
  70.   /MonoImageDict mark
  71.     /K -1
  72.   .dicttomark readonly
  73.   /MonoImageDownsampleThreshold 1.5
  74.   /MonoImageFilter /CCITTFaxEncode
  75.   /OPM 1
  76.   /Optimize true
  77.   /ParseDSCComments true
  78.   /PreserveCopyPage true
  79.   /PreserveEPSInfo true
  80.   /PreserveHalftoneInfo false
  81.   /StartPage 1
  82.   /SubsetFonts true
  83.   /TransferFunctionInfo /Preserve
  84.   /UseFlateCompression true
  85.   /UsePrologue false
  86. .dicttomark readonly def
  87.  
  88. /.distillersettings mark
  89.  
  90. /default mark
  91.   /AutoRotatePages /PageByPage
  92.   /CannotEmbedFontPolicy /Warning
  93.   /DownsampleColorImages false
  94.   /DownsampleGrayImages false
  95.   /DownsampleMonoImages false
  96.   /Optimize false
  97. .dicttomark readonly
  98.  
  99. /screen mark
  100.   /AutoRotatePages /PageByPage
  101.   /CannotEmbedFontPolicy /Warning
  102.   /ColorConversionStrategy /sRGB
  103.   /ColorImageDownsampleType /Average
  104.   /ColorImageResolution 72
  105.   /CompatibilityLevel 1.2
  106.   /CreateJobTicket false
  107.   /DoThumbnails false
  108.   /DownsampleColorImages true
  109.   /DownsampleGrayImages true
  110.   /DownsampleMonoImages true
  111.   /EmbedAllFonts false
  112.   /GrayImageDownsampleType /Average
  113.   /GrayImageResolution 72
  114.   /MonoImageDownsampleType /Average
  115.   /MonoImageResolution 300
  116.   /ParseDSCCommentsForDocInfo false
  117.   /PreserveOPIComments false
  118.   /PreserveOverprintSettings false
  119.   /UCRandBGInfo /Remove
  120. .dicttomark readonly
  121.  
  122. /.printerACSImageDict mark
  123.   /QFactor 0.55 /Blend 1
  124.   /HSamples [2 1 1 2] /VSamples [2 1 1 2]
  125. .dicttomark readonly def
  126. /printer mark
  127.   /AutoRotatePages /None
  128.   /CannotEmbedFontPolicy /Warning
  129.   /ColorACSImageDict .printerACSImageDict
  130.   /ColorConversionStrategy /UseDeviceIndependentColor
  131.   /ColorImageDownsampleType /Bicubic
  132.   /ColorImageResolution 300
  133.   /CompatibilityLevel 1.3
  134.   /CreateJobTicket true
  135.   /DoThumbnails false
  136.   /EmbedAllFonts true
  137.   /GrayACSImageDict .printerACSImageDict
  138.   /GrayImageDownsampleType /Bicubic
  139.   /GrayImageResolution 300
  140.   /MonoImageDownsampleType /Bicubic
  141.   /MonoImageResolution 1200
  142.   /ParseDSCCommentsForDocInfo true
  143.   /PreserveOPIComments true
  144.   /PreserveOverprintSettings true
  145.   /UCRandBGInfo /Preserve
  146. .dicttomark readonly
  147.  
  148. /.prepressACSImageDict mark
  149.   /QFactor 0.25
  150.   /HSamples [1 1 1 1] /VSamples [1 1 1 1]
  151. .dicttomark readonly def
  152. /prepress mark
  153.   /AutoRotatePages /None
  154.   /CannotEmbedFontPolicy /Error
  155.   /ColorACSImageDict .prepressACSImageDict
  156.   /ColorConversionStrategy /LeaveColorUnchanged
  157.   /ColorImageDownsampleType /Bicubic
  158.   /ColorImageResolution 300
  159.   /CompatibilityLevel 1.3
  160.   /CreateJobTicket true
  161.   /DoThumbnails true
  162.   /EmbedAllFonts true
  163.   /GrayACSImageDict .prepressACSImageDict
  164.   /GrayImageDownsampleType /Bicubic
  165.   /GrayImageResolution 300
  166.   /MonoImageDownsampleType /Bicubic
  167.   /MonoImageResolution 1200
  168.   /ParseDSCCommentsForDocInfo true
  169.   /PreserveOPIComments true
  170.   /PreserveOverprintSettings true
  171.   /UCRandBGInfo /Preserve
  172. .dicttomark readonly
  173.  
  174. .dicttomark readonly def
  175.  
  176. % ---------------- End of predefined configurations ---------------- %
  177.  
  178. % Set optimizations for converting PostScript to PDF.
  179. % The ps2pdf* scripts invoke this.
  180. /.setpdfwrite {        % - .setpdfwrite -
  181.         % Set a large VM threshold to reduce garbage collection.
  182.   currentuserparams /VMThreshold get 3000000 .max setvmthreshold
  183.         % Install a level of 'save' to reduce font loading.
  184.   save pop
  185. } bind def
  186.  
  187. % Redefine pdfmark to pass the data to the driver.
  188. % We use a pseudo-parameter named /pdfmark whose value is an array:
  189. %    key1 value1 ... CTM /type
  190. /.pdf===dict mark
  191.   /arraytype
  192.    { dup xcheck { ({) (}) } { ([) (]) } ifelse
  193.         % Stack: file obj left right
  194.       4 1 roll 2 index exch writestring () exch
  195.        { exch 2 index exch writestring
  196.      1 index exch pdfmark===only ( )
  197.        }
  198.       forall pop exch writestring
  199.    } bind
  200.   /packedarraytype 1 index
  201.   /dicttype
  202.    { 1 index (<<\n) writestring
  203.       { 2 index 3 -1 roll pdfmark===only 1 index ( ) writestring
  204.     1 index exch pdfmark===only dup (\n) writestring
  205.       }
  206.      forall (>>) writestring
  207.    } bind
  208. .dicttomark readonly def
  209. /pdfmark===only {    % <file> <obj> pdfmark===only -
  210.   .pdf===dict 1 index type .knownget { exec } { write===only } ifelse
  211. } bind def
  212. /.pdfcvbuf 10 string def    % enough for most arguments
  213. userdict /.pdfcvstring () put
  214. /.pdfcvs {        % <obj> .pdfcvs <string>
  215.   currentglobal exch false .setglobal
  216.   /.pdfcvstring () store
  217.         % We can't handle long values yet.
  218.   { pop dup length 0 eq { pop } {
  219.       /.pdfcvstring .pdfcvstring 3 -1 roll concatstrings store
  220.     } ifelse //.pdfcvbuf
  221.   } /NullEncode filter dup 3 -1 roll pdfmark===only
  222.   closefile
  223.   .setglobal .pdfcvstring
  224. } bind def
  225. /.pdfputparams {    % -mark- <key1> <value1> ... .pdfputparams <result...>
  226.   currentdevice null false counttomark 1 add 3 roll
  227.         % Don't allow the page device to get cleared....
  228.   {.putdeviceparams} .currentpagedevice pop {.setpagedevice} 3 .execn
  229. } bind def
  230. % Convert relevant operands to strings in an array.
  231. /.pdfcvsloop {        % -mark- values ... markname start step .pdfcvsloop
  232.             %   [values ... ctm markname]
  233.    matrix currentmatrix .pdfcvs 4 1 roll
  234.    counttomark 1 add 2 roll ] 3 1 roll
  235.             % Stack: values start step
  236.    2 index length 3 sub { 2 copy 2 copy get .pdfcvs put pop } for
  237. } bind def
  238. /.pdfcvsall {        % -mark- values ... markname .pdfcvsall <<same>>
  239.   0 1 .pdfcvsloop
  240. } bind def
  241. /.pdfcvseven {        % -mark- key value ... markname .pdfcvseven <<same>>
  242.   1 2 .pdfcvsloop
  243. } bind def
  244. /.pdfcvsnone {        % -mark- values ... markname .pdfcvsnone <<same>>
  245.   100000 1 .pdfcvsloop
  246. } bind def
  247. /.pdfcvsfirst {        % -mark- first values ... markname .pdfcvsfirst<<same>>
  248.   .pdfcvsnone
  249.   dup 0 2 copy get .pdfcvs put
  250. } bind def
  251. % The procedures in the following dictionary are called with the entire
  252. % pdfmark operand list (including the pdfmark name) on the stack;
  253. % they may modify this ad lib.  They must call .pdfcvsxxx.
  254. /.pdfmarkparams mark
  255.     % Unpack a dictionary for PUT, and don't convert stream data.
  256.   /PUT {
  257.     counttomark 3 eq {
  258.       1 index type /dicttype eq {
  259.     pop { } forall /.PUTDICT .pdfcvsall
  260.       } {
  261.     pop dup type /filetype eq {
  262.         % Read the file into a sequence of strings.
  263.         % This isn't great, but it's simple.
  264.       {
  265.         dup 1000 string readstring not { exch exit } if
  266.         exch
  267.       } loop closefile
  268.     } if
  269.     /.PUTSTREAM .pdfcvsfirst
  270.       } ifelse
  271.     } {
  272.       .pdfcvsall
  273.     } ifelse
  274.   } bind
  275.     % Unpack the array for PUTINTERVAL.
  276.   /PUTINTERVAL {
  277.     pop aload pop /.PUTINTERVAL .pdfcvsall
  278.   } bind
  279. .dicttomark readonly def
  280. /.pdfparamerror {    % ? ? ? -mark- ... <errname> <opname> .pdfparamerror -
  281.     counttomark 4 add 2 roll cleartomark pop pop pop
  282.     .systemvar exch signalerror
  283. } bind def
  284. /pdfmark {        % -mark- <key> <value> ... <markname> pdfmark -
  285.   counttomark 1 add copy
  286.   //.pdfmarkparams 1 index .knownget { exec } { .pdfcvsall } ifelse
  287.   mark /pdfmark 3 -1 roll .pdfputparams
  288.   dup type /booleantype ne {
  289.     /pdfmark .pdfparamerror
  290.   } if cleartomark
  291. } odef
  292. userdict /pdfmark .undef
  293. currentdict /.pdfmarkparams .undef
  294.  
  295. % Define setdistillerparams / currentdistillerparams.
  296. % Distiller parameters are currently treated as device parameters.
  297. /.distillerparamkeys mark
  298.         % General parameters -- all distillers
  299.   /ASCII85EncodePages { }
  300.   /AutoRotatePages { }
  301.   /Binding { }
  302.   /CompressPages { }
  303.   /DefaultRenderingIntent { }
  304.   /DetectBlends { }
  305.   /DoThumbnails { }
  306.   /ImageMemory { }
  307.   /LockDistillerParams { }
  308.   /LZWEncodePages { }
  309.   /OPM { }
  310.   /PreserveHalftoneInfo { }
  311.   /PreserveOPIComments { }
  312.   /PreserveOverprintSettings { }
  313.   /TransferFunctionInfo { }
  314.   /UCRandBGInfo { }
  315.   /UseFlateCompression { }
  316.         % General parameters -- PDF writer
  317.         % StartPage and EndPage are renamed because EndPage
  318.         % clashes with a page device parameter.
  319.   /CoreDistVersion { }
  320.   /CompatibilityLevel { }
  321.         % ****** NOTE: StartPage and EndPage are disabled because
  322.         % ****** EndPage clashes with a page device parameter.
  323. %  /EndPage { exch pop /PDFEndPage exch }
  324.     /PDFEndPage { pop pop }
  325. %  /StartPage { exch pop /PDFStartPage exch }
  326.     /PDFStartPage { pop pop }
  327.   /Optimize { }
  328.   /ParseDSCCommentsForDocInfo { }
  329.   /ParseDSCComments { }
  330.   /EmitDSCWarnings { }
  331.   /CreateJobTicket { }
  332.   /PreserveEPSInfo { }
  333.   /AutoPositionEPSFiles { }
  334.   /PreserveCopyPage { }
  335.   /UsePrologue { }
  336.         % Color sampled image parameters
  337.   /ColorACSImageDict { }
  338.   /AntiAliasColorImages { }
  339.   /AutoFilterColorImages { }
  340.   /ColorImageDepth { }
  341.   /ColorImageDict { }
  342.   /DownsampleColorImages { }
  343.   /ColorImageDownsampleThreshold { }
  344.   /ColorImageDownsampleType { }
  345.   /EncodeColorImages { }
  346.   /ColorImageFilter { }
  347.   /ColorImageResolution { }
  348.         % Color processing parameters
  349.   /CalCMYKProfile { }
  350.   /CalGrayProfile { }
  351.   /CalRGBProfile { }
  352.   /sRGBProfile { }
  353.   /ColorConversionStrategy { }
  354.   /ConvertCMYKImagesToRGB { }
  355.   /ConvertImagesToIndexed { }
  356.         % Grayscale sampled image parameters
  357.   /GrayACSImageDict { }
  358.   /AntiAliasGrayImages { }
  359.   /AutoFilterGrayImages { }
  360.   /GrayImageDepth { }
  361.   /GrayImageDict { }
  362.   /DownsampleGrayImages { }
  363.   /GrayImageDownsampleThreshold { }
  364.   /GrayImageDownsampleType { }
  365.   /EncodeGrayImages { }
  366.   /GrayImageFilter { }
  367.   /GrayImageResolution { }
  368.         % Monochrome sampled image parameters
  369.   /AntiAliasMonoImages { }
  370.   /MonoImageDepth { }
  371.   /MonoImageDict { }
  372.   /DownsampleMonoImages { }
  373.   /MonoImageDownsampleThreshold { }
  374.   /MonoImageDownsampleType { }
  375.   /EncodeMonoImages { }
  376.   /MonoImageFilter { }
  377.   /MonoImageResolution { }
  378.         % Font embedding parameters
  379.   /AlwaysEmbed
  380.    { dup length 0 gt
  381.       { dup 0 get false eq
  382.          { dup length 1 sub 1 exch getinterval exch pop /~AlwaysEmbed exch
  383.          } if
  384.       } if
  385.    }
  386.   /NeverEmbed
  387.    { dup length 0 gt
  388.       { dup 0 get false eq
  389.          { dup length 1 sub 1 exch getinterval exch pop /~NeverEmbed exch
  390.          } if
  391.       } if
  392.    }
  393.   /CannotEmbedFontPolicy { }
  394.   /EmbedAllFonts { }
  395.   /MaxSubsetPct { }
  396.   /SubsetFonts { }
  397. .dicttomark readonly def
  398. /.distillerdevice
  399.  { currentdevice .devicename /pdfwrite eq
  400.     { currentdevice }
  401.     { /pdfwrite finddevice }
  402.    ifelse
  403.  } bind def
  404. /setdistillerparams {        % <dict> setdistillerparams -
  405.   .distillerdevice null false mark 4 index {
  406.     //.distillerparamkeys 2 index .knownget { exec } { pop pop } ifelse
  407.   } forall .putdeviceparams
  408.   dup type /booleantype ne {
  409.     /setdistillerparams .pdfparamerror
  410.   } {
  411.     pop pop pop
  412.   } ifelse
  413. } odef
  414. /currentdistillerparams {    % - currentdistillerparams <dict>
  415.   .distillerdevice //.distillerparamkeys .getdeviceparams .dicttomark
  416.         % Patch StartPage and EndPage
  417.         % ****** NOTE: StartPage and EndPage are disabled because
  418.         % ****** EndPage clashes with a page device parameter.
  419. %  begin /StartPage PDFStartPage /EndPage PDFEndPage
  420. %  currentdict dup /PDFStartPage undef /PDFEndPage undef
  421. %  def def currentdict end
  422. } odef
  423.  
  424. % Patch 'where' so that the distillerparams operators are only visible
  425. % if the pdfwrite device is the current one, for the benefit of badly
  426. % designed PostScript files that "know" they have to do something different
  427. % if a distiller is processing them.
  428. .wheredict /currentdistillerparams {
  429.   currentdevice .devicename /pdfwrite eq {
  430.     .where
  431.   } {
  432.     .where pop dup //systemdict eq { pop false } { true } ifelse
  433.   } ifelse
  434. } bind put
  435. .wheredict /setdistillerparams .wheredict /currentdistillerparams get put
  436.  
  437. % Set a predefined configuration if PDFSETTINGS is defined.
  438. /PDFSETTINGS where { pop /PDFSETTINGS load } { /default } ifelse
  439. .distillersettings exch get
  440. % Don't override parameters defined on the command line.
  441. dup length .distillercommon length add dict begin
  442. .distillercommon 2 {
  443.   {
  444.     systemdict 2 index known { pop pop } { def } ifelse
  445.   } forall
  446. } repeat
  447. currentdict end setdistillerparams
  448.