 poppler/PSOutputDev.cc | 5 ++++-
 poppler/PSOutputDev.h  | 2 ++
 utils/pdftops.cc       | 6 ++++++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/poppler/PSOutputDev.cc b/poppler/PSOutputDev.cc
index 16ff64c4..eeb1028f 100644
--- a/poppler/PSOutputDev.cc
+++ b/poppler/PSOutputDev.cc
@@ -1257,6 +1257,7 @@ void PSOutputDev::init(PSOutputFunc outputFuncA, void *outputStreamA,
   rasterResolution = 300;
   uncompressPreloadedImages = false;
   psCenter = true;
+  useSplash = true;
   rasterAntialias = false;
   displayText = true;
   ok = true;
@@ -3228,7 +3229,9 @@ bool PSOutputDev::checkPageSlice(Page *page, double /*hDPI*/, double /*vDPI*/,
   if (!postInitDone) {
     postInit();
   }
-  if (forceRasterize) {
+  if (!useSplash) {
+    rasterize = false;
+  } else if (forceRasterize) {
     rasterize = true;
   } else {
     scan = new PreScanOutputDev(doc);
diff --git a/poppler/PSOutputDev.h b/poppler/PSOutputDev.h
index 757e3a06..212d1626 100644
--- a/poppler/PSOutputDev.h
+++ b/poppler/PSOutputDev.h
@@ -318,6 +318,7 @@ public:
   void setRasterResolution(double r) { rasterResolution = r; }
   void setRasterMono(bool b) { rasterMono = b; }
   void setUncompressPreloadedImages(bool b) { uncompressPreloadedImages = b; }
+  void setUseSplash(bool b) { useSplash = b; }
 
   bool getEmbedType1() const { return embedType1; }
   bool getEmbedTrueType() const { return embedTrueType; }
@@ -533,6 +534,7 @@ private:
   bool forceRasterize;		// forces the page to be rasterized into a image before printing
   bool displayText;		// displayText
   bool psCenter;		// center pages on the paper
+  bool useSplash;		// use Splash for transparencies (necessary for correct output)
   bool rasterAntialias;	// antialias on rasterize
   bool uncompressPreloadedImages;
   double rasterResolution;	// PostScript rasterization resolution (dpi)
diff --git a/utils/pdftops.cc b/utils/pdftops.cc
index a3cd70da..60344695 100644
--- a/utils/pdftops.cc
+++ b/utils/pdftops.cc
@@ -109,6 +109,7 @@ static bool noCrop = false;
 static bool expand = false;
 static bool noShrink = false;
 static bool noCenter = false;
+static bool noSplash = false;
 static bool duplex = false;
 static char ownerPassword[33] = "\001";
 static char userPassword[33] = "\001";
@@ -180,6 +181,8 @@ static const ArgDesc argDesc[] = {
    "don't shrink pages larger than the paper size"},
   {"-nocenter",   argFlag,     &noCenter,       0,
    "don't center pages smaller than the paper size"},
+  {"-nosplash", argFlag,      &noSplash, 0,
+   "disable splash, may break files with transparencies"},
   {"-duplex",     argFlag,     &duplex,         0,
    "enable duplex printing"},
   {"-opw",        argString,   ownerPassword,   sizeof(ownerPassword),
@@ -390,6 +393,9 @@ int main(int argc, char *argv[]) {
   if (noCenter) {
     psOut->setPSCenter(false);
   }
+  if (noSplash) {
+    psOut->setUseSplash(false);
+  }
 
   if (rasterAntialiasStr[0]) {
     if (!GlobalParams::parseYesNo2(rasterAntialiasStr, &rasterAntialias)) {
