poppler/PSOutputDev.cc | 38 ++++++++++++++++---------------------- poppler/PSOutputDev.h | 5 +++++ utils/pdftops.cc | 6 +++++- 3 files changed, 26 insertions(+), 23 deletions(-)
New commits: commit c448e16dc4f2f3c55b06e3f1e098f45f8abacc18 Author: William Bader <[email protected]> Date: Wed Nov 30 00:00:15 2016 +0100 patch to add -passlevel1customcolor Bug #97193 diff --git a/poppler/PSOutputDev.cc b/poppler/PSOutputDev.cc index 403bf02..195616a 100644 --- a/poppler/PSOutputDev.cc +++ b/poppler/PSOutputDev.cc @@ -1248,6 +1248,7 @@ void PSOutputDev::init(PSOutputFunc outputFuncA, void *outputStreamA, embedCIDTrueType = gTrue; fontPassthrough = gFalse; optimizeColorSpace = gFalse; + passLevel1CustomColor = gFalse; preloadImagesForms = gFalse; generateOPI = gFalse; useASCIIHex = gFalse; @@ -1650,6 +1651,7 @@ void PSOutputDev::writeXpdfProcset() { } } else if ((level == psLevel1 && lev1 && nonSep) || (level == psLevel1Sep && lev1 && sep) || + (level == psLevel1Sep && lev2 && sep && getPassLevel1CustomColor()) || (level == psLevel2 && lev2 && nonSep) || (level == psLevel2Sep && lev2 && sep) || (level == psLevel3 && lev3 && nonSep) || @@ -4124,15 +4126,6 @@ void PSOutputDev::updateFillColor(GfxState *state) { state->getFillGray(&gray); writePSFmt("{0:.4g} g\n", colToDbl(gray)); break; - case psLevel1Sep: - state->getFillCMYK(&cmyk); - c = colToDbl(cmyk.c); - m = colToDbl(cmyk.m); - y = colToDbl(cmyk.y); - k = colToDbl(cmyk.k); - writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} k\n", c, m, y, k); - addProcessColor(c, m, y, k); - break; case psLevel2: case psLevel3: if (state->getFillColorSpace()->getMode() != csPattern) { @@ -4147,9 +4140,10 @@ void PSOutputDev::updateFillColor(GfxState *state) { writePS("] sc\n"); } break; + case psLevel1Sep: case psLevel2Sep: case psLevel3Sep: - if (state->getFillColorSpace()->getMode() == csSeparation) { + if (state->getFillColorSpace()->getMode() == csSeparation && (level > psLevel1Sep || getPassLevel1CustomColor())) { sepCS = (GfxSeparationColorSpace *)state->getFillColorSpace(); color.c[0] = gfxColorComp1; sepCS->getCMYK(&color, &cmyk); @@ -4190,15 +4184,6 @@ void PSOutputDev::updateStrokeColor(GfxState *state) { state->getStrokeGray(&gray); writePSFmt("{0:.4g} G\n", colToDbl(gray)); break; - case psLevel1Sep: - state->getStrokeCMYK(&cmyk); - c = colToDbl(cmyk.c); - m = colToDbl(cmyk.m); - y = colToDbl(cmyk.y); - k = colToDbl(cmyk.k); - writePSFmt("{0:.4g} {1:.4g} {2:.4g} {3:.4g} K\n", c, m, y, k); - addProcessColor(c, m, y, k); - break; case psLevel2: case psLevel3: if (state->getStrokeColorSpace()->getMode() != csPattern) { @@ -4213,9 +4198,10 @@ void PSOutputDev::updateStrokeColor(GfxState *state) { writePS("] SC\n"); } break; + case psLevel1Sep: case psLevel2Sep: case psLevel3Sep: - if (state->getStrokeColorSpace()->getMode() == csSeparation) { + if (state->getStrokeColorSpace()->getMode() == csSeparation && (level > psLevel1Sep || getPassLevel1CustomColor())) { sepCS = (GfxSeparationColorSpace *)state->getStrokeColorSpace(); color.c[0] = gfxColorComp1; sepCS->getCMYK(&color, &cmyk); @@ -5889,7 +5875,11 @@ void PSOutputDev::doImageL2(Object *ref, GfxImageColorMap *colorMap, // color space if (colorMap) { - dumpColorSpaceL2(colorMap->getColorSpace(), gFalse, gTrue, gFalse); + // Do not update the process color list for custom colors + GBool isCustomColor = + (level == psLevel1Sep || level == psLevel2Sep || level == psLevel3Sep) && + colorMap->getColorSpace()->getMode() == csDeviceN; + dumpColorSpaceL2(colorMap->getColorSpace(), gFalse, !isCustomColor, gFalse); writePS(" setcolorspace\n"); } @@ -6288,7 +6278,11 @@ void PSOutputDev::doImageL3(Object *ref, GfxImageColorMap *colorMap, // color space if (colorMap) { - dumpColorSpaceL2(colorMap->getColorSpace(), gFalse, gTrue, gFalse); + // Do not update the process color list for custom colors + GBool isCustomColor = + (level == psLevel1Sep || level == psLevel2Sep || level == psLevel3Sep) && + colorMap->getColorSpace()->getMode() == csDeviceN; + dumpColorSpaceL2(colorMap->getColorSpace(), gFalse, !isCustomColor, gFalse); writePS(" setcolorspace\n"); } diff --git a/poppler/PSOutputDev.h b/poppler/PSOutputDev.h index 3aea223..c27c90f 100644 --- a/poppler/PSOutputDev.h +++ b/poppler/PSOutputDev.h @@ -320,6 +320,7 @@ public: GBool getEmbedCIDTrueType() const { return embedCIDTrueType; } GBool getFontPassthrough() const { return fontPassthrough; } GBool getOptimizeColorSpace() const { return optimizeColorSpace; } + GBool getPassLevel1CustomColor() const { return passLevel1CustomColor; } GBool getEnableLZW() const { return enableLZW; }; GBool getEnableFlate() const #if ENABLE_ZLIB @@ -333,6 +334,7 @@ public: void setEmbedCIDTrueType(GBool b) { embedCIDTrueType = b; } void setFontPassthrough(GBool b) { fontPassthrough = b; } void setOptimizeColorSpace(GBool b) { optimizeColorSpace = b; } + void setPassLevel1CustomColor(GBool b) { passLevel1CustomColor = b; } void setPreloadImagesForms(GBool b) { preloadImagesForms = b; } void setGenerateOPI(GBool b) { generateOPI = b; } void setUseASCIIHex(GBool b) { useASCIIHex = b; } @@ -536,6 +538,9 @@ private: GBool fontPassthrough; // pass all fonts through as-is? GBool optimizeColorSpace; // false to keep gray RGB images in their original color space // true to optimize gray images to DeviceGray color space + GBool passLevel1CustomColor; // false to convert all custom colors to CMYK + // true to pass custom colors + // has effect only when doing a level1sep GBool preloadImagesForms; // preload PostScript images and forms into // memory GBool generateOPI; // generate PostScript OPI comments? diff --git a/utils/pdftops.cc b/utils/pdftops.cc index dfeaa14..2eeba19 100644 --- a/utils/pdftops.cc +++ b/utils/pdftops.cc @@ -19,7 +19,7 @@ // Copyright (C) 2007-2008, 2010, 2015 Albert Astals Cid <[email protected]> // Copyright (C) 2009 Till Kamppeter <[email protected]> // Copyright (C) 2009 Sanjoy Mahajan <[email protected]> -// Copyright (C) 2009, 2011, 2012, 2014, 2015 William Bader <[email protected]> +// Copyright (C) 2009, 2011, 2012, 2014-2016 William Bader <[email protected]> // Copyright (C) 2010 Hib Eris <[email protected]> // Copyright (C) 2012 Thomas Freitag <[email protected]> // Copyright (C) 2013 Suzuki Toshiya <[email protected]> @@ -96,6 +96,7 @@ static GBool noEmbedCIDPSFonts = gFalse; static GBool noEmbedCIDTTFonts = gFalse; static GBool fontPassthrough = gFalse; static GBool optimizeColorSpace = gFalse; +static GBool passLevel1CustomColor = gFalse; static char rasterAntialiasStr[16] = ""; static GBool preload = gFalse; static char paperSize[15] = ""; @@ -160,6 +161,8 @@ static const ArgDesc argDesc[] = { "enable anti-aliasing on rasterization: yes, no"}, {"-optimizecolorspace", argFlag, &optimizeColorSpace,0, "convert gray RGB images to gray color space"}, + {"-passlevel1customcolor", argFlag, &passLevel1CustomColor, 0, + "pass custom color in level1sep"}, {"-preload", argFlag, &preload, 0, "preload images and forms"}, {"-paper", argString, paperSize, sizeof(paperSize), @@ -407,6 +410,7 @@ int main(int argc, char *argv[]) { psOut->setFontPassthrough(fontPassthrough); psOut->setPreloadImagesForms(preload); psOut->setOptimizeColorSpace(optimizeColorSpace); + psOut->setPassLevel1CustomColor(passLevel1CustomColor); #if OPI_SUPPORT psOut->setGenerateOPI(doOPI); #endif _______________________________________________ poppler mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/poppler
