summaryrefslogtreecommitdiff
blob: 7dfadce2b06f574ba90499f037df144c428ba7c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
%!
% This is a sample prefix file for creating a PDF/X-3 document.
% Users should modify entries marked with "Customize".
% This assumes an ICC profile resides in the file (ISO Coated sb.icc)
% in the current directory unless the user modifies the corresponding line below.

% First up, attempt to ensure the user has set ColorConversionStrategy correctly.
% PDF/X-3 only permits Gray or CMYK in the output.
%
systemdict /ColorConversionStrategy known {
  systemdict /ColorConversionStrategy get cvn dup /Gray ne exch /CMYK ne and
} {
  (\nERROR: ColorConversionStrategy not set.)=
  true
} ifelse
{ (ERROR: ColorConversionStrategy must be /DeviceGray or /DeviceCMYK.)=
  /ColorConversionStrategy cvx /rangecheck signalerror
} if


% Define entries in the document Info dictionary :
%
[ /GTS_PDFXVersion (PDF/X-3:2002) % Must be so (the standard requires).
  /Title (Title)                  % Customize.
  /Trapped /False                 % Must be so (Ghostscript doesn't provide other).
/DOCINFO pdfmark


/ICCProfile (ISO Coated sb.icc) def  % Customize or remove.

% Define an ICC profile in the output, if the user specified one.
%
currentdict /ICCProfile known {
  [/_objdef {icc_PDFX} /type /stream /OBJ pdfmark

% This code attempts to set the /N (number of components) key for the ICC colour space.
% To do this it checks the ColorConversionStrategy or the device ProcessColorModel if
% ColorConversionStrategy is not set.
% This is not 100% reliable. A better solution is for the user to edit this and replace
% the code between the ---8<--- lines with a simple declaration like:
%   /N 3
% where the value of N is the number of components from the profile defined in /ICCProfile above.
% Note, if you don't set ColorConversionStrategy, the output will likely be invalid anyway.
  [{icc_PDFX} <<
% ----------8<--------------8<-------------8<--------------8<----------
  systemdict /ColorConversionStrategy known {
    systemdict /ColorConversionStrategy get cvn dup /Gray eq {
      pop /N 1 false
    }{
      dup /RGB eq {
        (RGB is not a valid ColorConversionStrategy for PDF/X output)=
        /ColorConversionStrategycvx /rangecheck signalerror
      }{
        /CMYK eq {
          /N 4 false
        }{
          (ColorConversionStrategy not a device space, falling back to ProcessColorModel, output may not be valid PDF/X.)=
          true
        } ifelse
      } ifelse
    } ifelse
  } {
    (ColorConversionStrategy not set, falling back to ProcessColorModel, output may not be valid PDF/X.)=
    true
  } ifelse

  {
    currentpagedevice /ProcessColorModel get
    dup /DeviceGray eq {
      pop /N 1
    }{
      dup /DeviceRGB eq {
        (RGB is not a valid ProcessColorModel for PDF/X output)=
        /ColorConversionStrategycvx /rangecheck signalerror
      }{
        dup /DeviceCMYK eq {
          pop /N 4
        } {
          (ProcessColorModel not a device space.)=
          /ProcessColorModel cvx /rangecheck signalerror
        } ifelse
      } ifelse
    } ifelse
  } if
% ----------8<--------------8<-------------8<--------------8<----------
  >> /PUT pdfmark
  [{icc_PDFX} ICCProfile (r) file /PUT pdfmark
} if

% Define the output intent dictionary :

[/_objdef {OutputIntent_PDFX} /type /dict /OBJ pdfmark
[{OutputIntent_PDFX} <<
  /Type /OutputIntent              % Must be so (the standard requires).
  /S /GTS_PDFX                     % Must be so (the standard requires).
  /OutputCondition (Commercial and specialty printing) % Customize
  /Info (none)                     % Customize
  /OutputConditionIdentifier (CGATS TR001)      % Customize
  /RegistryName (http://www.color.org)   % Must be so (the standard requires).
  currentdict /ICCProfile known {
    /DestOutputProfile {icc_PDFX}  % Must be so (see above).
  } if
>> /PUT pdfmark
[{Catalog} <</OutputIntents [ {OutputIntent_PDFX} ]>> /PUT pdfmark