[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegraphics/kviewshell/plugins/ps
From:       Wilfried Huss <Wilfried.Huss () gmx ! at>
Date:       2006-06-20 8:10:32
Message-ID: 1150791032.857417.21743.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 553155 by whuss:

port of commit 552601:

Add support for Enculapsed PostScript files.

 M  +1 -0      psMultipage.cpp  
 M  +1 -1      psMultipage.desktop  
 M  +71 -49    psRenderer.cpp  
 M  +2 -0      psRenderer.h  


--- trunk/KDE/kdegraphics/kviewshell/plugins/ps/psMultipage.cpp #553154:553155
@@ -78,6 +78,7 @@
      saved */
   QStringList r;
   r << i18n("*.ps|Ps file (*.ps)");
+  r << i18n("*.eps|Enculapsed Postscript file (*.eps)");
   return r;
 }
 
--- trunk/KDE/kdegraphics/kviewshell/plugins/ps/psMultipage.desktop #553154:553155
@@ -5,6 +5,6 @@
 Type=Service
 Comment=KViewShell plugin for PostScript files
 ServiceTypes=KViewShell/MultiPage
-MimeType=application/postscript
+MimeType=application/postscript;image/x-eps
 X-KDE-Library=psviewpart
 X-KDE-MultiPageVersion=3
--- trunk/KDE/kdegraphics/kviewshell/plugins/ps/psRenderer.cpp #553154:553155
@@ -24,6 +24,7 @@
 #include <kmessagebox.h>
 #include <kdebug.h>
 #include <klocale.h>
+#include <kmimetype.h>
 #include <kprocio.h>
 #include <ktempfile.h>
 
@@ -40,7 +41,7 @@
 //#define PDFSYNC_DEBUG
 
 PsRenderer::PsRenderer()
-  : DocumentRenderer(), currentRenderingRequest(0), internalDoc(0)
+  : DocumentRenderer(), currentRenderingRequest(0), internalDoc(0), eps(false)
 {
 }
 
@@ -93,46 +94,47 @@
   bool isThumbnail = page->getId().isThumbnail;
 
   // Generate a PNG-file
-  // Step 1: Write the PostScriptString to a File
-  KTempFile tempPSfile(QString::null, ".ps");
   KTempFile tempPNGfile(QString::null, ".png");
   tempPNGfile.setAutoDelete(1);
   tempPNGfile.close(); // we are want the filename, not the file
 
+  // Step 1: Write the PostScriptString to a File
+  KTempFile tempPSfile(QString::null, ".ps");
   QDataStream& os = *tempPSfile.dataStream();
 
-  QFile psFile(filename);
-  psFile.open(IO_ReadOnly);
-
+  if (!eps)
   {
-    Position prolog = internalDoc->prolog();
-    unsigned long length = prolog.second - prolog.first;
-    if (!psFile.seek(prolog.first))
-      kError() << "seeking to prolog failed" << endl;
-    QByteArray data = psFile.read(length);
-    os.writeRawData(data.data(), length);
-  }
+    QFile psFile(filename);
+    psFile.open(IO_ReadOnly);
+    {
+      Position prolog = internalDoc->prolog();
+      unsigned long length = prolog.second - prolog.first;
+      if (!psFile.seek(prolog.first))
+        kError() << "seeking to prolog failed" << endl;
+      QByteArray data = psFile.read(length);
+      os.writeRawData(data.data(), length);
+    }
+    
+    {
+      Position setup = internalDoc->setup();
+      unsigned long length = setup.second - setup.first;
+      if (!psFile.seek(setup.first))
+        kError() << "seeking to setup failed" << endl;
+      QByteArray data = psFile.read(length);
+      os.writeRawData(data.data(), length);
+    }
 
-  {
-    Position setup = internalDoc->setup();
-    unsigned long length = setup.second - setup.first;
-    if (!psFile.seek(setup.first))
-      kError() << "seeking to setup failed" << endl;
-    QByteArray data = psFile.read(length);
-    os.writeRawData(data.data(), length);
+    {
+      Position pos = internalDoc->pagePos(pageNumber);
+      unsigned long length = pos.second - pos.first;
+      if(!psFile.seek(pos.first))
+        kError() << "seeking to page "<< currentPageNumber << " failed" << endl;
+      QByteArray data = psFile.read(length);
+      os.writeRawData(data.data(), length);
+    }
   }
 
-  {
-    Position pos = internalDoc->pagePos(pageNumber);
-    unsigned long length = pos.second - pos.first;
-    if(!psFile.seek(pos.first))
-      kError() << "seeking to page "<< currentPageNumber << " failed" << endl;
-    QByteArray data = psFile.read(length);
-    os.writeRawData(data.data(), length);
-  }
-
   QFileInfo tempPSfileInfo(*tempPSfile.file());
-
   tempPSfile.close();
 
   // Step 2: Call GS with the File
@@ -143,7 +145,15 @@
   argus << "-sDEVICE=png16m";
   argus << QString("-sOutputFile=%1").arg(tempPNGfile.name());
 
-  argus << QString("-sExtraIncludePath=%1").arg(tempPSfileInfo.dirPath(true));
+  if (eps)
+  {
+    argus << QString("-sExtraIncludePath=%1").arg(filename);
+  }
+  else
+  {
+    argus << QString("-sExtraIncludePath=%1").arg(tempPSfileInfo.dirPath(true));
+  }
+
   if (isThumbnail)
   {
     // Because the rendering quality of ghostscript is quite bad at low resolutions, \
we @@ -158,7 +168,14 @@
   }
   argus << "-dTextAlphaBits=4 -dGraphicsAlphaBits=2"; // Antialiasing
   argus << "-c" << "<< /PermitFileReading [ ExtraIncludePath ] /PermitFileWriting [] \
                /PermitFileControl [] >> setuserparams .locksafe";
-  argus << "-f" << tempPSfile.name();
+  if (eps)
+  {
+    argus << "-f" << filename;
+  }
+  else
+  {
+    argus << "-f" << tempPSfile.name();
+  }
 
   //kDebug() << argus.join(" ") << endl;
 
@@ -246,16 +263,35 @@
 
   // Set the number of pages page sizes
   kDebug() << "get number of pages." << endl;
-  //numPages = document->getNumPages();
+
   numPages = internalDoc->dsc()->page_count();
 
-  kDebug() << "Number of Pages = " << numPages << endl;
+  // For some eps files dsc()->page_count() returns 0.
+  // Work around this issue.
+  if (numPages == 0)
+    numPages = 1;
 
   // Set the page sizes in the pageSizes array
   pageSizes.resize(numPages);
 
-  if (internalDoc->dsc()->isStructured())
+  eps = false;
+  KMimeType::Ptr mimetype = KMimeType::findByPath(fname);
+  if (mimetype->name() == "image/x-eps")
   {
+    kDebug() << "File is an eps" << endl;
+    eps = true;
+
+    Length w,h;
+    QSize pageSize;
+    pageSize = internalDoc->computePageSize(internalDoc->pageMedia(0));
+
+    w.setLength_in_bigPoints(pageSize.width());
+    h.setLength_in_bigPoints(pageSize.height());
+    pageSizes[0].setPageSize(w, h);
+    kDebug() << "eps file setup finished" << endl;
+  }
+  else if (internalDoc->dsc() && internalDoc->dsc()->isStructured())
+  {
     kDebug() << "structured postscript file." << endl;
     internalDoc->setProlog(qMakePair (internalDoc->dsc()->beginprolog(), \
                internalDoc->dsc()->endprolog()));
     internalDoc->setSetup(qMakePair (internalDoc->dsc()->beginsetup(), \
internalDoc->dsc()->endsetup())); @@ -273,20 +309,6 @@
       QSize pageSize;
       pageSize = internalDoc->computePageSize(internalDoc->pageMedia(i));
 
-      /*Poppler::Page* pdfPage = document->getPage(i);
-      QSize pageSize = pdfPage->pageSize();
-      int width = pageSize.width();
-      int height = pageSize.height();
-
-      if (pdfPage->orientation() == Poppler::Page::Landscape ||
-          pdfPage->orientation() == Poppler::Page::Seascape)
-      {
-        width = pageSize.height();
-        height = pageSize.width();
-      }
-      delete pdfPage;
-      pdfPage = 0;
-      */
       kDebug() << "size of Page " << i << ": (" << pageSize.width() << ", " << \
pageSize.height() << ")" << endl;  Length w,h;
       w.setLength_in_bigPoints(pageSize.width());
--- trunk/KDE/kdegraphics/kviewshell/plugins/ps/psRenderer.h #553154:553155
@@ -95,6 +95,8 @@
   GSInternalDocument* internalDoc;
 
   PageNumber currentPageNumber;
+
+  bool eps;
 };
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic