For other information, see the Ghostscript overview.
High level devices are Ghostscript output devices which do not render to a raster, in general they produce 'vector' as opposed to bitmap output. Such devices currently include; pdfwrite, ps2write, eps2write, txtwrite, xpswrite, pxlmono and pxlcolor.
Although these devices produce output which is not a raster, they still work in the same general fashion as all Ghostscript devices. The input (PostScript, PDF, XPS, PCL or PXL) is handled by an appropriate interpreter, the intepreter processes the input and produces from it a sequence of drawing 'primitives' whcih are handed to the device. The device decides whether to handle the primitive itself, or call upon the graphics library to render the primitive to the final raster.
Primitives are quite low level graphics operations; as an example consider the PDF sequence '0 0 100 100 re f'. This contrstructs a rectangle with the bottom left corner at 0,0 whcih is 100 units wide by 100 units high, and fills it with the current color. A lower level implementation using only primitives would first move the current point to 0,0, then construct a line to 0,100, then a line to 100,100, a line to 100, 0 and finally a line back to 0,0. It would then fill the result.
Obviously that's a simple example but it serves to demonstrate the point.
Now the raster devices all call the graphcs library to process primitives (though they may choose to take some action first) and render the result to a bitmap. The high level devices instead reassemble the primitives back into high level page description and write the result to a file. This means that the output, while it should be visually the same as the input (because it makes the same marks), is not the same as the original input, even if the output Page Description Language is the same as the input one was (eg PDF to PDF).
Why is ths important ? Firstly because the description of the page won't be the same, if your worflow relies upon (for example) finding rectangles in the description then it might not work after it has been processed by a high level device, as the rectangles may all have turned into lengthy path descriptions.
In addition, any part of the original input which does not actually make marks on the page (such as hyperlinks, bookmarks, comments etc) will normally not be present in the output, even if the output is the same format. In general the PDF interpreter and the PDF output device (pdfwrite) try to preserve the non-marking information from the input, but some kinds of content are not carrried across, in particular comments are not preserved.
We often hear from users thet they are 'splitting' PDF files, or 'modifying' them, or converting them to PDF/A, and its important to realise that this is not what's happening. Instead a new PDF file is being created, which should look the same as the original, but the actual insides of the PDF file are not the same as the original. Ths may not be a problem, but if its important to keep the original contents, then you need to use a different tool (we'd suggest MuPDF, also available from Artifex). Of course, if the intention is to produce a modified PDF file (for example, reducing the resolution of images, or changing the colour space), then clearly you cannot keep the original contents unchanged, and pdfwrite performs these tasks well.
The pxlmono and pxlcolor devices output HP PCL-XL, a graphic language understood by many recent laser printers.
-dCompressMode=1 | 2 | 3
(default is 1)- Set the compression algorithm used for bitmap graphics. RLE=1, JPEG=2, DeltaRow=3. When JPEG=2 is on, it is applied only to full-color images; indexed-color graphics and masks continues to be compressed with RLE.
The txtwrite device will output the text contained in the original document as Unicode.
-dTextFormat=0 | 1 | 2 | 3
(default is 3)- Format 0 is intended for use by developers and outputs XML-escaped Unicode along with information regarding the format of the text (position, font name, point size, etc). The XML output is the same format as the MuPDF output, but no additional processing is performed on the content, so no block detection.
- Format 1 uses the same XML output format, but attempts similar processing to MuPDF, and will output blocks of text. Note the alogrithm used is not the same as the MuPDF code, and so the results will not be identical.
- Format 2 outputs Unicode (UCS2) text (with a Byte Order Mark) which approximates the layout of the text in the original document.
- Format 3 is the same as format 2, but the text is encoded in UTF-8.
The xpswrite device writes its output according to the Microsoft XML Paper Specification. This specification was later amended to the Open XML Paper specification, submitted to ECMA International and adopted as ECMA-388.
This device currently has no special configuration parameters.
The PDF and PostScript (including Encapsulated PostScript, or EPS) devices have much of their code in common, and so many of the controlling parameters are also common amongst the devices. The pdfwrite, ps2write and eps2write devices createPDF or PostScript files whose visual appearance should match, as closely as possible, the appearance of the original input (PS, PDF, XPS, PCL, PXL). There are a number of caveats as mentioned in the overview above. In adition the general comments there are some additional points that bear mentioning;
PCL has a graphcs model which differs significantly from the PostScript or PDF one, in particular it has a form of transparency called RasterOps, some aspects of which cannot be represented in PDF at a high level (or at all, in PostScript). The pdfwrite device makes no attempt to handle thse, and the resulting PDF file will not match the original input. The only way to deal with these types of file is to render the whole page to a bitmap and then 'wrap' the bitmap as a PDF file. Currently we do not do this either, but it is possible that a future enhancement may do so.
If the input contains PDF-compatible transparency, but the ps2weite device is selected, or the pdfwrite device is selected, but has been told to limit the PDF feature set to a version less than 1.4, the transparency cannot be preserved. In this case the entire page is rendered to a bitmap and that bitmap is 'wrapped up' in appropriate PDF or PostScript content. The output should be visually the same as the input, but since it has been rendered it will not scale up or down well, unlike the original, vector, content of the input.
The options in the command line may include any switches that may be used with the language interpreter appropriate for the input (see here for a complete list). In addition the following options are common to all the pdfwrite family of devices, and should work when specified on the comand line with any of the language interpreters.
-r
resolution
-dUNROLLFORMS
-dNoOutputFonts
-dCompressFonts=
boolean
pdfwrite
will compress embedded fonts in
the output. The default value is true
; the
false
setting is intended only for debugging as it will result in larger output.
-dCompressStreams=
boolean
pdfwrite
will compress streams other than those in fonts or pages in
the output. The default value is true
; the
false
setting is intended only for debugging as it will result in larger output.
Options may also include
-d
parameter=value or
-s
parameter=string switches for setting
"distiller parameters", Adobe's documented parameters for controlling the
conversion of PostScript into PDFprocess. The PostScript setdistillerparams
and
currentdistillerparams
operators are also recognized when
the input is PostScriptps2pdf
, and provide an equivalent way to set these
parameters from within a PostScript input file.
Although the name implies that these parameters are for controlling PDF output, in fact the whole family of devices use these same parameters to control the conversion into PostScript and EPS as well.
The pdfwrite family of devices recognize all of the Acrobat Distiller 5 parameters defined in the DistillerParameters (version 5) document available from the Adobe web site. Cells in the table below containing '=' mean that the value of the parameter is the same as in the "default" column.
Parameter name Notes default screen ebook printer prepress
AlwaysEmbed
(13) [ ] = = = = AntiAliasColorImages
(0) false = = = = AntiAliasGrayImages
(0) false = = = = AntiAliasMonoImages
(0) false = = = = ASCII85EncodePages
false = = = = AutoFilterColorImages
(1) true = = = = AutoFilterGrayImages
(1) true = = = = AutoPositionEPSFiles
(0) true = = = = AutoRotatePages
/PageByPage /PageByPage /All /None /None Binding
(0) /Left = = = = CalCMYKProfile
(0) () = = = = CalGrayProfile
(0) () = = = = CalRGBProfile
(0) () = = = = CannotEmbedFontPolicy
(0) /Warning /Warning /Warning /Warning /Error ColorACSImageDict
(13) (note 7) (note 10) (note 10) (note 8) (note 9) ColorConversionStrategy
(0,6) LeaveColorUnchanged RGB RGB UseDeviceIndependentColor LeaveColorUnchanged ColorImageDepth
-1 = = = = ColorImageDict
(13) (note 7) = = = = ColorImageFilter
/DCTEncode = = = = ColorImageDownsampleThreshold
1.5 = = = = ColorImageDownsampleType
(3) /Subsample /Average /Average /Average /Bicubic ColorImageResolution
72 72 150 300 300 CompatibilityLevel
1.4 1.3 1.4 1.4 1.4 CompressPages
(14) true = = = = ConvertCMYKImagesToRGB
false = = = = ConvertImagesToIndexed
(0) false = = = = CoreDistVersion
4000 = = = = CreateJobTicket
(0) false false false true true DefaultRenderingIntent
/Default = = = = DetectBlends
(0) true = = = = DoThumbnails
(0) false false false false true DownsampleColorImages
false true true false false DownsampleGrayImages
false true true false false DownsampleMonoImages
false true true false false EmbedAllFonts
true false true true true EmitDSCWarnings
(0) false = = = = EncodeColorImages
true = = = = EncodeGrayImages
true = = = = EncodeMonoImages
true = = = = EndPage
(0) -1 = = = = GrayACSImageDict
(13) (note 7) (note 7) (note 10) (note 8) (note 9) GrayImageDepth
-1 = = = = GrayImageDict
(13) (note 7) = = = = GrayImageDownsampleThreshold
1.5 = = = = GrayImageDownsampleType
(3) /Subsample /Average /Bicubic /Bicubic /Bicubic GrayImageFilter
/DCTEncode = = = = GrayImageResolution
72 72 150 300 300 ImageMemory
(0) 524288 = = = = LockDistillerParams
false = = = = LZWEncodePages
(2) false = = = = MaxSubsetPct
100 = = = = MonoImageDepth
-1 = = = = MonoImageDict
(13) <<K -1>> = = = = MonoImageDownsampleThreshold
1.5 = = = = MonoImageDownsampleType
/Subsample /Subsample /Subsample /Subsample /Subsample MonoImageFilter
/CCITTFaxEncode = = = = MonoImageResolution
300 300 300 1200 1200 NeverEmbed
(13) (note 11)(note 12) (note 11)(note 12) (note 11)(note 12) [ ](note 12) [ ](note 12) OffOptimizations
0 = = = = OPM
1 = = = = Optimize
(0,5) false true true true true ParseDSCComments
true = = = = ParseDSCCommentsForDocInfo
true = = = = PreserveCopyPage
(0) true = = = = PreserveEPSInfo
(0) true = = = = PreserveHalftoneInfo
false = = = = PreserveOPIComments
(0) false false false true true PreserveOverprintSettings
false false false true true sRGBProfile
(0) () = = = = StartPage
(0) 1 = = = = SubsetFonts
true = = = = TransferFunctionInfo
(4) /Preserve = = = = UCRandBGInfo
/Remove /Remove /Remove /Preserve /Preserve UseFlateCompression
(2) true = = = = UsePrologue
(0) false = = = =
(note 0) This parameter can be set and queried, but currently has no effect.
(note 1)
-dAutoFilterxxxImages=false
works since Ghostscript version 7.30.
Older versions of Ghostscript don't examine the image to
decide between JPEG and LZW or Flate compression: they always use
Flate compression.
(note 2)
Because of Unisys's threats regarding the Welch patent,
ps2pdf
does not actually use LZW compression: instead, it
treats all requests for LZW compression as calling for Flate compression.
Concomitantly, UseFlateCompression is treated as always on, and
the value of this parameter is ignored as with note 0. Now that the patent
has expired, we could change this should it become worthwhile.
(note 3)
The xxxDownsampleType
parameters can also have the value
/Bicubic (a Distiller 4 feature), ths will use a Mitchell filter. (older
versions of pdfwrite simpy used Average instead). Note; if a non-integer
downsample factor is used the code will clamp to the nearest integer (if
the difference is less than 0.1) or will silently switch to the old bicubic
filter, NOT the Mitchell filter.
(note 4) The default for transfer functions is to preserve them, this is because transfer functions are a device-dependent feature, a set of transfer functions desgined for an RGB device will give incorrect output on a CMYK device for instance. The pdfwrite device does now support /Preserve, /Appy and /Remove (the previous documentation was incorrect, application of transfer functions was not supported). PDF 2.0 deprecates the use of transfer functions, and so when producing PDF 2.0 compatible output if the TransferFunctionInfor is set to /Preserve it will be silently replaced with /Apply. You can instead specifically set TransferFunctionInfo to /Remove when producing PDF 2.0 in order to avoid the transfer function being applied.
(note 6)
Ghostscript specifics : The value UseDeviceIndependentColor
requires the device parameter UseCIEColor
to be set to
true
.
The value UseDeviceIndependentColorForImages
works same as
UseDeviceIndependentColor
.
The value CMYK
works with any CompatibilityLevel
and
requires the device parameter ProcessColorModel
to be set
to DeviceCMYK
.
The value sRGB
requires the device parameter
ProcessColorModel
to be set to DeviceRGB
,
and actually converts to RGB with the default Ghostscript conversion.
The new Ghostscript-specific value Gray
requires the device
parameter ProcessColorModel
to be set to
DeviceGray
, and converts all colors to DeviceGray.
The old Ghostscript-specific value UseDeviceDependentColor
is now depricated. It is automaticly replaced with sRGB
,
CMYK
, or Gray
.
With the new color conversion code active it is no longer neccesary to
set ProcessColorModel
when selecting Gray
, RGB
or CMYK
. It is also no
longer neccesary to set UseCIEColor
for UseDeviceIndependentColor
to
work properly, and the use of UseCIEColor
is now strongly discouraged. sRGB
is not supported, use RGB
instead.
(note 7) The default image parameter dictionary is
<< /QFactor 0.9 /Blend 1 /HSamples [2 1 1 2] /VSamples [2 1 1 2] >>
(note 8) The printer ACS image parameter dictionary is
<< /QFactor 0.4 /Blend 1 /ColorTransform 1 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >>
(note 9) The prepress ACS image parameter dictionary is
<< /QFactor 0.15 /Blend 1 /ColorTransform 1 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >>
(note 10) The screen and ebook ACS image parameter dictionary is
<< /QFactor 0.76 /Blend 1 /ColorTransform 1 /HSamples [2 1 1 2] /VSamples [2 1 1 2] >>
(note 11) The default, screen, and ebook settings never embed the 14 standard fonts (Courier, Helvetica, and Times families, Symbol, and ZapfDingbats). This behavior is intentional but can be overrided by:
<< /NeverEmbed [ ] >> setdistillerparams
(note 12)
NeverEmbed
can include CID font names.
If a CID font is substituted in lib/cidfmap
,
the substitute font name is used when the CID font is embedded,
and the original CID font name is used when it is not embedded.
NeverEmbed
should always specify the original CID font
name.
(note 13)
The arrays AlwaysEmbed
and NeverEmbed
and
image parameter dictionaries ColorACSImageDict
,
ColorACSImageDict
, ColorImageDict
,
GrayACSImageDict
, GrayImageDict
,
MonoImageDict
cannot be specified on the ps2pdf command line.
To specify these, you must use PostScript, either by including it in the PostScript source
or by passing the -c
command-line parameter to ghostscript as described in Limitations below.
For example, including the PostScript string in your file in.ps:
<</AlwaysEmbed [/Helvetica /Times-Roman]>> setdistillerparamsis equivalent to invoking:
gs -dBATCH -dSAFER -DNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=out.pdf -c
'.setpdfwrite <</AlwaysEmbed [/Helvetica /Times-Roman]>> setdistillerparams' -f
in.ps
or using ps2pdf
with the extra parameters in a file:
ps2pdf @params.in out.pdf
where the file params.in contains:
-c '<</AlwaysEmbed [/Helvetica /Times-Roman]>> setdistillerparams' -f
in.ps
(note 14)
The default value of CompressPages is false
for ps2write and eps2write.
As of the 9.11 pre-release, the color management in the pdfwrite family has been substantially altered so that it now uses the same Color Management System as rendering (the default is LCMS2). This considerably improves the color handling in both pdfwrite and ps2write, particularly in the areas of Separation and DeviceN color spaces, and Indexed color spaces with images. Despite lengthy careful testing it is possible that there will be bugs in this initial implementation and so the following switch is available.
-dPDFUseOldCMS=
boolean
The ColorConversionStrategy
switch can now be set to LeaveColorUnchanged
, Gray
, RGB
, CMYK
or
UseDeviceIndependentColor
. Note that, particularly for ps2write, LeaveColorUnchanged
may still need to convert
colors into a different space (ICCbased colors cannot be represented in PostScript for example). ColorConversionStrategy
can be specified either as; a string
by using the -s
switch (-sColorConversionStrategy=RGB
) or as a name using the -d
switch (-dColorConversionStrategy=/RGB
).
ps2write cannot currently convert into device-independent color spaces, and so UseDeviceIndependentColor
should not be used with ps2write (oe eps2write).
All other color spaces are converted approproately. Separation and DeviceN spaces will be preserved if possible (ps2write cannot preserve DeviceN)
and if the alternate space is not appropriate a new alternate space will be created. Eg a [/Separation (MyColor) /DeviceRGB {...}]
when the ColorConversionStrategy
is set to CMYK
would be converted to [/Separation (MyColor) /DeviceCMYK {...}]
The new tint transform would be created by sampling the original tint transform, converting the RGB values into CMYK, and then creating
a function to linearly interpolate between those values.
By default Ghostscript determines viewing page orientation based on the dominant text orientation on the page. Sometimes, when the page has text in several orientations or has no text at all, wrong orientation can be selected.
Acrobat Distiller parameter AutoRotatePages
controls the
automatic orientation selection algorithm. On Ghostscript, besides
input stream, Distiller parameters can be given as command line arguments.
For instance: -dAutoRotatePages=/None
or
/All
or /PageByPage
.
When there is no text on the page or automatic page rotation is set to
/None
an orientation value from setpagedevice is used.
Valid values are: 0
(portrait),
3
(landscape), 2
(upside down),
and 1
(seascape). The orientation can be set from the
command line as -c "<</Orientation 3>> setpagedevice"
using Ghostscript directly but cannot be set in ps2pdf
.
See Limitations below.
Ghostscript passes the orientation values from DSC comments to the
pdfwrite
driver, and these are compared with the
auto-rotate heuristic. If they are different then the DSC value will be used preferentially.
If the heuristic is to be preferred over the DSC comments then comment parsing
can be disabled by setting -dParseDSCComments=false
.
-dPDFSETTINGS=
configuration
/screen
selects low-resolution output similar to the
Acrobat Distiller (up to version X) "Screen Optimized" setting.
/ebook
selects medium-resolution output similar to the
Acrobat Distiller (up to version X) "eBook" setting.
/printer
selects output similar to the Acrobat Distiller
"Print Optimized" (up to version X) setting.
/prepress
selects output similar to Acrobat Distiller
"Prepress Optimized" (up to version X) setting.
/default
selects output intended to be useful across a
wide variety of uses, possibly at the expense of a larger output file.
NB Adobe has recently changed the names of the presets it uses in Adobe Acrobat Distiller, in order to avoid confusion with earlier versions we do not plan to change the names of the PDFSETTINGS parameters. The precise value for each control is listed in the table above.
/prepress
setting does not indicate
the highest quality conversion. Using any of these presets will involve altering the
input, and as such may result in a PDF of poorer quality (compared to the input) than
simply using the defaults. The 'best' quality (where best means closest to the original
input) is obtained by not setting this parameter at all (or by using /default
).
Many of the controls used for distiller pararameters can be used on the command line with the -d or -s
switches, and these will work correctly with PCL or PXL input. However, some controls (eg /NeverEmbed) do
not take simple numeric or string arguments, and these cannot be set from the command line. When
the input is PostScript or PDF we can use the -c and -f switches to send PostScript through
the interpreter to control these parameters, but clearly this is not possible when the intepreter
does not understand PostScript. In addition some features are controlled using the PostScript
pdfmark
operator and again that clearly is not possible unless we are using a PostScript
interpreter to read the input.
To overcome this new, GhostPCL-specific, PJL parameters have been added. These parameters are defined
as PDFMARK
and SETDISTILLERPARAMS
. In order to reduce confusion when using
PostScript and PCL as inputs these PJL parameters take essentially the same PostScript constructs as
the corresponding PostScript operators pdfmark
and setdistillerparams
. However
it is important to realise that these are not processed by a full PostScript interpreter, and
there are syntactic rules which must be followed carefully when using these parameters.
You cannot use arbitrary PostScript operators, only boolean, number, name, string, array and dictionary
objects are supported (but see PUTFILE
later). All tokens must be separated by white space, so
while this [/Test(string)]
is perfectly valid in PostScript, you must instead write it
as [ /Test (string) ]
for PJL parsing. All PDFMARK
and SETDISTILLERPARAMS
must be set as
DEFAULT, the values must be on a single line, and delimited by "".
pdfmarks sometimes require the insertion of file objects (especially for producton of PDF/A files) so
we must find some way to handle these, ths is done (for the pdfmark csae only) by defining a special
(non-standard) pdfmark name PUTFILE
, this simply takes the preceding string, and uses
it as a fully qualified path to a file. Any further pdfmark operations can then use the named object
holding the file to access it.
The easiest way to use these parameters is to create a 'settings' file, put all the commands in it, and then put it on the command line immediately before the real input file. For example:
./gpcl6 -sDEVICE=pdfwrite -dPDFA=1 -dCompressPages=false -dCompressFonts=false -sOutputFile=./out.pdf ./pdfa.pjl ./input.pcl
Where pdfa.pjl contains the PJL commands to create a PDF/A-1b file (see example below).
For readability the line has been bisected, when used for real this must be a single line. The 'ESC' represents a single byte, value 0x1B an escape character in ASCII.
ESC%-12345X
@PJL DEFAULT PDFMARK = "
[ /_objdef {icc_PDFA} /type /stream /OBJ pdfmark
[ {icc_PDFA} << /N 3 >> /PUT pdfmark
[ {icc_PDFA} (/ghostpdl/iccprofiles/default_rgb.icc) /PUTFILE pdfmark
[ /_objdef {OutputIntent_PDFA} /type /dict /OBJ pdfmark
[ {OutputIntent_PDFA} << /S /GTS_PDFA1 /Type /OutputIntent /DestOutputProfile {icc_PDFA} /OutputConditionIdentifier (sRGB) >> /PUT pdfmark
[ {Catalog} << /OutputIntents [{OutputIntent_PDFA}] >> /PUT pdfmark
[ /Author (Ken) /Creator (also Ken) /Title (PDF/A-1b) /DOCINFO pdfmark
"
ESC%-12345X
@PJL DEFAULT SETDISTILLERPARAMS = "<< /ColorImageDict << /QFactor 0.7 /Blend 1 /HSamples [ 2 1 1 2 ] /VSamples [ 2 1 1 2 ] >> >>"
-dMaxInlineImageSize=
integer
ps2pdf
will create an XObject instead of embedding
the image into the context stream.
The default value is 4000
.
Note that redundant inline images must be embedded each time they occur in the
document, while multiple references can be made to a single XObject image. Therefore
it may be advantageous to set a small or zero value if the source document is expected
to contain multiple identical images, reducing the size of the generated PDF.
-dDoNumCopies
-dDetectDuplicateImages
-dFastWebView
-dPreserveAnnots=
boolean
The following options are useful for creating PDF 1.2 files:
-dPatternImagemask=boolean
CompatibilityLevel < 1.3
it specifies whether
the target viewer handles ImageMask
with a pattern color.
Some old viewers, such as Ghostscript 3.30 fail with such constructs.
Seting this option to false, one can get more compatibility,
but the mask interpolation is lost.
With CompatibilityLevel ≥ 1.3
this option is ignored.
Default value is false
.
-dMaxClipPathSize=integer
CompatibilityLevel < 1.3
and
PatternImagemask=false
,
and only when converting a mask into a clipping path.
If the clipping path exceeds the specified size,
the masked image and the clipping path is decomposed into smaller images.
The value of the option counts straight path segments
(curved segments are not used for representing a mask).
Default value is 12000
.
-dMaxShadingBitmapSize=integer
ProcessColorModel
or ColorConverionStrategy
, assumes 8 bits per sample,
and doesn't consider image compression or downsampling. The image is rendered at the current resolution
as specified by -r
or the default of 720 dpi.
Default value is 256000
.
In general larger values will result in higher quality,
but the output file size may increase dramatically, particularly with shadings which cover large areas.
Shadings hsould generally only be rendered to images if CompatibilityLevel
is 1.2 or less
or if ColorCoversionStrategy
specifies a color space differnt to that of the shading.
-dHaveTrueTypes=boolean
CompatibilityLevel < 1.3
it specifies
whether the target viewer can handle TrueType fonts.
If not, TrueType fonts are converted into raster fonts
with resolution specified in HWResolution
. Note that large text at higher resolutions
results in very large bitmaps which are likely to defeat caching in many printers. As a result the
text is emitted as simple images rather than as a (type 3) bitmap font. The PostScript user parameter
MaxFontItem can be used to increase the maximum size of a cache entry which will increase the size/resolution
of the text which can be stored in a font.
With CompatibilityLevel ≥ 1.3
this option is ignored. Default value is true
.
The following options are useful for creating PDF 1.3 files:
-dHaveTransparency=boolean
CompatibilityLevel ≥ 1.4
it specifies
whether the target viewer can handle PDF 1.4 transparency objects.
If not, transparency objects are converted into plain images.
Default value is true
.
-dPDFX=
boolean
DefaultRGB
ColorSpace
resource
must be defined, and options NOSUBSTDEVICECOLORS
,
NOCIE
must not be specified.
Default value is false
.
The pdfwrite device does not currently support PDF/X versions other than 3.
When generating a PDF/X-3 document, Ghostscript performs the following special actions to satisfy the PDF/X-3 standard :
DeviceRGB
color space is substituted with
the DefaultRGB
color space,
which must be defined in the ColorSpace
category.
The easiest way is to provide it in the DefaultRGB
file in the resource directory.
DeviceRGB
color values are passed unchanged.
If a user needs an non trivial color adjustment, a non trivial
DefaultRGB
color space must be defined.
/PS pdfmark
interprets the DataSource
stream or file.
TrimBox
and BleedBox
entries
are generated in page descriptions.
Their values can be changed using the
PDFXTrimBoxToMediaBoxOffset
,
PDFXSetBleedBoxToMediaBox
, and
PDFXBleedBoxToTrimBoxOffset
distiller parameters (see below).
-sOwnerPassword=
string
-sUserPassword=
string
-dPermissions=
number
-dEncryptionR=
number
-dKeyLength=
number
-dEncryptionR
must be 3.
-sDocumentUUID=
string
Note that Adobe XMP specification requires DocumentID must be same for all versions of a document. Since Ghostscript does not provide a maintenance of document versions, users are responsible to provide a correct UUID through this parameter.
Note that Ghostscript has no assess to the host node ID due to a minimization of platform dependent modules. Therefore it uses an MD5 hash of the document contents for generating UUIDs.
-sInstanceUUID=
string
Note that Adobe XMP specification requires instance ID must be inique for all versions of document. This parameter may be used to disable an unique ID generation for a debug purpose.
When none of DocumentUUID
and InstanceUUID
are specified,
the generated DocumentID appears same as instance ID.
-sDocumentTimeSeq=
integer
DocumentUUID
and InstanceUUID
are specified, DocumentTimeSeq
is ignored.
-sDSCEncoding=
string
Metadata
.
If not specified, the comments are copied to Metadata
with no conversion. Note that Adobe Distiller for
Windows uses the default locale's code page
for this translation, so it's result may differ from Ghostscript.
Adobe Acrobat appears to use PDFDocEncoding
when
displaying document's properties,
so we recommend this value.
The ps2write
device handles the same set of distiller
parameters as
are handled by the pdfwrite
device (and 2 unique extensions, see below).
The option -dMaxInlineImageSize=
integer
must not be used with ps2write
as all images are inline in PostScript.
There are also two additional (not Adobe-standard) Distiller parameters, specific to ps2write:
/PSDocOptions
string
/PSPageOptions
array of strings
Note: exeuting setpagedevice will reset distiller parameters to the default, if you use any of these options via setdistillerparams, and expect to execute setpagedevice, you should set /LockDistillerParams true. Ordinarily the PDF interpreter executes setpagedevice for every page in order to set the media size.
NB the strings contained in PSDocOptions, and the PSPageOptions array, are written verbatim to the output. No error checking is (or can be) performed on these strings and it is the users responsibility to ensure they contain well formed PostScript which does not cause errors on the target device.
There are also the following ps2write specific options :
-dProduceDSC=
boolean
ProduceDSC
is false.
-dCompressEntireFile=
boolean
LZWEncode
and ASCII85Encode
filters will be applied to the entire output file.
In this case CompressPages
should be false to prevent a dual compression.
When this parameter is false, these filters will be applied to the initial procset only,
if CompressPages
is true.
Default value is false
.
Note: It is not possible to set CompressEntireFile
when ProduceDSC
is true as a single compressed object cannot conform to the DSC. It is possible to set CompressPages
which will also compress the ps2write ProcSet.
A few options can be used to influence the behavior of a printer or
PostScript interpreter that reads the result of ps2ps2. All of these options
are incompatible with DSC-compliant PostScript, in order to use any of them
ProduceDSC
must be set to false.
-dRotatePages=
boolean.
-dSetPageSize=true
.
-dFitPages=
boolean.
HaveTrueTypes
;
See Options about the PageSize
entry of the Policies
dictionary while the conversion step).
Default value : false.
Must be false if -dSetPageSize=true
or -dCenterPages=true
.
-dCenterPages=
boolean.
-dRotatePages=true
, which may rotate the image on the media if it fits better, and then center it.
Default value : false.
Must be false if -dSetPageSize=true
or -dFitPages=true
.
-dSetPageSize=
boolean.
-dRotatePages=true
, -dCenterPages=true
or -dFitPages=true
.
-dDoNumCopies=
boolean.
These correspond to keys in the Postscript userdict
of the target printer's virtual memory to control its behavior while
executing a job generated with ps2write
.
These keys can be set when executing using the ps2write device, this 'fixes' the resulting behaviour according to which key has been set. If these keys are not defined during conversion, the resulting PostScript will not attempt any form of media selection. In this case the behaviour can then be modified by setting the keys, either by modifying the resulting PostScript or setting the values in some other manner on the target device.
See also the distiller params PSDocOptions and PSPageOptions mentioned above.
The eps2write device is the same as the ps2write device, except that it produces Encapsulated PostScript, which is intended
to be imported into another document and treated as a 'black box'. There are certain restrictions which EPS
files must follow, the primary one being tht they must be DSC conformant. This means that you must not set -dProduceDSC
to false.
In addition EPS files may only contain a single page and may not contain device-specific PostScript. You should therefore not
use the PSDocOptions
or PSPageOptions
or any of the switches noted in the ps2write section
above under Controlling device specific behaviour
To create a PDF/X-3 document from a Postscript or a PDF file, you should :
pdfwrite
device or use the ps2pdf
script.
-dPDFX
option. It provides the document conformity
and forces -dCompatibilityLevel=1.3
.
-sColorConversionStrategy=Gray
, -sColorConversionStrategy=CMYK
or -sColorConversionStrategy=UseDeviceIndependentColor
(RGB
is not allowed).
If you plan to create a device-independent color PDF file then you should set the ProcessColorModel
using -sProcessColorModel=DeviceGray
or -sProcessColorModel=DeviceCMYK
.
gs/lib/PDFX_def.ps
.
DefaultRGB
resource file in the ColorSpace resource category.
Either define it in the PDF/X definition file, or provide
a definition of gs/Resource/ColorSpace/DefaultRGB
.
gs/Resource/ColorSpace/DefaultRGB
is usually
distributed with Ghostscript, its content may not necessarily satisfy your needs, see below.
-sOutputICCProfile
, an ICC profile which represents the color
space (either CMYK or Gray) of the final file. This is the same ICC profile used in the
PDF/X definition file as the ICCProfile. Even if you are using a standard OutputCondition and
do not need to specify an ICCProfile, you must still set OutputICCProfile with an appropriate
ICC profile in order for proper color conversion.
As mentioned above, the PDF/X definition file provides special information,
which the PDF/X-3 standard requires. You can find a sample file in
gs/lib/PDFX_def.ps
, and edit it according to your needs.
The file follows Postscript syntax and uses the operator pdfmark
to pass the special information. To ease customisation
the lines likely to need editing in the sample file are marked with the comment % Customize
.
They are explained below.
OutputCondition
string
OutputCondition
value for the output intent dictionary.
OutputConditionIdentifier
string
OutputConditionIdentifier
value for the output intent dictionary.
ICCProfile
string
OutputConditionIdentifier
specifies a registed identifier of characterized printing condition
(see http://www.color.org/IPA_2003-11_PDFX.pdf).
Defines a file name of an ICC profile file to be included into the output document.
You may specify either an absolute file name, or a relative
path from the working directory.
Title
string
Info
string
Info
value for the output intent dictionary.
Ghostscript distribution does not contain an ICC profile to be used for creating a PDF/X-3 document. Users should either create an appropriate one themselves, or use one from a public domain, or create one with the PDF/X-3 inspector freeware.
The PDF/X-3 standard requires a TrimBox
entry
to be written for all page descriptions.
This is an array of four offsets
that specify how the page is to be trimmed
after it has been printed.
It is set to the same as MediaBox
by default
unless the PDFXTrimBoxToMediaBoxOffset
distiller parameter is present.
It accepts offsets to the MediaBox
as an array
[left right top bottom],
e.g., the PostScript input code
<< /PDFXTrimBoxToMediaBoxOffset
[10 20 30 40] >> setdistillerparams
specifies that 10 points will be trimmed at the left,
20 points at the right,
30 points at the top,
and 40 points at the bottom.
Another page entry is the BleedBox
.
It gives the area of the page
to which actual output items may extend;
cut marks, color bars etc.
must be positioned in the area between the BleedBox
and the MediaBox
.
The TrimBox
is always contained within the
BleedBox
.
By default,
the PDFXSetBleedBoxToMediaBox
distiller parameter
is true
,
and the BleedBox
is set to the same values
as the MediaBox
.
If it is set to false
,
the PDFXBleedBoxToTrimBoxOffset
parameter gives offset to the TrimBox
.
It accepts a four-value array in the same format as the
PDFXTrimBoxToMediaBoxOffset
parameter.
Here is a sample command line to invoke Ghostscript for generating a PDF/X-3 document :
gs -dPDFX -dBATCH -dNOPAUSE -sColorConverionStrategy=CMYK -sDEVICE=pdfwrite -sOutputFile=out-x3.pdf PDFX_def.ps input.ps
Please also see the PDFACompatibilityPolicy
control described under "Creating a PDF/A document" below. The same control is now used to specify the desired behaviour when an input file cannot be converted 'as is' into a PDF/X file.
To create a PDF/A document, please follow the instructions for creating a PDF/X-3 document, with the following exceptions :
pdfwrite
device or use the ps2pdf
script.
-dPDFA
option to specify PDF/A-1, -dPDFA=2
for PDF/A-2 or -dPDFA=3
for PDF/A-3
-sColorConversionStrategy=RGB
, -sColorConversionStrategy=CMYK
or -sColorConversionStrategy=UseDeviceIndependentColor
.
If you plan to create a device-independent color PDF file then you should set the ProcessColorModel
using -sProcessColorModel=DeviceRGB
or -sProcessColorModel=DeviceCMYK
.
gs/lib/PDFA_def.ps
.
You will need to modify the content of this file; in particular you must alter the
/ICCProfile so that it points to a valid ICC profile for your OutputIntent. The
string '(...)' defining the ICCProfile must be a fully qualified device and path
specification appropriate for your Operating System.
PDFACompatibilityPolicy
integer
0 - (default) Include the feature or operation in the output file, the file will not be PDF/A compliant. Because the document Catalog is emitted before this is encountered, the file will still contain PDF/A metadata but will not be compliant. A warning will be emitted in this case.
1 - The feature or operation is ignored, the resulting PDF file will be PDF/A compliant. A warning wil be emitted for every elided feature.
2 - Processing of the file is aborted with an error, the exact error may vary depending on the nature of the PDF/A incompatibility.
gs -dPDFA=1 -dBATCH -dNOPAUSE -sColorConversionStrategy=RGB -sDEVICE=pdfwrite -sOutputFile=out-a.pdf PDFA_def.ps input.ps
To assist with creating a PostScript file suitable for conversion to PDF, ghostscript includes ghostpdf.ppd, a PostScript Printer Description (PPD) file. This allows some distiller parameters to be set when a PostScript file is generated.
To install a "Ghostscript PDF" printer on Windows XP, select the Windows Control Panel, Printers and Faxes, Add a Printer, Local Printer, Use port FILE: (Print to File), Have Disk..., select the directory containg ghostpdf.ppd and ghostpdf.inf, select "Ghostscript PDF", Replace existing driver (if asked), and answer the remaining questions appropriately. After installing, open the "Ghostscript PDF" properties, select the Device Settings tab, set "Mimimum Font Size to Download as Outline" to 0 pixels.
To set distiller parameters, select the "Ghostscript PDF" Printing Preferences, then the Advanced button. The PDF settings are under "Printer Features".
In order to better support the ZugFERD electronic invoice standard (http://www.ferd-net.de/front_content.php?idcat=231&changelang=4) and potentially other standards in the future, a new non-standard pdfmark has been defined for use by pdfwrite.
This pdfmark allows additional Metadata to be defined which will be inserted into the Metadata generated by the pdfwrite device. This is necesary because the standard requires a PDF/A-3 file be produced, with an extension schema (and some additional XML data) contained within the Metadata referenced from the Catalog object.
While it would be possible to use the existing Metadata pdfmark to write a completely new set of metadata into the Catalog, creating a conformant set of XML, with all the information synchronised with the /Info dictionary would be challenging, this pdfmark allows the pdfwrite device to generate all the normal information leaving the user with only the task of specifying the additional data.
[ /XML (string continaing additional XMP data) /Ext_Metadata pdfmark
The pdfwrite family
will sometimes convert input constructs to
lower-level ones, even if a higher-level construct is available. For
example, if the PostScript file uses charpath
to set a
clipping path consisting of text, ps2pdf
may write the
clipping path as a path in the PDF file, rather than as text, even though
PDF is able to express clipping with text. This is only a performance
issue, and will be improved incrementally over time.
Some applications, such as HIGZ, produce PostScript files that use
ridiculously large coordinates. On such files, pdfwrite
may
cause a limitcheck
error. If this occurs, try reducing the
default internal resolution of 720 dpi by using the -r
switch, e.g., ps2pdf -r300 somefile.ps
.
pdfwrite
ignores the PDF 1.3 (Acrobat 4.x) pdfmarks related to
document content structure: StRoleMap
,
StClassMap
, StPNE
,
StBookmarkRoot
, StPush
,
StPop
, StPopAll
, StBMC
,
StBDC
, EMC
, StOBJ
,
StAttr
, StStore
, StRetrieve
,
NamespacePush
, NamespacePop
, and
NI
. While this causes some structural information to be
omitted from the output file, the displayed and printed output are normally
not affected.
Copyright © 2000-2006 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 that license. 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.
Ghostscript version 9.22, 4 October 2017