According to this question:
Displaying PDF documents on iPad - Color Problems
some PDFs don\'t display right on iOS devices due to colors not being in RGB. It\'s
as far I know, ghostscript is only able to convert colorspace in raster images
podofocolor
http://podofo.sourceforge.net/
is able to convert vector objects
you can try to convert (for black and white non colorful pages), cmyk to grayscale in this way:
podofocolor grayscale input.pdf output.pdf
if binaries are not in repositories, unfortunately you need to build by yourself. however, i just tried to convert a pdf to greyscale with
gs -sOutputFile=output.pdf -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray -dCompatibilityLevel=1.4 input.pdf < /dev/null
and prepress preflight check said it was turned to grayscale, so, maybe I was wrong saying that gs can only convert colorspace of raster content in a pdf (since my pdf is vectorized)
We use Ghostscript to convert from CMYK to RGB when generating PDFs from Postscript files. It should also work for PDF-to-PDF conversions.
The followind command line is used:
gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -dCompatibilityLevel=1.4 -dColorConversionStrategy=/sRGB -dProcessColorModel=/DeviceRGB -dUseCIEColor=true -sOutputFile=output.pdf input.ps
On mac, you could use sips command. For example,
sips --matchTo '/System/Library/ColorSync/Profiles/Generic RGB Profile.icc' CMYKinput.pdf --out RGBoutput.pdf
And RGB pdf can be converted into CMYK in the same way (change 'Generic RGB Profile.icc' to 'Generic CMYK Profile.icc').
Tested on OSX 10.12.
I've solved the same issue here by downgrading the -dCompatibilityLevel from v1.4 to v1.3
UPDATE: v1.3 will turn all content in the PDF in just one object, this means the end user will not be able to select texts neither extract images in his viewer.
In order to keep using v1.4, I've discovered a trick on ghostscript that helps to keep the color accuracy, which is to disable PDF transparencies, they convert inaccurately because RGB doesn't have an alpha channel, so, information is lost.
So if you use: -dNOTRANSPARENCY you can still use: -dCompatibilityLevel=1.4 and it will work.
The exact command:
gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -dCompatibilityLevel=1.4 -dNOTRANSPARENCY -dColorConversionStrategy=/sRGB -dProcessColorModel=/DeviceRGB -dColorConversionStrategyForImages=/DeviceRGB -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dUseCIEColor=true -sOutputFile=output.pdf input.pdf
As I'm handling it with PHP, I wrote a simple class:
/**
* Convert color profiles - PDF to PDF
* Class Conversor
*/
class Conversor
{
/**
* Convert CMYK to RGB
*
* @param $input
* @param $output
* @return string
*/
public static function gsCmykToRgb($input, $output)
{
$gsScript = ('gs -sDEVICE=pdfwrite \
-dBATCH -dNOPAUSE \
-dCompatibilityLevel=1.4 \
-dNOTRANSPARENCY \
-dColorConversionStrategy=/sRGB \
-dProcessColorModel=/DeviceRGB \
-dColorConversionStrategyForImages=/DeviceRGB \
-dTextAlphaBits=4 \
-dGraphicsAlphaBits=4 \
-dUseCIEColor=true \
-sOutputFile='."$output".' '."$input");
exec($gsScript);
return realpath($output);
}
}
You can find everything about ghostscript here: http://www.ghostscript.com/doc/9.05/Use.htm