Запрос Ghostscript для параметров/настроек по умолчанию для устройства вывода (например, "pdfwrite" или "tiffg4" )

В этот ответ на "Параметры командной строки GhostScript для преобразования EPS в PDF" ; заявлено, что разрешение по умолчанию для устройства pdfwrite Ghostscript - это 720x720, которое я изначально нашел невероятным!

Можно ли указать параметры по умолчанию для устройства Ghostscript?

Ответ 1

Так как Ghostscript - полнотекстовый интерпретатор PostScript, вы также можете отправлять ему фрагменты PostScript, которые не вызывают рисования элементов страницы, но запрашивают его для своего внутреннего состояния.

Если вы хотите узнать, какие настройки по умолчанию для Диска есть, когда вы попросите его через gs some.pdf просто отобразить PDF на экране, вы можете попробовать следующее:

gs \
   -c "currentpagedevice {exch ==only ( ) print == } forall"

В Windows это будет:

gswin32c.exe ^
   -c "currentpagedevice {exch ==only ( ) print == } forall"

Результатом является список пар /SomeName somevalue, которые описывают параметры, используемые для отображения страниц на текущий экран.

Это так, потому что обычно дисплей является устройством по умолчанию для Ghostscript для отправки своего вывода. Теперь вы можете заметить, что вы увидите пустое окно Ghostscript, которое вам нужно закрыть... А как насчет добавления некоторых опций, чтобы избежать всплывающего окна?

gs \
   -o /dev/null \
   -dNODISPLAY \
   -c "currentpagedevice {exch ==only ( ) print == } forall"

Или, в Windows:

gswin32c.exe ^
   -o nul ^
   -dNODISPLAY ^
   -c "currentpagedevice {exch ==only ( ) print == } forall"

Но это изменит возвращаемые значения запроса, поскольку вы (непреднамеренно) изменили настройки выходного устройства:

gs -c "currentpagedevice {exch ==only ( ) print == } forall" | grep Resolution

Результат:

HWResolution [86.5426483 86.5426483]
/.MarginsHWResolution [1152.0 1152.0]

Сравните это с

gs \
   -o /dev/null \
   -dNODISPLAY \
   -c "currentpagedevice {exch ==only ( ) print == } forall" \
| grep Resolution

Результат:

/HWResolution [72.0 72.0]
/.MarginsHWResolution [72.0 72.0]

Итак, пожалуйста, избегайте этой ловушки. Я успешно попал в него несколько лет назад и даже не замечал этого довольно долгое время...

Теперь, предполагая, что вы хотите запросить настройки по умолчанию для устройства записи PDF, выполните следующее:

gs \
  -o /dev/null \
  -sDEVICE=pdfwrite \
  -c "currentpagedevice {exch ==only ( ) print == } forall" \
| tee ghostscript-pdfwrite-default-pagedevice-settings.txt

Теперь у вас есть все настройки для устройства pdfwrite в файле *.txt. и вы можете повторить это с некоторыми другими интересными устройствами Ghostscript, а затем сравнить их для всех своих подробных различий:

for _dev in \
  pswrite ps2write pdfwrite \
  tiffg3 tiffg4 tiff12nc tiff24nc tiff32nc tiff48nc tiffsep \
  jpeg jpeggray jpegcmyk \
  png16 png16m png256 png48 pngalpha pnggray pngmono; \
do \
  gs \
    -o /dev/null \
    -sDEVICE=${_dev} \
    -c "currentpagedevice {exch ==only ( ) print == } forall" \
   | sort \
   | tee ghostscript-${_dev}-default-pagedevice-settings.txt; \
done

Довольно интересно сравнить настройки, например, для устройств pswrite и ps2write, подобных этому (а также найти параметры, которые доступны для одного, но не для другого устройства):

sdiff -sbB ghostscript-ps*write-default-pagedevice-settings.txt

Update:

Как вы можете себе представить, это отличный способ сравнить разные версии Ghostscript и определить, как настройки по умолчанию могут быть изменены для разных устройств в последних выпусках. Это особенно интересно, если вы хотите узнать обо всех недавно реализованных цветовых профилях и поддержке ICC, которые теперь присутствуют в Ghostscript.

Кроме того, чтобы избежать возврата только -dict- для определенных значений ключа, используйте макрос === вместо ==. === действует как ==, но также печатает содержимое словарей.

Итак, вот пример вывода для устройства pdfwrite. Помните, что устройство Ghostscript pdfwrite предназначено для обеспечения в основном тех же функций, что и Adobe Acrobat Distiller (с дополнительной функцией, в которой он принимает не только PostScript в качестве входных, но и PDF файлов, поэтому вы можете сортировать существующие файлы PDF с возможностью повторного использования, чтобы ремонтировать, улучшать или иным образом манипулировать ими). Поэтому Ghostscript pdfdevice выполняет большую часть оператора setdistillerparams, который также поддерживает оригинальный Distiller:

gs \
  -o /dev/null \
  -sDEVICE=pdfwrite \
  -c "currentpagedevice {exch ==only ( ) print === } forall" \
| sort

/%MediaDestination 0
/%MediaSource 0
/.AlwaysEmbed []
/.HWMargins [0.0 0.0 0.0 0.0]
/.IgnoreNumCopies false
/.LockSafetyParams false
/.MarginsHWResolution [720.0 720.0]
/.MediaSize [612.0 792.0]
/.NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats]
/ASCII85EncodePages false
/AllowIncrementalCFF false
/AllowPSRepeatFunctions false
/AlwaysEmbed []
/AntiAliasColorImages false          [*]
/AntiAliasGrayImages false           [*]
/AntiAliasMonoImages false           [*]
/AutoFilterColorImages true
/AutoFilterGrayImages true
/AutoPositionEPSFiles true
/AutoRotatePages /PageByPage
/BeginPage {--.callbeginpage--}
/Binding /Left                       [*]
/BitsPerPixel 24
/BlueValues 256
/CalCMYKProfile (None)               [*]
/CalGrayProfile (None)               [*]
/CalRGBProfile (None)                [*]
/CannotEmbedFontPolicy /Warning      [*]
/CenterPages false
/ColorACSImageDict << /Blend 1 /VSamples [2 1 1 2] /QFactor 0.9 /HSamples [2 1 1 2] >>
/ColorConversionStrategy /LeaveColorUnchanged
/ColorImageDepth -1
/ColorImageDict << /Blend 1 /VSamples [2 1 1 2] /QFactor 0.9 /HSamples [2 1 1 2] >>
/ColorImageDownsampleThreshold 1.5
/ColorImageDownsampleType /Subsample
/ColorImageFilter /DCTEncode
/ColorImageResolution 150
/ColorValues 16777216
/Colors 3
/CompatibilityLevel 1.4
/CompressEntireFile false
/CompressFonts true
/CompressPages true
/ConvertCMYKImagesToRGB false
/ConvertImagesToIndexed true
/CoreDistVersion 5000
/CreateJobTicket false               [*]
/DSCEncodingToUnicode []
/DefaultRenderingIntent /Default
/DetectBlends true                   [*]
/DetectDuplicateImages true
/DeviceGrayToK true
/DeviceLinkProfile ()
/DoNumCopies false
/DoThumbnails false                  [*]
/DocumentTimeSeq 0
/DocumentUUID ()
/DownsampleColorImages false
/DownsampleGrayImages false
/DownsampleMonoImages false
/EmbedAllFonts true
/EmitDSCWarnings false               [*]
/EncodeColorImages true
/EncodeGrayImages true
/EncodeMonoImages true
/EncryptionR 0
/EndPage {--.callendpage--}          [*]
/FirstObjectNumber 1
/FitPages false
/ForOPDFRead false
/GraphicICCProfile ()
/GraphicIntent 0
/GraphicsAlphaBits 1
/GrayACSImageDict << /Blend 1 /VSamples [2 1 1 2] /QFactor 0.9 /HSamples [2 1 1 2] >>
/GrayImageDepth -1
/GrayImageDict << /Blend 1 /VSamples [2 1 1 2] /QFactor 0.9 /HSamples [2 1 1 2] >>
/GrayImageDownsampleThreshold 1.5
/GrayImageDownsampleType /Subsample
/GrayImageFilter /DCTEncode
/GrayImageResolution 150
/GrayValues 256
/GreenValues 256
/HWResolution [720.0 720.0]
/HWSize [6120 7920]
/HaveCIDSystem false
/HaveTransparency true
/HaveTrueTypes true
/HighLevelDevice true
/ImageICCProfile ()
/ImageIntent 0
/ImageMemory 524288                  [*]
/ImagingBBox null
/InputAttributes << 59 << /PageSize [612 792] >> 36 << /PageSize [649 918] >> 13 << /PageSize [595 842] >> 49 << /PageSize [354 499] >> 26 << /PageSize [2004 2835] >> 3 << /PageSize [792 1224] >> 62 << /PageSize [595 792] >> 39 << /PageSize [612 936] >> 16 << /PageSize [297 420] >> 52 << /PageSize [1460 2064] >> 29 << /PageSize [709 1001] >> 6 << /PageSize [2448 3168] >> 42 << /PageSize [396 612] >> 19 << /PageSize [105 148] >> 55 << /PageSize [516 729] >> 32 << /PageSize [2599 3677] >> 9 << /PageSize [1684 2384] >> 45 << /PageSize [1417 2004] >> 22 << /PageSize [1296 1728] >> 58 << /PageSize [612 1008] >> 35 << /PageSize [918 1298] >> 12 << /PageSize [842 1191] >> 48 << /PageSize [499 709] >> 25 << /PageSize [2835 4008] >> 2 << /PageSize [612 792] >> 61 << /PageSize [612 792] >> 38 << /PageSize [323 459] >> 15 << /PageSize [420 595] >> 51 << /PageSize [2064 2920] >> 28 << /PageSize [1001 1417] >> 5 << /PageSize [1585 2448] >> 64 << /PageSize [0 0 524287 524287] >> 41 << /PageSize [283 420] >> 18 << /PageSize [148 210] >> 54 << /PageSize [729 1032] >> 31 << /PageSize [354 499] >> 8 << /PageSize [2384 3370] >> 44 << /PageSize [2004 2835] >> 21 << /PageSize [864 1296] >> 57 << /PageSize [1224 792] >> 34 << /PageSize [1298 1837] >> 11 << /PageSize [1191 1684] >> 47 << /PageSize [709 1001] >> 24 << /PageSize [2592 3456] >> 1 << /PageSize [792 1224] >> 60 << /PageSize [612 792] >> 37 << /PageSize [459 649] >> 14 << /PageSize [595 842] >> 50 << /PageSize [2920 4127] >> 27 << /PageSize [1417 2004] >> 4 << /PageSize [1224 1585] >> 63 << /PageSize [792 1224] >> 40 << /PageSize [612 936] >> 17 << /PageSize [210 297] >> 53 << /PageSize [1032 1460] >> 30 << /PageSize [499 709] >> 7 << /PageSize [2016 2880] >> 43 << /PageSize [2835 4008] >> 20 << /PageSize [648 864] >> 56 << /PageSize [363 516] >> 33 << /PageSize [1837 2599] >> 10 << /PageSize [73 105] >> 46 << /PageSize [1001 1417] >> 23 << /PageSize [1728 2592] >> 0 << /PageSize [612.0 792.0] >> >>
/Install {--.callinstall--}
/InstanceUUID ()
/IsDistiller true
/KeyLength 0
/LZWEncodePages false
/Margins [0.0 0.0]
/MaxClipPathSize 12000
/MaxInlineImageSize 4000
/MaxPatternBitmap 0
/MaxSeparations 3
/MaxShadingBitmapSize 256000
/MaxSubsetPct 100
/MaxViewerMemorySize -1
/MonoImageDepth -1
/MonoImageDict << /K -1 >>
/MonoImageDownsampleThreshold 1.5
/MonoImageDownsampleType /Subsample
/MonoImageFilter /CCITTFaxEncode
/MonoImageResolution 300
/Name (pdfwrite)
/NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats]
/NoEncrypt ()
/NoT3CCITT false
/NumCopies null
/OPM 1
/OffOptimizations 0
/Optimize false                      [*]
/OutputAttributes << 0 << >> >>
/OutputDevice /pdfwrite
/OutputFile (/dev/null)
/OutputICCProfile (default_rgb.icc)
/OwnerPassword ()
/PDFA 0
/PDFACompatibilityPolicy 0
/PDFEndPage -1
/PDFStartPage 1
/PDFX false
/PDFXBleedBoxToTrimBoxOffset [0.0 0.0 0.0 0.0]
/PDFXSetBleedBoxToMediaBox true
/PDFXTrimBoxToMediaBoxOffset [0.0 0.0 0.0 0.0]
/PageCount 0
/PageDeviceName null
/PageOffset [0 0]
/PageSize [612.0 792.0]
/ParseDSCComments true
/ParseDSCCommentsForDocInfo true
/PatternImagemask false
/Permissions -4
/Policies << /PolicyReport {--dup-- /.LockSafetyParams --known-- {/setpagedevice --.systemvar-- /invalidaccess signalerror} --if-- --pop--} /PageSize 0 /PolicyNotFound 1 >>
/PreserveCopyPage true               [*]
/PreserveDeviceN true
/PreserveEPSInfo true                [*]
/PreserveHalftoneInfo false          [*]
/PreserveOPIComments true            [*]
/PreserveOverprintSettings true
/PreserveSMask true
/PreserveSeparation true
/PreserveTrMode true
/PrintStatistics false
/ProcessColorModel /DeviceRGB
/ProduceDSC true
/ProofProfile ()
/ReAssignCharacters true
/ReEncodeCharacters true
/RedValues 256
/RenderIntent 0
/RotatePages false
/SeparationColorNames []
/Separations false
/SetPageSize false
/SubsetFonts true
/TextAlphaBits 1
/TextICCProfile ()
/TextIntent 0
/TransferFunctionInfo /Preserve
/UCRandBGInfo /Preserve
/UseCIEColor false
/UseFastColor false
/UseFlateCompression true
/UsePrologue false                   [*]
/UserPassword ()
/WantsToUnicode true
/sRGBProfile (None)                  [*]

[*] Примечание:

В соответствии с официальной документацией следующие настройки (которые поддерживаются Adobe Acrobat Distiller), в настоящее время на Ghostscript, могут быть установлены и запрошены, но их установка не влияет:

  • /AntiAliasColorImages
  • /AntiAliasGrayImages
  • /AntiAliasMonoImages
  • /AutoPositionEPSFiles
  • /Binding
  • /CalCMYKProfile
  • /CalGrayProfile
  • /CalRGBKProfile
  • /CannotEmbedFontPolicy
  • /ConvertImagesToIndexed
  • /CreateJobTicket
  • /DetectBlends
  • /DoThumbnails
  • /EmitDSCWarnings
  • /EndPage
  • /ImageMemory
  • /LockDistillerParams
  • /Optimize
  • /PreserveCopyPage
  • /PreserveEPSInfo
  • /PreserveHalftoneInfo
  • /PreserveOPIComments
  • /sRGBProfile
  • /StartPage
  • /UsePrologue