[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