Преобразование PDF в CMYK (с идентификацией распознавания CMYK)
Мне очень сложно получить ImageMagick identify
, чтобы идентифицировать PDF как CMYK.
По существу, скажем, я создаю этот файл test.tex
, с pdflatex
:
\documentclass[a4paper,12pt]{article}
%% https://tex.stackexchange.com/info/13071
\pdfcompresslevel=0
%% http://compgroups.net/comp.text.tex/Making-a-cmyk-PDF
%% ln -s /usr/share/color/icc/sRGB.icm .
% \immediate\pdfobj stream attr{/N 4} file{sRGB.icm}
% \pdfcatalog{%
% /OutputIntents [ <<
% /Type /OutputIntent
% /S/GTS_PDFA1
% /DestOutputProfile \the\pdflastobj\space 0 R
% /OutputConditionIdentifier (sRGB IEC61966-2.1)
% /Info(sRGB IEC61966-2.1)
% >> ]
% }
%% http://latex-my.blogspot.com/2010/02/cmyk-output-for-commercial-printing.html
%% https://tex.stackexchange.com/info/9961
\usepackage[cmyk]{xcolor}
\begin{document}
Some text here...
\end{document}
Если я попытаюсь идентифицировать полученный файл test.pdf
, я получаю его как RGB, независимо от того, какие параметры я пытался (по крайней мере, по ссылкам в источнике) - и все же цвета в нем будут сохраняться как CMYK; для источника выше:
$ grep -ia 'cmyk\|rgb\| k' test.pdf
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup
/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.11-2.2 (TeX Live 2010) kpathsea version 6.0.0)
$ identify -verbose 'test.pdf[0]'
...
Type: Palette
Endianess: Undefined
Colorspace: RGB
Depth: 16/8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
Channel statistics:
Red:
...
Green:
...
Blue:
...
Histogram:
5: (12593,11565,11822) #31312D2D2E2E rgb(49,45,46)
4: (16448,15420,15677) #40403C3C3D3D rgb(64,60,61)
9: (20303,19275,19532) #4F4F4B4B4C4C rgb(79,75,76)
25: (23901,23130,23387) #5D5D5A5A5B5B rgb(93,90,91)
...
То же самое происходит, если я также раскомментирую, что \immediate\pdfobj stream ...
часть; и все же, если в документе есть только один цвет (черный), я не вижу, где identify
появляется гистограмма значений RGB (хотя, возможно, все они близки к серым)?!
Так что никогда не думайте об этом, тогда я бы попытался использовать ghostscript
для преобразования test.pdf
в новый pdf, который был бы признан CMYK на identify
- но даже не удачи:
$ gs -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile=test-gs.pdf -dUseCIEColor -sProcessColorModel=DeviceRGB -dProcessColorModel=/DeviceCMYK -sColorConversionStrategy=/CMYK test.pdf
GPL Ghostscript 9.01 (2011-02-07)
Copyright (C) 2010 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
$ identify -verbose 'test-gs.pdf[0]'
...
Type: Grayscale
Base type: Grayscale
Endianess: Undefined
Colorspace: RGB
Depth: 16/8-bit
...
Итак, единственное, что воспринимается как identify
как изменение, - это Type: Grayscale
(из предыдущего Type: Palette
); но в остальном он все еще видит цветовое пространство RGB!
Кроме того, обратите внимание, что identify
-, способный корректно сообщать CMYK pdf - см. Пример плаката CMYK: установка формата pdf-страницы в (растровое изображение ) Размер изображения? # 17843 - TeX - LaTeX - Stack Exchange для примера командной строки для создания такого PDF файла с помощью convert
и gs
. Фактически, мы можем выполнить:
convert test.pdf -depth 8 -colorspace cmyk -alpha Off test-c.pdf
... и этот будет результат с PDF, который будет identify
ed как CMYK - однако PDF также будет растеризован (по умолчанию - 72 dpi).
EDIT: Я только что обнаружил, что если я создам презентацию .odp в OpenOffice и экспортирую ее в PDF; что PDF по умолчанию будет RGB, однако, следующая команда (из примеры ghostscript | Производственные обезьяны):
# Color PDF to CMYK:
gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK \
-sOutputFile=output.pdf input.pdf
... на самом деле создаст CMYK pdf, который будет представлен как таковой identify
(хотя черный будет богатым, а не простым - на всех четырех каналах); однако эта команда будет работать только тогда, когда слайд имеет добавленное изображение (видимо, это тот, который запускает преобразование цвета?!)! Смешно, я не могу получить тот же эффект от pdflatex
PDF.
Итак, мой вопрос можно задать двумя способами:
- Есть ли какие-либо методы преобразования командной строки в Linux, которые преобразуют RGB файл в pdf файл CMYK при сохранении векторов, который распознается как таковой в
identify
(и, следовательно, построит правильную гистограмму цветов CMYK)
- Есть ли другие инструменты командной строки Linux, похожие на
identify
, которые будут правильно распознавать цвета CMYK даже в исходном test.pdf
от pdflatex
(и, возможно, построить гистограмму цвета, основанную на произвольно выбранном PDF-страница, например identify
)?
Заранее благодарим за любые ответы,
Ура!
Некоторые ссылки:
Ответы
Ответ 1
sdaau, команда, которую вы использовали для преобразования вашего PDF в CMYK, была неправильной. Попробуйте вместо этого:
gs \
-o test-cmyk.pdf \
-sDEVICE=pdfwrite \
-sProcessColorModel=DeviceCMYK \
-sColorConversionStrategy=CMYK \
-sColorConversionStrategyForImages=CMYK \
test.pdf
Update
Если преобразование цвета не работает по желанию, и если вы видите сообщение типа "Невозможно преобразовать цветовое пространство в серый цвет, вернув стратегию в LeaveColorUnchanged", тогда...
- ваш Ghostscript, вероятно, является более новой версией из серии версий 9.x и
- ваш источник PDF, вероятно, использует встроенный цветной профиль ICC
В этом случае добавьте -dOverrideICC
в командную строку и посмотрите, не изменит ли результат результат.
Обновление 2
Как заметил @Marein, если вы хотите избежать появления артефактов JPEG на изображениях (там, где их раньше не было), вы должны добавить
-dEncodeColorImages=false
в командной строке.
(Это справедливо для почти всей обработки PDF файлов PDF, а не только для этого случая. Поскольку GS по умолчанию создает совершенно новый файл с вновь созданными объектами и новую файловую структуру при запросе на выход PDF файла - это не просто повторно использует предыдущие объекты, так как более "немой" PDF-процессор, такой как pdftk
, имеет {pdftk
другие преимущества, но не поймите меня неправильно!}. GS применяет сжатие JPEG по умолчанию - посмотрите текущую документацию Ps2pdf и найдите "ColorImageFilter", чтобы узнать подробности...)
Ответ 2
У меня есть несвязанная проблема, но я также борюсь с PDF-документами CMYK.
Я написал этот маленький script здесь (он называется pdf2pdfx):
#!/bin/bash
gs \
-dPDFX \
-dBATCH \
-dNOPAUSE \
-dNOOUTERSAVE \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK \
-dProcessColorModel=/DeviceCMYK \
-dPDFSETTINGS=/prepress \
-sOutputFile="${1%%.pdf}_X-3.pdf" \
PDFX_def.ps \
"$1"
и мой PDFX_def.ps содержит следующее (я удалил профиль ICC и определил FOGRA39, это должно быть ОК):
%!
% $Id$
% This is a sample prefix file for creating a PDF/X-3 document.
% Feel free to modify entries marked with "Customize".
% This assumes an ICC profile to reside in the file (ISO Coated sb.icc),
% unless the user modifies the corresponding line below.
systemdict /ProcessColorModel known {
systemdict /ProcessColorModel get dup /DeviceGray ne exch /DeviceCMYK ne and
} {
true
} ifelse
{ (ERROR: ProcessColorModel must be /DeviceGray or DeviceCMYK.)=
/ProcessColorModel cvx /rangecheck signalerror
} if
% Define entries to the document Info dictionary :
% /ICCProfile (/usr/share/color/icc/ISOcoated_v2_300_eci.icc) def % Customize or remove.
[ /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
% Define an ICC profile :
currentdict /ICCProfile known {
[/_objdef {icc_PDFX} /type /stream /OBJ pdfmark
[{icc_PDFX} <</N systemdict /ProcessColorModel get /DeviceGray eq {1} {4} ifelse >> /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 (FOGRA39) % 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
Идентифицировать, тогда правильно сообщает цветовое пространство CMYK.
До:
[email protected] ~/orpheus/werbung/action $ identify -verbose action_schulungsvideo_v3_print.pdf
Image: action_schulungsvideo_v3_print.pdf
Format: PDF (Portable Document Format)
Class: DirectClass
Geometry: 612x859+0+0
Resolution: 72x72
Print size: 8.5x11.9306
Units: Undefined
Type: TrueColor
Endianess: Undefined
Colorspace: RGB
Depth: 16/8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
Channel statistics:
Red:
min: 0 (0)
max: 65535 (1)
mean: 53873.6 (0.822058)
standard deviation: 19276.7 (0.294144)
kurtosis: 1.854
skewness: -1.82565
Green:
min: 0 (0)
max: 65535 (1)
mean: 55385.6 (0.84513)
standard deviation: 19274.6 (0.294112)
kurtosis: 2.09868
skewness: -1.91651
Blue:
min: 0 (0)
max: 65535 (1)
mean: 51020 (0.778516)
standard deviation: 20077.7 (0.306367)
kurtosis: 0.860627
skewness: -1.52344
Image statistics:
Overall:
min: 0 (0)
max: 65535 (1)
mean: 53426.4 (0.815235)
standard deviation: 19546.7 (0.298263)
kurtosis: 1.59453
skewness: -1.75701
Rendering intent: Undefined
Interlace: None
Background color: white
Border color: rgb(223,223,223)
Matte color: grey74
Transparent color: black
Compose: Over
Page geometry: 612x859+0+0
Dispose: Undefined
Iterations: 0
Compression: Undefined
Orientation: Undefined
Properties:
date:create: 2011-09-14T15:38:57+02:00
date:modify: 2011-09-14T15:38:57+02:00
pdf:HiResBoundingBox: 612.283x858.898+0+0
pdf:Version: PDF-1.5
signature: 210bfc9cf90e3b9505385f8b2267da1665b5c2de28bb5223311afba01718bbeb
Artifacts:
verbose: true
Tainted: False
Filesize: 1.577MBB
Number pixels: 526KB
Pixels per second: 52.57MB
User time: 0.020u
Elapsed time: 0:01.009
Version: ImageMagick 6.6.5-6 2011-04-08 Q16 http://www.imagemagick.org
после
[email protected] ~/orpheus/werbung/action $ pdf2pdfx action_schulungsvideo_v3_print.pdf
GPL Ghostscript 9.04 (2011-08-05)
Copyright (C) 2011 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
[email protected] ~/orpheus/werbung/action $ identify -verbose action_schulungsvideo_v3_print_X-3.pdf
Image: action_schulungsvideo_v3_print_X-3.pdf
Format: PDF (Portable Document Format)
Class: DirectClass
Geometry: 612x859+0+0
Resolution: 72x72
Print size: 8.5x11.9306
Units: Undefined
Type: ColorSeparation
Base type: ColorSeparation
Endianess: Undefined
Colorspace: CMYK
Depth: 16/8-bit
Channel depth:
cyan: 8-bit
magenta: 8-bit
yellow: 8-bit
black: 8-bit
Channel statistics:
Cyan:
min: 0 (0)
max: 65535 (1)
mean: 8331.78 (0.127135)
standard deviation: 14902.2 (0.227392)
kurtosis: 1.62171
skewness: 1.7799
Magenta:
min: 0 (0)
max: 62194 (0.94902)
mean: 6739.34 (0.102836)
standard deviation: 14517.5 (0.221523)
kurtosis: 2.08183
skewness: 1.93276
Yellow:
min: 0 (0)
max: 65535 (1)
mean: 13310.1 (0.203098)
standard deviation: 17022.5 (0.259746)
kurtosis: 0.991135
skewness: 1.45216
Black:
min: 0 (0)
max: 56540 (0.862745)
mean: 7117.47 (0.108606)
standard deviation: 16803.7 (0.256408)
kurtosis: 3.02752
skewness: 2.16554
Image statistics:
Overall:
min: 0 (0)
max: 65535 (1)
mean: 8874.66 (0.135419)
standard deviation: 15850.6 (0.241864)
kurtosis: 2.17614
skewness: 1.88139
Total ink density: 292%
Rendering intent: Undefined
Interlace: None
Background color: white
Border color: cmyk(223,223,223,0)
Matte color: grey74
Transparent color: black
Compose: Over
Page geometry: 612x859+0+0
Dispose: Undefined
Iterations: 0
Compression: Undefined
Orientation: Undefined
Properties:
date:create: 2011-09-14T15:39:30+02:00
date:modify: 2011-09-14T15:39:30+02:00
pdf:HiResBoundingBox: 612.28x858.9+0+0
pdf:Version: PDF-1.3
signature: 0416db7487ea147b974ece5748bc4284e82bfc3fb7cd07a4de050421ba112076
Artifacts:
verbose: true
Tainted: False
Filesize: 2.103MBB
Number pixels: 526KB
Pixels per second: 5.25708PB
User time: 0.000u
Elapsed time: 0:01.000
Version: ImageMagick 6.6.5-6 2011-04-08 Q16 http://www.imagemagick.org
Это на 64-битном Gentoo с gs 9.04
Может быть, это помогает?
Источник PDF связан с экспортом inkscape pdf, цвета были ограничены теми, которые покрыты оболочкой ECI ISO с покрытием v2.
Я использую это как обходной путь для отсутствия экспорта CMYK inkscape и отсутствия готового допечатного PDF/X вывода...
Ответ 3
Хорошо, вот что-то, по крайней мере...
Изначально мне нужно это, чтобы убедиться, что мои файлы PDF находятся в CMYK и имеют текст как "простой черный". C: 0, M: 0, Y: 0, K: 100 - Ранее у нас были проблемы с принтерами, где они жаловались на мои латексные PDF файлы, содержащие "богатый черный" текст (что, таким образом, стоило бы больше). И я обычно перехожу на identify
, так как это единственный инструмент, который может анализировать PDF файлы и цвета (и это также относительно легко запомнить).
Хорошо, я прочитал Технический совет: использование Ghostscript для преобразования и объединения файлов | Linux Journal; где рекомендуется использовать tiffsep
устройство gs
для получения разделов. И это для меня выполняет ту же роль, что и identify
; Я могу просто сделать:
$ gs -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -r150x150 -sOutputFile=p%08d.tif test.pdf
$ ls p*
p00000001.Black.tif p00000001.Magenta.tif p00000001.Yellow.tif p00000001.Cyan.tif p00000001.tif
$ eog p00000001.tif
... и затем я могу просто "итератировать" через изображения разделения с помощью стрелки влево/вправо - и это сразу же очевидно, если это "обычный черный" или "богатый черный" .
Таким образом, это показывает, что независимо от того, что показывает identify
, test.pdf
из pdflatex
фактически имеет "обычный черный цвет" в качестве цвета текста, как и предполагалось (остальные разделители пустые), однако, делая что-то вроде:
# do a conversion of original PDF
$ gs -dPDFA -dBATCH -dNOPAUSE -dNOOUTERSAVE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sOutputFile=out_pdfa.pdf test.pdf
# do a separation on the converted pdf
$ gs -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -r150x150 \
-dFirstPage=1 -dLastPage=1 -sOutputFile=p%08d.tif out_pdfa.pdf
# view
$ eog p00000001.tif
... покажет, что конкретный out_pdfa.pdf
на самом деле имеет "богатый черный" , т.е. чернила для текста проходят через все четыре разделения! (identify
также показывает это как RGB).
Итак, я надеюсь, что этот метод gs/tiffsep
более надежный, чем identify
:)
<суб > Примечание: я использую Ubuntu Natty, который отправляет GhostScript 9.01 - однако, у него есть неприятная ошибка с tiffsep
: Ошибка 691857 - сбои tiffsep в Версии 9 (отсутствует lab.icc). Это было исправлено для 9.02 - и 9.02 было выпущено как ghostscript в oneiric. Чтобы использовать 9.02 под Natty, я последовал за как обновить один пакет с помощью apt-get? - Форумы Ubuntu:
sudo nano /etc/apt/sources.list # add deb http://archive.ubuntu.com/ubuntu/ oneiric main restricted
sudo apt-get update
sudo apt-get install ghostscript # this upgrades only gs and dependencies
sudo nano /etc/apt/sources.list # remove/comment oneiric repo
sudo apt-get update && sudo apt-get upgrade # should be back to normal here
суб > <Суб > Обратите внимание, что с ошибкой версии 9.01 даже эта команда завершится неудачно:
$ GS_LIB=/usr/share/ghostscript/9.01/iccprofiles/ gs -sICCProfilesDir=/usr/share/ghostscript/9.01/iccprofiles/ -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -sOutputFile=p%08d.tif out_pdfa.pdf
...
sfopen: gs_parse_file_name failed.
sfopen: gs_parse_file_name failed.
... gsicc_open_search(): Could not find lab.icc ...
суб > <Суб > .. и с 9.02 нет необходимости явно указывать sICCProfilesDir
.
Суб >
Ответ 4
Меня тоже смущает. Я попробовал пример @tbart точно, но он работает только для некоторых входных pdf файлов (вроде бы содержащих изображения уже, rgb или нет?), А не других. В частности, позвольте взять этот супер простой файл ps:
%!PS
/Times-Roman findfont 30 scalefont setfont
72 680 moveto
0.81 0.72 0 0 setcmykcolor
(This is text!) show
showpage
Если я вызываю этот test1.ps, а затем запустите эту команду (в windows, gs 9.14):
gswin64c -dEmbedAllFonts=true -dPDFX -dBATCH -dNOPAUSE -dNOOUTERSAVE -sDEVICE=pdfwrite -dProcessColorModel=/DeviceCMYK -sOutputICCProfile=CoatedGRACoL2006.icc -sColorConversionStrategy=CMYK -sColorConversionStrategyForImages=CMYK -sOutputFile=test1.pdf PDFX_def.ps test1.ps
Замените gswin64c на gs, если вы используете linux/cygwin.
ICY CMYK, который я использую, находится в файле PDFX_def.ps и в приведенной выше команде. Вы можете получить это отсюда, но это всего лишь случайный ICC, который хочет для своих карт, он не кажется особенным: http://www.adobe.com/support/downloads/thankyou.jsp?ftpID=4075&fileID=3790
Выход test1.pdf из этого загружается как CMYK pdf в Illustrator, но определяет -verbose говорит sRGB. Если я делаю вещь @sdaau tiffsep, она записывает разделители, и они имеют правильные значения.
Итак, я не знаю.
Может ли кто-нибудь получить этот файл ps для преобразования в PDF файл CMYK, который идентифицирует распознавание?
Крис
Изменить: whoa. Возможно, я понял это и исправил это. Похоже, что идентификатор просто ищет /ColorSpace/DeviceCMYK в PDF файле, поэтому, если я взломаю PDFX_def.ps для его вывода, идентификация вызовет его CMYK. Итак, просматривая pdf файлы, которые работали, я обнаружил, что если они идентифицировали эту строку, а если нет, они были неправильно отмечены как sRGB.
В конце PDFX_def.ps добавьте строку /ColorSpace/DeviceCMYK:
[/_objdef {OutputIntent_PDFX} /type /dict /OBJ pdfmark
[{OutputIntent_PDFX} <<
/ColorSpace /DeviceCMYK % convince ImageMagick identify that it CMYK
/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 TR 003) % 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
Boom. Надеюсь, это не делает ничего странного с совместимостью или чем-то еще.
Ответ 5
Повторное преобразование CMYK с помощью PDF/X-3 снова, поскольку у меня есть другое задание на печать в очереди, я выяснил следующее:
Если вам нужен CMYK, избегайте X-3.
Он не поддерживает прозрачность (https://en.wikipedia.org/wiki/PDF/X), и голубое тонированное изображение, которое вы получите, не удовлетворяет и не будет соответствовать ни одному стандарту. Если у вас есть альфа, непрозрачность, градиенты не конвертируются в PDF/X-3, если это не совсем необходимо вашей типографии.
Если вам нужен pdf/X, вам нужно растрировать и перейти на X-3. X-4 для Linux/бесплатных программных продуктов, о которых я знаю в "хорошо известной цепочке инструментов" (imagemagick, inkscape, gimp и т.д.)
Тем не менее, я все еще сражаюсь с определенными богатыми черными, f.ex. 60% C, 60% M, 40% Y, 100% K - довольно типичный стандарт для типографий здесь. Всякий раз, когда я устанавливаю это в inkscape, он исчезнет, как только будет экспортирован (в RGB, ограничение в каире)
Тем не менее, это то, что, кажется, приближает меня к тому, что они ожидали:
#!/bin/bash
# possibly ps2ps2 for keeping fonts?
pdf2ps -sOutputFile=- "$1" | gs \
-dPDFX \
-dBATCH \
-dNOPAUSE \
-dNOOUTERSAVE \
-dPDFSETTINGS=/prepress \
-dCompatibilityLevel=1.4 \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK \
-sProcessColorModel=DeviceCMYK \
-dHaveTransparency=false \
-sOutputFile="${1%%.pdf}_X-3.pdf" \
PDFX_def.ps \
-
Любые идеи по созданию подлинного CMYK для рабочего процесса вывода CMYK-PDF по-прежнему очень приветствуются. Scribus не является реальным решением, так как у него много проблем с импортом inkscape SVG правильно. Кроме этого, scribus делает приличную работу, создавая CMYK-PDFs.