You can use Ghostscript for this job. Make sure to use a very recent release though.
Here is a command to try:
gs \
-o rgb.pdf \
-sDEVICE=pdfwrite \
-sProcessColorModel=DeviceRGB \
-sColorConversionStrategy=RGB \
-sColorConversionStrategyForImages=RGB \
cmyk.pdf
Note, that your goal to achieve the conversion 'ideally without a (too) visible change in color' is not always possible. It very much depends on wether the input PDF did use an embedded color profile, and which.
It also depends on the color profile you apply. Above command will use a default RGB profile compiled into Ghostscript. To use a custom profile, you can add various command line parameters. To use one profile for all types of PDF content, use:
-sDefaultRGBProfile=rgb-profile-filename
This defines source colors which are not already colorimetrically defined in the source docu- ment.
If you want to override the profiles which are already embedded in the PDF document, add this:
-dOverrideICC=true
On top of these options, you can also control the ICC profile for the output device, by adding:
-sOutputICCProfile=output-profile-filename
When using an output profile, you frequently also want to set the rendering intent. For this purpose use:
-dRenderIntent=intent
where intent
is one of
0
: for Perceptual
1
: for Colorimetric
2
: for Saturation
3
: for Absolute Colorimetric intent.
Ghostscript even supports to use different profiles for different types of PDF content: graphics, text and images. See here:
-sGraphicICCProfile=graphicprofile-filename
-sTextICCProfile=textprofile-filename
-sImageICCProfile=imageprofile-filename
Similar to the above explained generic option -dRenderIntent
, you can specify different intents for different content types:
-dGraphicIntent=intent
-dTextIntent=intent
-dImageIntent=intent