diff --git a/ppm2pwg b/ppm2pwg index 66b9eea..a404a17 160000 --- a/ppm2pwg +++ b/ppm2pwg @@ -1 +1 @@ -Subproject commit 66b9eea5a074f08cff948292c07c487a5d90aa78 +Subproject commit a404a177038626765b915ce0cf21527704bffd7e diff --git a/qml/pages/PrinterPage.qml b/qml/pages/PrinterPage.qml index 31686d2..8eab41d 100644 --- a/qml/pages/PrinterPage.qml +++ b/qml/pages/PrinterPage.qml @@ -24,6 +24,13 @@ Page { defaultValue: false } + ConfigurationValue + { + id: removeDuplexAttributesForRaster + key: "/apps/harbour-seaprint/settings/remove_duplex_attribute_for_raster" + defaultValue: false + } + Component.onCompleted: { console.log(JSON.stringify(printer.attrs)) } @@ -40,7 +47,8 @@ Page { console.log(JSON.stringify(jobParams)) pageStack.replace(Qt.resolvedUrl("BusyPage.qml"),{printer:printer}, PageStackAction.Immediate) - printer.print(jobParams, page.selectedFile, alwaysConvert.value, forceIncluDeDocumentFormat.value) + printer.print(jobParams, page.selectedFile, + alwaysConvert.value, forceIncluDeDocumentFormat.value, removeDuplexAttributesForRaster.value) } } } diff --git a/src/convertworker.cpp b/src/convertworker.cpp index 6b1eaef..d962c9e 100644 --- a/src/convertworker.cpp +++ b/src/convertworker.cpp @@ -6,7 +6,7 @@ #include void ppm2PwgEnv(QStringList& env, bool urf, quint32 Quality, QString PaperSize, - quint32 HwResX, quint32 HwResY, bool TwoSided, bool Tumble) + quint32 HwResX, quint32 HwResY, bool TwoSided, bool Tumble, quint32 pages) { env.append("HWRES_X="+QString::number(HwResX)); env.append("HWRES_Y="+QString::number(HwResY)); @@ -29,12 +29,45 @@ void ppm2PwgEnv(QStringList& env, bool urf, quint32 Quality, QString PaperSize, env.append("DUPLEX="+QString::number(TwoSided)); env.append("TUMBLE="+QString::number(Tumble)); + if(pages != 0) + { + env.append("PAGES="+QString::number(pages)); + } + } void ConvertWorker::convertPdf(QNetworkRequest request, QString filename, QTemporaryFile* tempfile, QString targetFormat, quint32 Colors, quint32 Quality, QString PaperSize, quint32 HwResX, quint32 HwResY, bool TwoSided, bool Tumble) { + + QProcess* pdfinfo = new QProcess(this); + pdfinfo->setProgram("pdfinfo"); + pdfinfo->setArguments({filename}); + pdfinfo->start(); + + if(!pdfinfo->waitForStarted() || !pdfinfo->waitForFinished()) + { + qDebug() << "pdfinfo died"; + pdfinfo->deleteLater(); + tempfile->deleteLater(); + emit failed(tr("Failed to get info about PDF file")); + return; + } + QByteArray pdfInfoOutput = pdfinfo->readAllStandardOutput(); + pdfinfo->deleteLater(); + qDebug() << pdfInfoOutput; + QList pdfInfoOutputLines = pdfInfoOutput.split('\n'); + quint32 pages = 0; + for(QList::iterator it = pdfInfoOutputLines.begin(); it != pdfInfoOutputLines.end(); it++) + { + if(it->startsWith("Pages")) + { + QList pagesTokens = it->split(' '); + pages = pagesTokens.last().toInt(); + } + } + bool urf = false; if(targetFormat == "image/urf") @@ -104,7 +137,7 @@ void ConvertWorker::convertPdf(QNetworkRequest request, QString filename, QTempo ppm2pwg->setArguments({"ppm2pwg"}); QStringList env; - ppm2PwgEnv(env, urf, Quality, PaperSize, HwResX, HwResY, TwoSided, Tumble); + ppm2PwgEnv(env, urf, Quality, PaperSize, HwResX, HwResY, TwoSided, Tumble, pages); qDebug() << "ppm2pwg env is " << env; ppm2pwg->setEnvironment(env); @@ -250,7 +283,7 @@ void ConvertWorker::convertImage(QNetworkRequest request, QString filename, QTem ppm2pwg->setArguments({"ppm2pwg"}); QStringList env; - ppm2PwgEnv(env, urf, Quality, PaperSize, HwResX, HwResY, false, false); + ppm2PwgEnv(env, urf, Quality, PaperSize, HwResX, HwResY, false, false, 0); qDebug() << "ppm2pwg env is " << env; ppm2pwg->setEnvironment(env); diff --git a/src/ippprinter.cpp b/src/ippprinter.cpp index b263650..51844d2 100644 --- a/src/ippprinter.cpp +++ b/src/ippprinter.cpp @@ -297,10 +297,11 @@ QString targetFormatIfAuto(QString documentFormat, QString mimeType, QJsonArray return documentFormat; } -// TODO: make alwaysConvert force ratser format -void IppPrinter::print(QJsonObject attrs, QString filename, bool alwaysConvert, bool forceIncluDeDocumentFormat) +void IppPrinter::print(QJsonObject attrs, QString filename, + bool alwaysConvert, bool forceIncluDeDocumentFormat, bool removeDuplexAttributesForRaster) { - qDebug() << "printing" << filename << attrs << alwaysConvert << forceIncluDeDocumentFormat; + qDebug() << "printing" << filename << attrs + << alwaysConvert << forceIncluDeDocumentFormat << removeDuplexAttributesForRaster; _progress = ""; emit progressChanged(); @@ -350,9 +351,6 @@ void IppPrinter::print(QJsonObject attrs, QString filename, bool alwaysConvert, } qDebug() << "Printing job" << o << attrs; - IppMsg job = IppMsg(o, attrs); - - QByteArray contents = job.encode(IppMsg::PrintJob); QNetworkRequest request; @@ -393,6 +391,14 @@ void IppPrinter::print(QJsonObject attrs, QString filename, bool alwaysConvert, return; } + QString Sides = getAttrOrDefault(attrs, "sides").toString(); + if(removeDuplexAttributesForRaster && (documentFormat=="image/pwg-raster" || documentFormat=="image/urf")) + { + attrs.remove("sides"); + } + + IppMsg job = IppMsg(o, attrs); + QByteArray contents = job.encode(IppMsg::PrintJob); // Always convert images to get resizing if((mimeType == documentFormat) && !mimeType.contains("image")) { @@ -418,8 +424,6 @@ void IppPrinter::print(QJsonObject attrs, QString filename, bool alwaysConvert, if(mimeType == "application/pdf") { - - QString Sides = getAttrOrDefault(attrs, "sides").toString(); bool TwoSided = false; bool Tumble = false; if(Sides=="two-sided-long-edge") diff --git a/src/ippprinter.h b/src/ippprinter.h index 6cc11e3..118d911 100644 --- a/src/ippprinter.h +++ b/src/ippprinter.h @@ -55,7 +55,8 @@ signals: void progressChanged(); public slots: - void print(QJsonObject attrs, QString file, bool alwaysConvert, bool forceIncluDeDocumentFormat); + void print(QJsonObject attrs, QString file, + bool alwaysConvert, bool forceIncluDeDocumentFormat, bool removeDuplexAttributesForRaster); void onUrlChanged(); diff --git a/translations/harbour-seaprint-de.ts b/translations/harbour-seaprint-de.ts index 90299e4..60527e1 100644 --- a/translations/harbour-seaprint-de.ts +++ b/translations/harbour-seaprint-de.ts @@ -144,6 +144,10 @@ Unsupported target format + + Failed to get info about PDF file + + CoverPage diff --git a/translations/harbour-seaprint-es.ts b/translations/harbour-seaprint-es.ts index f476009..d9742b8 100644 --- a/translations/harbour-seaprint-es.ts +++ b/translations/harbour-seaprint-es.ts @@ -144,6 +144,10 @@ Unsupported target format + + Failed to get info about PDF file + + CoverPage diff --git a/translations/harbour-seaprint-fr.ts b/translations/harbour-seaprint-fr.ts index f470f0e..2fc0390 100644 --- a/translations/harbour-seaprint-fr.ts +++ b/translations/harbour-seaprint-fr.ts @@ -144,6 +144,10 @@ Unsupported target format + + Failed to get info about PDF file + + CoverPage diff --git a/translations/harbour-seaprint-zh_CN.ts b/translations/harbour-seaprint-zh_CN.ts index f17322e..3ebedfa 100644 --- a/translations/harbour-seaprint-zh_CN.ts +++ b/translations/harbour-seaprint-zh_CN.ts @@ -144,6 +144,10 @@ Unsupported target format + + Failed to get info about PDF file + + CoverPage diff --git a/translations/harbour-seaprint.ts b/translations/harbour-seaprint.ts index b4ce6af..a52e184 100644 --- a/translations/harbour-seaprint.ts +++ b/translations/harbour-seaprint.ts @@ -144,6 +144,10 @@ Unsupported target format + + Failed to get info about PDF file + + CoverPage