• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegraphics API Reference
  • KDE Home
  • Contact Us
 

okular

  • sources
  • kde-4.12
  • kdegraphics
  • okular
  • core
fileprinter.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2007,2010 by John Layt <john@layt.net> *
3  * *
4  * FilePrinterPreview based on KPrintPreview (originally LGPL) *
5  * Copyright (c) 2007 Alex Merry <huntedhacker@tiscali.co.uk> *
6  * *
7  * This program is free software; you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation; either version 2 of the License, or *
10  * (at your option) any later version. *
11  ***************************************************************************/
12 
13 #include "fileprinter.h"
14 
15 #include <QtGui/QPrinter>
16 #include <QPrintEngine>
17 #include <QStringList>
18 #include <QSize>
19 #include <QtCore/QFile>
20 #include <QtCore/QFileInfo>
21 #include <QtGui/QLabel>
22 #include <QtGui/QShowEvent>
23 #include <QtNetwork/QTcpSocket>
24 
25 #include <KProcess>
26 #include <KShell>
27 #include <klocalsocket.h>
28 #include <kstandarddirs.h>
29 #include <ktempdir.h>
30 #include <kdebug.h>
31 
32 #include "debug_p.h"
33 
34 using namespace Okular;
35 
36 int FilePrinter::printFile( QPrinter &printer, const QString file,
37  QPrinter::Orientation documentOrientation, FileDeletePolicy fileDeletePolicy,
38  PageSelectPolicy pageSelectPolicy, const QString &pageRange )
39 {
40  FilePrinter fp;
41  return fp.doPrintFiles( printer, QStringList( file ), fileDeletePolicy, pageSelectPolicy, pageRange,
42  documentOrientation );
43 }
44 
45 int FilePrinter::doPrintFiles( QPrinter &printer, QStringList fileList, FileDeletePolicy fileDeletePolicy,
46  PageSelectPolicy pageSelectPolicy, const QString &pageRange,
47  QPrinter::Orientation documentOrientation )
48 {
49 
50  if ( fileList.size() < 1 ) {
51  return -8;
52  }
53 
54  for (QStringList::ConstIterator it = fileList.constBegin(); it != fileList.constEnd(); ++it) {
55  if (!QFile::exists(*it)) {
56  return -7;
57  }
58  }
59 
60  if ( printer.printerState() == QPrinter::Aborted || printer.printerState() == QPrinter::Error ) {
61  return -6;
62  }
63 
64  QString exe;
65  QStringList argList;
66  int ret;
67 
68  // Print to File if a filename set, assumes there must be only 1 file
69  if ( !printer.outputFileName().isEmpty() ) {
70 
71  if ( QFile::exists( printer.outputFileName() ) ) {
72  QFile::remove( printer.outputFileName() );
73  }
74 
75  QFileInfo inputFileInfo = QFileInfo( fileList[0] );
76  QFileInfo outputFileInfo = QFileInfo( printer.outputFileName() );
77 
78  bool doDeleteFile = (fileDeletePolicy == FilePrinter::SystemDeletesFiles);
79  if ( inputFileInfo.suffix() == outputFileInfo.suffix() ) {
80  if ( doDeleteFile ) {
81  bool res = QFile::rename( fileList[0], printer.outputFileName() );
82  if ( res ) {
83  doDeleteFile = false;
84  ret = 0;
85  } else {
86  ret = -5;
87  }
88  } else {
89  bool res = QFile::copy( fileList[0], printer.outputFileName() );
90  if ( res ) {
91  ret = 0;
92  } else {
93  ret = -5;
94  }
95  }
96  } else if ( inputFileInfo.suffix() == "ps" && printer.outputFormat() == QPrinter::PdfFormat && ps2pdfAvailable() ) {
97  exe = "ps2pdf";
98  argList << fileList[0] << printer.outputFileName();
99  kDebug(OkularDebug) << "Executing" << exe << "with arguments" << argList;
100  ret = KProcess::execute( exe, argList );
101  } else if ( inputFileInfo.suffix() == "pdf" && printer.outputFormat() == QPrinter::PostScriptFormat && pdf2psAvailable() ) {
102  exe = "pdf2ps";
103  argList << fileList[0] << printer.outputFileName();
104  kDebug(OkularDebug) << "Executing" << exe << "with arguments" << argList;
105  ret = KProcess::execute( exe, argList );
106  } else {
107  ret = -5;
108  }
109 
110  if ( doDeleteFile ) {
111  QFile::remove( fileList[0] );
112  }
113 
114 
115  } else { // Print to a printer via lpr command
116 
117  //Decide what executable to use to print with, need the CUPS version of lpr if available
118  //Some distros name the CUPS version of lpr as lpr-cups or lpr.cups so try those first
119  //before default to lpr, or failing that to lp
120 
121  if ( !KStandardDirs::findExe("lpr-cups").isEmpty() ) {
122  exe = "lpr-cups";
123  } else if ( !KStandardDirs::findExe("lpr.cups").isEmpty() ) {
124  exe = "lpr.cups";
125  } else if ( !KStandardDirs::findExe("lpr").isEmpty() ) {
126  exe = "lpr";
127  } else if ( !KStandardDirs::findExe("lp").isEmpty() ) {
128  exe = "lp";
129  } else {
130  return -9;
131  }
132 
133  bool useCupsOptions = cupsAvailable();
134  argList = printArguments( printer, fileDeletePolicy, pageSelectPolicy,
135  useCupsOptions, pageRange, exe, documentOrientation ) << fileList;
136  kDebug(OkularDebug) << "Executing" << exe << "with arguments" << argList;
137 
138  ret = KProcess::execute( exe, argList );
139 
140  }
141 
142  return ret;
143 }
144 
145 QList<int> FilePrinter::pageList( QPrinter &printer, int lastPage, const QList<int> &selectedPageList )
146 {
147  return pageList( printer, lastPage, 0, selectedPageList );
148 }
149 
150 QList<int> FilePrinter::pageList( QPrinter &printer, int lastPage,
151  int currentPage, const QList<int> &selectedPageList )
152 {
153  if ( printer.printRange() == QPrinter::Selection) {
154  return selectedPageList;
155  }
156 
157  int startPage, endPage;
158  QList<int> list;
159 
160  if ( printer.printRange() == QPrinter::PageRange ) {
161  startPage = printer.fromPage();
162  endPage = printer.toPage();
163 #if QT_VERSION >= KDE_MAKE_VERSION(4,7,0)
164  } else if ( printer.printRange() == QPrinter::CurrentPage) {
165  startPage = currentPage;
166  endPage = currentPage;
167 #endif
168  } else { //AllPages
169  startPage = 1;
170  endPage = lastPage;
171  }
172 
173  for (int i = startPage; i <= endPage; i++ ) {
174  list << i;
175  }
176 
177  return list;
178 }
179 
180 QString FilePrinter::pageRange( QPrinter &printer, int lastPage, const QList<int> &selectedPageList )
181 {
182  if ( printer.printRange() == QPrinter::Selection) {
183  return pageListToPageRange( selectedPageList );
184  }
185 
186  if ( printer.printRange() == QPrinter::PageRange ) {
187  return QString("%1-%2").arg(printer.fromPage()).arg(printer.toPage());
188  }
189 
190  return QString("1-%2").arg( lastPage );
191 }
192 
193 QString FilePrinter::pageListToPageRange( const QList<int> &pageList )
194 {
195  QString pageRange;
196  int count = pageList.count();
197  int i = 0;
198  int seqStart = i;
199  int seqEnd;
200 
201  while ( i != count ) {
202 
203  if ( i + 1 == count || pageList[i] + 1 != pageList[i+1] ) {
204 
205  seqEnd = i;
206 
207  if ( !pageRange.isEmpty() ) {
208  pageRange.append(",");
209  }
210 
211  if ( seqStart == seqEnd ) {
212  pageRange.append(pageList[i]);
213  } else {
214  pageRange.append(QString("%1-%2").arg(seqStart).arg(seqEnd));
215  }
216 
217  seqStart = i + 1;
218  }
219 
220  i++;
221  }
222 
223  return pageRange;
224 }
225 
226 bool FilePrinter::ps2pdfAvailable()
227 {
228  return ( !KStandardDirs::findExe("ps2pdf").isEmpty() );
229 }
230 
231 bool FilePrinter::pdf2psAvailable()
232 {
233  return ( !KStandardDirs::findExe("pdf2ps").isEmpty() );
234 }
235 
236 bool FilePrinter::cupsAvailable()
237 {
238 #ifdef Q_WS_X11
239  // Ideally we would have access to the private Qt method
240  // QCUPSSupport::cupsAvailable() to do this as it is very complex routine.
241  // However, if CUPS is available then QPrinter::numCopies() will always return 1
242  // whereas if CUPS is not available it will return the real number of copies.
243  // This behaviour is guaranteed never to change, so we can use it as a reliable substitute.
244  QPrinter testPrinter;
245  testPrinter.setNumCopies( 2 );
246  return ( testPrinter.numCopies() == 1 );
247 #else
248  return false;
249 #endif
250 }
251 
252 bool FilePrinter::detectCupsService()
253 {
254  QTcpSocket qsock;
255  qsock.connectToHost("localhost", 631);
256  bool rtn = qsock.waitForConnected() && qsock.isValid();
257  qsock.abort();
258  return rtn;
259 }
260 
261 bool FilePrinter::detectCupsConfig()
262 {
263  if ( QFile::exists("/etc/cups/cupsd.conf") ) return true;
264  if ( QFile::exists("/usr/etc/cups/cupsd.conf") ) return true;
265  if ( QFile::exists("/usr/local/etc/cups/cupsd.conf") ) return true;
266  if ( QFile::exists("/opt/etc/cups/cupsd.conf") ) return true;
267  if ( QFile::exists("/opt/local/etc/cups/cupsd.conf") ) return true;
268  return false;
269 }
270 
271 QSize FilePrinter::psPaperSize( QPrinter &printer )
272 {
273  QSize size;
274 
275  switch ( printer.pageSize() ) {
276  case QPrinter::A0: size = QSize( 2384, 3370 ); break;
277  case QPrinter::A1: size = QSize( 1684, 2384 ); break;
278  case QPrinter::A2: size = QSize( 1191, 1684 ); break;
279  case QPrinter::A3: size = QSize( 842, 1191 ); break;
280  case QPrinter::A4: size = QSize( 595, 842 ); break;
281  case QPrinter::A5: size = QSize( 420, 595 ); break;
282  case QPrinter::A6: size = QSize( 298, 420 ); break;
283  case QPrinter::A7: size = QSize( 210, 298 ); break;
284  case QPrinter::A8: size = QSize( 147, 210 ); break;
285  case QPrinter::A9: size = QSize( 105, 147 ); break;
286  case QPrinter::B0: size = QSize( 2835, 4008 ); break;
287  case QPrinter::B1: size = QSize( 2004, 2835 ); break;
288  case QPrinter::B2: size = QSize( 1417, 2004 ); break;
289  case QPrinter::B3: size = QSize( 1001, 1417 ); break;
290  case QPrinter::B4: size = QSize( 709, 1001 ); break;
291  case QPrinter::B5: size = QSize( 499, 709 ); break;
292  case QPrinter::B6: size = QSize( 354, 499 ); break;
293  case QPrinter::B7: size = QSize( 249, 354 ); break;
294  case QPrinter::B8: size = QSize( 176, 249 ); break;
295  case QPrinter::B9: size = QSize( 125, 176 ); break;
296  case QPrinter::B10: size = QSize( 88, 125 ); break;
297  case QPrinter::C5E: size = QSize( 459, 649 ); break;
298  case QPrinter::Comm10E: size = QSize( 297, 684 ); break;
299  case QPrinter::DLE: size = QSize( 312, 624 ); break;
300  case QPrinter::Executive: size = QSize( 522, 756 ); break;
301  case QPrinter::Folio: size = QSize( 595, 935 ); break;
302  case QPrinter::Ledger: size = QSize( 1224, 792 ); break;
303  case QPrinter::Legal: size = QSize( 612, 1008 ); break;
304  case QPrinter::Letter: size = QSize( 612, 792 ); break;
305  case QPrinter::Tabloid: size = QSize( 792, 1224 ); break;
306  case QPrinter::Custom: return QSize( (int) printer.widthMM() * ( 25.4 / 72 ),
307  (int) printer.heightMM() * ( 25.4 / 72 ) );
308  default: return QSize();
309  }
310 
311  if ( printer.orientation() == QPrinter::Landscape ) {
312  size.transpose();
313  }
314 
315  return size;
316 }
317 
318 Generator::PrintError FilePrinter::printError( int c )
319 {
320  Generator::PrintError pe;
321  if ( c >= 0 )
322  {
323  pe = Generator::NoPrintError;
324  }
325  else {
326  switch ( c )
327  {
328  case -1:
329  pe = Generator::PrintingProcessCrashPrintError;
330  break;
331  case -2:
332  pe = Generator::PrintingProcessStartPrintError;
333  break;
334  case -5:
335  pe = Generator::PrintToFilePrintError;
336  break;
337  case -6:
338  pe = Generator::InvalidPrinterStatePrintError;
339  break;
340  case -7:
341  pe = Generator::UnableToFindFilePrintError;
342  break;
343  case -8:
344  pe = Generator::NoFileToPrintError;
345  break;
346  case -9:
347  pe = Generator::NoBinaryToPrintError;
348  break;
349  default:
350  pe = Generator::UnknownPrintError;
351  }
352  }
353  return pe;
354 }
355 
356 
357 
358 QStringList FilePrinter::printArguments( QPrinter &printer, FileDeletePolicy fileDeletePolicy,
359  PageSelectPolicy pageSelectPolicy, bool useCupsOptions,
360  const QString &pageRange, const QString &version,
361  QPrinter::Orientation documentOrientation )
362 {
363  QStringList argList;
364 
365  if ( ! destination( printer, version ).isEmpty() ) {
366  argList << destination( printer, version );
367  }
368 
369  if ( ! copies( printer, version ).isEmpty() ) {
370  argList << copies( printer, version );
371  }
372 
373  if ( ! jobname( printer, version ).isEmpty() ) {
374  argList << jobname( printer, version );
375  }
376 
377  if ( ! pages( printer, pageSelectPolicy, pageRange, useCupsOptions, version ).isEmpty() ) {
378  argList << pages( printer, pageSelectPolicy, pageRange, useCupsOptions, version );
379  }
380 
381  if ( useCupsOptions && ! cupsOptions( printer, documentOrientation ).isEmpty() ) {
382  argList << cupsOptions( printer, documentOrientation);
383  }
384 
385  if ( ! deleteFile( printer, fileDeletePolicy, version ).isEmpty() ) {
386  argList << deleteFile( printer, fileDeletePolicy, version );
387  }
388 
389  if ( version == "lp" ) {
390  argList << "--";
391  }
392 
393  return argList;
394 }
395 
396 QStringList FilePrinter::destination( QPrinter &printer, const QString &version )
397 {
398  if ( version == "lp" ) {
399  return QStringList("-d") << printer.printerName();
400  }
401 
402  if ( version.startsWith( "lpr" ) ) {
403  return QStringList("-P") << printer.printerName();
404  }
405 
406  return QStringList();
407 }
408 
409 QStringList FilePrinter::copies( QPrinter &printer, const QString &version )
410 {
411  int cp = printer.actualNumCopies();
412 
413  if ( version == "lp" ) {
414  return QStringList("-n") << QString("%1").arg( cp );
415  }
416 
417  if ( version.startsWith( "lpr" ) ) {
418  return QStringList() << QString("-#%1").arg( cp );
419  }
420 
421  return QStringList();
422 }
423 
424 QStringList FilePrinter::jobname( QPrinter &printer, const QString &version )
425 {
426  if ( ! printer.docName().isEmpty() ) {
427 
428  if ( version == "lp" ) {
429  return QStringList("-t") << printer.docName();
430  }
431 
432  if ( version.startsWith( "lpr" ) ) {
433  const QString shortenedDocName = QString::fromUtf8(printer.docName().toUtf8().left(255));
434  return QStringList("-J") << shortenedDocName;
435  }
436  }
437 
438  return QStringList();
439 }
440 
441 QStringList FilePrinter::deleteFile( QPrinter &, FileDeletePolicy fileDeletePolicy, const QString &version )
442 {
443  if ( fileDeletePolicy == FilePrinter::SystemDeletesFiles && version.startsWith( "lpr" ) ) {
444  return QStringList("-r");
445  }
446 
447  return QStringList();
448 }
449 
450 QStringList FilePrinter::pages( QPrinter &printer, PageSelectPolicy pageSelectPolicy, const QString &pageRange,
451  bool useCupsOptions, const QString &version )
452 {
453  if ( pageSelectPolicy == FilePrinter::SystemSelectsPages ) {
454 
455  if ( printer.printRange() == QPrinter::Selection && ! pageRange.isEmpty() ) {
456 
457  if ( version == "lp" ) {
458  return QStringList("-P") << pageRange ;
459  }
460 
461  if ( version.startsWith( "lpr" ) && useCupsOptions ) {
462  return QStringList("-o") << QString("page-ranges=%1").arg( pageRange );
463  }
464 
465  }
466 
467  if ( printer.printRange() == QPrinter::PageRange ) {
468 
469  if ( version == "lp" ) {
470  return QStringList("-P") << QString("%1-%2").arg( printer.fromPage() )
471  .arg( printer.toPage() );
472  }
473 
474  if ( version.startsWith( "lpr" ) && useCupsOptions ) {
475  return QStringList("-o") << QString("page-ranges=%1-%2").arg( printer.fromPage() )
476  .arg( printer.toPage() );
477  }
478 
479  }
480 
481  }
482 
483  return QStringList(); // AllPages
484 }
485 
486 QStringList FilePrinter::cupsOptions( QPrinter &printer, QPrinter::Orientation documentOrientation )
487 {
488  QStringList optionList;
489 
490  if ( ! optionMedia( printer ).isEmpty() ) {
491  optionList << optionMedia( printer );
492  }
493 
494  if ( ! optionOrientation( printer, documentOrientation ).isEmpty() ) {
495  optionList << optionOrientation( printer, documentOrientation );
496  }
497 
498  if ( ! optionDoubleSidedPrinting( printer ).isEmpty() ) {
499  optionList << optionDoubleSidedPrinting( printer );
500  }
501 
502  if ( ! optionPageOrder( printer ).isEmpty() ) {
503  optionList << optionPageOrder( printer );
504  }
505 
506  if ( ! optionCollateCopies( printer ).isEmpty() ) {
507  optionList << optionCollateCopies( printer );
508  }
509 
510  if ( ! optionPageMargins( printer ).isEmpty() ) {
511  optionList << optionPageMargins( printer );
512  }
513 
514  optionList << optionCupsProperties( printer );
515 
516  return optionList;
517 }
518 
519 QStringList FilePrinter::optionMedia( QPrinter &printer )
520 {
521  if ( ! mediaPageSize( printer ).isEmpty() &&
522  ! mediaPaperSource( printer ).isEmpty() ) {
523  return QStringList("-o") <<
524  QString("media=%1,%2").arg( mediaPageSize( printer ) )
525  .arg( mediaPaperSource( printer ) );
526  }
527 
528  if ( ! mediaPageSize( printer ).isEmpty() ) {
529  return QStringList("-o") <<
530  QString("media=%1").arg( mediaPageSize( printer ) );
531  }
532 
533  if ( ! mediaPaperSource( printer ).isEmpty() ) {
534  return QStringList("-o") <<
535  QString("media=%1").arg( mediaPaperSource( printer ) );
536  }
537 
538  return QStringList();
539 }
540 
541 QString FilePrinter::mediaPageSize( QPrinter &printer )
542 {
543  switch ( printer.pageSize() ) {
544  case QPrinter::A0: return "A0";
545  case QPrinter::A1: return "A1";
546  case QPrinter::A2: return "A2";
547  case QPrinter::A3: return "A3";
548  case QPrinter::A4: return "A4";
549  case QPrinter::A5: return "A5";
550  case QPrinter::A6: return "A6";
551  case QPrinter::A7: return "A7";
552  case QPrinter::A8: return "A8";
553  case QPrinter::A9: return "A9";
554  case QPrinter::B0: return "B0";
555  case QPrinter::B1: return "B1";
556  case QPrinter::B10: return "B10";
557  case QPrinter::B2: return "B2";
558  case QPrinter::B3: return "B3";
559  case QPrinter::B4: return "B4";
560  case QPrinter::B5: return "B5";
561  case QPrinter::B6: return "B6";
562  case QPrinter::B7: return "B7";
563  case QPrinter::B8: return "B8";
564  case QPrinter::B9: return "B9";
565  case QPrinter::C5E: return "C5"; //Correct Translation?
566  case QPrinter::Comm10E: return "Comm10"; //Correct Translation?
567  case QPrinter::DLE: return "DL"; //Correct Translation?
568  case QPrinter::Executive: return "Executive";
569  case QPrinter::Folio: return "Folio";
570  case QPrinter::Ledger: return "Ledger";
571  case QPrinter::Legal: return "Legal";
572  case QPrinter::Letter: return "Letter";
573  case QPrinter::Tabloid: return "Tabloid";
574  case QPrinter::Custom: return QString("Custom.%1x%2mm")
575  .arg( printer.heightMM() )
576  .arg( printer.widthMM() );
577  default: return QString();
578  }
579 }
580 
581 // What about Upper and MultiPurpose? And others in PPD???
582 QString FilePrinter::mediaPaperSource( QPrinter &printer )
583 {
584  switch ( printer.paperSource() ) {
585  case QPrinter::Auto: return QString();
586  case QPrinter::Cassette: return "Cassette";
587  case QPrinter::Envelope: return "Envelope";
588  case QPrinter::EnvelopeManual: return "EnvelopeManual";
589  case QPrinter::FormSource: return "FormSource";
590  case QPrinter::LargeCapacity: return "LargeCapacity";
591  case QPrinter::LargeFormat: return "LargeFormat";
592  case QPrinter::Lower: return "Lower";
593  case QPrinter::MaxPageSource: return "MaxPageSource";
594  case QPrinter::Middle: return "Middle";
595  case QPrinter::Manual: return "Manual";
596  case QPrinter::OnlyOne: return "OnlyOne";
597  case QPrinter::Tractor: return "Tractor";
598  case QPrinter::SmallFormat: return "SmallFormat";
599  default: return QString();
600  }
601 }
602 
603 QStringList FilePrinter::optionOrientation( QPrinter &printer, QPrinter::Orientation documentOrientation )
604 {
605  // portrait and landscape options rotate the document according to the document orientation
606  // If we want to print a landscape document as one would expect it, we have to pass the
607  // portrait option so that the document is not rotated additionally
608  if ( printer.orientation() == documentOrientation ) {
609  // the user wants the document printed as is
610  return QStringList("-o") << "portrait";
611  } else {
612  // the user expects the document being rotated by 90 degrees
613  return QStringList("-o") << "landscape";
614  }
615 }
616 
617 QStringList FilePrinter::optionDoubleSidedPrinting( QPrinter &printer )
618 {
619  switch ( printer.duplex() ) {
620  case QPrinter::DuplexNone: return QStringList("-o") << "sides=one-sided";
621  case QPrinter::DuplexAuto: if ( printer.orientation() == QPrinter::Landscape ) {
622  return QStringList("-o") << "sides=two-sided-short-edge";
623  } else {
624  return QStringList("-o") << "sides=two-sided-long-edge";
625  }
626  case QPrinter::DuplexLongSide: return QStringList("-o") << "sides=two-sided-long-edge";
627  case QPrinter::DuplexShortSide: return QStringList("-o") << "sides=two-sided-short-edge";
628  default: return QStringList(); //Use printer default
629  }
630 }
631 
632 QStringList FilePrinter::optionPageOrder( QPrinter &printer )
633 {
634  if ( printer.pageOrder() == QPrinter::LastPageFirst ) {
635  return QStringList("-o") << "outputorder=reverse";
636  }
637  return QStringList("-o") << "outputorder=normal";
638 }
639 
640 QStringList FilePrinter::optionCollateCopies( QPrinter &printer )
641 {
642  if ( printer.collateCopies() ) {
643  return QStringList("-o") << "Collate=True";
644  }
645  return QStringList("-o") << "Collate=False";
646 }
647 
648 QStringList FilePrinter::optionPageMargins( QPrinter &printer )
649 {
650  if (printer.printEngine()->property(QPrintEngine::PPK_PageMargins).isNull()) {
651  return QStringList();
652  } else {
653  qreal l, t, r, b;
654  printer.getPageMargins( &l, &t, &r, &b, QPrinter::Point );
655  return QStringList("-o") << QString("page-left=%1").arg(l)
656  << "-o" << QString("page-top=%1").arg(t)
657  << "-o" << QString("page-right=%1").arg(r)
658  << "-o" << QString("page-bottom=%1").arg(b) << "-o" << "fit-to-page";
659  }
660 }
661 
662 QStringList FilePrinter::optionCupsProperties( QPrinter &printer )
663 {
664  QStringList dialogOptions = printer.printEngine()->property(QPrintEngine::PrintEnginePropertyKey(0xfe00)).toStringList();
665  QStringList cupsOptions;
666 
667  for ( int i = 0; i < dialogOptions.count(); i = i + 2 ) {
668  if ( dialogOptions[i+1].isEmpty() ) {
669  cupsOptions << "-o" << dialogOptions[i];
670  } else {
671  cupsOptions << "-o" << dialogOptions[i] + '=' + dialogOptions[i+1];
672  }
673  }
674 
675  return cupsOptions;
676 }
677 
678 /* kate: replace-tabs on; indent-width 4; */
Okular::Generator::NoFileToPrintError
Definition: generator.h:360
Okular::FilePrinter::optionOrientation
QStringList optionOrientation(QPrinter &printer, QPrinter::Orientation documentOrientation)
Definition: fileprinter.cpp:603
Okular::FilePrinter::cupsAvailable
static bool cupsAvailable()
Return if CUPS Print System is available on this system.
Definition: fileprinter.cpp:236
Okular::FilePrinter::pageRange
static QString pageRange(QPrinter &printer, int lastPage, const QList< int > &selectedPageList)
Return the range of pages selected by the user in the Print Dialog.
Definition: fileprinter.cpp:180
Okular::FilePrinter::deleteFile
QStringList deleteFile(QPrinter &printer, FileDeletePolicy fileDeletePolicy, const QString &version)
Definition: fileprinter.cpp:441
Okular::FilePrinter::ps2pdfAvailable
static bool ps2pdfAvailable()
Return if Ghostscript ps2pdf is available on this system.
Definition: fileprinter.cpp:226
Okular::Generator::UnknownPrintError
Definition: generator.h:352
Okular::FilePrinter::jobname
QStringList jobname(QPrinter &printer, const QString &version)
Definition: fileprinter.cpp:424
Okular::FilePrinter::PageSelectPolicy
PageSelectPolicy
Whether pages to be printed are selected by the application or the print system.
Definition: fileprinter.h:49
debug_p.h
Okular::Generator::InvalidPrinterStatePrintError
Definition: generator.h:358
Okular::FilePrinter::cupsOptions
QStringList cupsOptions(QPrinter &printer, QPrinter::Orientation documentOrientation)
Definition: fileprinter.cpp:486
Okular::FilePrinter::pages
QStringList pages(QPrinter &printer, PageSelectPolicy pageSelectPolicy, const QString &pageRange, bool useCupsOptions, const QString &version)
Definition: fileprinter.cpp:450
Okular::FilePrinter::optionPageOrder
QStringList optionPageOrder(QPrinter &printer)
Definition: fileprinter.cpp:632
Okular::Generator::NoPrintError
There was no print error.
Definition: generator.h:351
Okular::Generator::PrintingProcessCrashPrintError
Definition: generator.h:355
OkularDebug
#define OkularDebug
Definition: debug_p.h:13
Okular::FilePrinter::doPrintFiles
int doPrintFiles(QPrinter &printer, const QStringList fileList, FileDeletePolicy fileDeletePolicy, PageSelectPolicy pageSelectPolicy, const QString &pageRange, QPrinter::Orientation documentOrientation)
Definition: fileprinter.cpp:45
Okular::FilePrinter::destination
QStringList destination(QPrinter &printer, const QString &version)
Definition: fileprinter.cpp:396
Okular::FilePrinter::optionCollateCopies
QStringList optionCollateCopies(QPrinter &printer)
Definition: fileprinter.cpp:640
Okular::FilePrinter::copies
QStringList copies(QPrinter &printer, const QString &version)
Definition: fileprinter.cpp:409
Okular::FilePrinter::pageListToPageRange
static QString pageListToPageRange(const QList< int > &pageList)
convert a Page List into a Page Range
Definition: fileprinter.cpp:193
Okular::FilePrinter::optionDoubleSidedPrinting
QStringList optionDoubleSidedPrinting(QPrinter &printer)
Definition: fileprinter.cpp:617
Okular::FilePrinter::FileDeletePolicy
FileDeletePolicy
Whether file(s) get deleted by the application or by the print system.
Definition: fileprinter.h:37
Okular::FilePrinter::pageList
static QList< int > pageList(QPrinter &printer, int lastPage, int currentPage, const QList< int > &selectedPageList)
Return the list of pages selected by the user in the Print Dialog.
Definition: fileprinter.cpp:150
Okular::FilePrinter::pdf2psAvailable
static bool pdf2psAvailable()
Return if Ghostscript pdf2ps is available on this system.
Definition: fileprinter.cpp:231
Okular::FilePrinter::optionPageMargins
QStringList optionPageMargins(QPrinter &printer)
Definition: fileprinter.cpp:648
Okular::Generator::PrintingProcessStartPrintError
Definition: generator.h:356
Okular::Generator::PrintToFilePrintError
Definition: generator.h:357
Okular::Generator::PrintError
PrintError
Possible print errors.
Definition: generator.h:349
Okular::FilePrinter::SystemSelectsPages
Definition: fileprinter.h:49
Okular::FilePrinter::optionMedia
QStringList optionMedia(QPrinter &printer)
Definition: fileprinter.cpp:519
fileprinter.h
Okular::FilePrinter::detectCupsService
bool detectCupsService()
Definition: fileprinter.cpp:252
Okular::Generator::NoBinaryToPrintError
Definition: generator.h:361
Okular::Generator::UnableToFindFilePrintError
Definition: generator.h:359
Okular::FilePrinter::printArguments
QStringList printArguments(QPrinter &printer, FileDeletePolicy fileDeletePolicy, PageSelectPolicy pageSelectPolicy, bool useCupsOptions, const QString &pageRange, const QString &version, QPrinter::Orientation documentOrientation)
Definition: fileprinter.cpp:358
Okular::FilePrinter::SystemDeletesFiles
Definition: fileprinter.h:37
Okular::FilePrinter::printFile
static int printFile(QPrinter &printer, const QString file, QPrinter::Orientation documentOrientation, FileDeletePolicy fileDeletePolicy=FilePrinter::ApplicationDeletesFiles, PageSelectPolicy pageSelectPolicy=FilePrinter::ApplicationSelectsPages, const QString &pageRange=QString())
Print a file using the settings in QPrinter.
Definition: fileprinter.cpp:36
Okular::FilePrinter::optionCupsProperties
QStringList optionCupsProperties(QPrinter &printer)
Definition: fileprinter.cpp:662
Okular::FilePrinter::mediaPageSize
QString mediaPageSize(QPrinter &printer)
Definition: fileprinter.cpp:541
Okular::FilePrinter
Definition: fileprinter.h:28
Okular::FilePrinter::printError
static Generator::PrintError printError(int c)
Convert the code returned by printFile* to PrintError.
Definition: fileprinter.cpp:318
Okular::FilePrinter::mediaPaperSource
QString mediaPaperSource(QPrinter &printer)
Definition: fileprinter.cpp:582
Okular::FilePrinter::detectCupsConfig
bool detectCupsConfig()
Definition: fileprinter.cpp:261
version
static const char version[]
Definition: main.cpp:35
Okular::FilePrinter::psPaperSize
static QSize psPaperSize(QPrinter &printer)
Returns the postscript standard page size.
Definition: fileprinter.cpp:271
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:45:02 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

okular

Skip menu "okular"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdegraphics API Reference

Skip menu "kdegraphics API Reference"
  •     libkdcraw
  •     libkexiv2
  •     libkipi
  •     libksane
  • okular

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal