Break out raster-related job attribute adjustments

This commit is contained in:
Anton Thomasson 2021-06-26 13:42:54 +02:00
parent b5ea29b372
commit 197c54671a
2 changed files with 47 additions and 40 deletions

View file

@ -345,9 +345,32 @@ QString targetFormatIfAuto(QString documentFormat, QString mimeType, QJsonArray
return documentFormat; return documentFormat;
} }
void IppPrinter::print(QJsonObject attrs, QString filename) void IppPrinter::adjustRasterSettings(QString documentFormat, QJsonObject& jobAttrs, quint32& HwResX, quint32& HwResY)
{ {
qDebug() << "printing" << filename << attrs; if(documentFormat == Mimer::URF)
{ // Ensure symmetric resolution for URF
if(HwResX < HwResY)
{
HwResY = HwResX;
}
else
{
HwResX = HwResY;
}
if(jobAttrs.contains("printer-resolution"))
{
QJsonObject tmpObj {{"units", getAttrOrDefault(jobAttrs, "printer-resolution").toObject()["units"]},
{"x", (int)HwResX},
{"y", (int)HwResY}};
jobAttrs["printer-resolution"] = QJsonObject { {"tag", IppMsg::Resolution}, {"value", tmpObj} };
}
}
}
void IppPrinter::print(QJsonObject jobAttrs, QString filename)
{
qDebug() << "printing" << filename << jobAttrs;
_progress = ""; _progress = "";
emit progressChanged(); emit progressChanged();
@ -377,10 +400,10 @@ void IppPrinter::print(QJsonObject attrs, QString filename)
QJsonObject o = opAttrs(); QJsonObject o = opAttrs();
o.insert("job-name", QJsonObject {{"tag", IppMsg::NameWithoutLanguage}, {"value", fileinfo.fileName()}}); o.insert("job-name", QJsonObject {{"tag", IppMsg::NameWithoutLanguage}, {"value", fileinfo.fileName()}});
QString PaperSize = getAttrOrDefault(attrs, "media").toString(); QString PaperSize = getAttrOrDefault(jobAttrs, "media").toString();
bool alwaysUseMediaCol = Settings::instance()->alwaysUseMediaCol(); bool alwaysUseMediaCol = Settings::instance()->alwaysUseMediaCol();
if((attrs.contains("media-col") || alwaysUseMediaCol) && attrs.contains("media")) if((jobAttrs.contains("media-col") || alwaysUseMediaCol) && jobAttrs.contains("media"))
{ {
qDebug() << "moving media to media-col" << PaperSize; qDebug() << "moving media to media-col" << PaperSize;
if(!PaperSizes.contains(PaperSize)) if(!PaperSizes.contains(PaperSize))
@ -399,22 +422,22 @@ void IppPrinter::print(QJsonObject attrs, QString filename)
}}; }};
// TODO: make a setter function // TODO: make a setter function
QJsonObject MediaCol = attrs["media-col"].toObject(); QJsonObject MediaCol = jobAttrs["media-col"].toObject();
QJsonObject MediaColValue = MediaCol["value"].toObject(); QJsonObject MediaColValue = MediaCol["value"].toObject();
MediaColValue["media-size"] = Dimensions; MediaColValue["media-size"] = Dimensions;
MediaCol["value"] = MediaColValue; MediaCol["value"] = MediaColValue;
MediaCol["tag"] = IppMsg::BeginCollection; MediaCol["tag"] = IppMsg::BeginCollection;
attrs["media-col"] = MediaCol; jobAttrs["media-col"] = MediaCol;
attrs.remove("media"); jobAttrs.remove("media");
} }
QString documentFormat = getAttrOrDefault(attrs, "document-format").toString(); QString documentFormat = getAttrOrDefault(jobAttrs, "document-format").toString();
qDebug() << "target format:" << documentFormat; qDebug() << "target format:" << documentFormat;
// document-format goes in the op-attrs and not the job-attrs // document-format goes in the op-attrs and not the job-attrs
o.insert("document-format", QJsonObject {{"tag", IppMsg::MimeMediaType}, {"value", documentFormat}}); o.insert("document-format", QJsonObject {{"tag", IppMsg::MimeMediaType}, {"value", documentFormat}});
attrs.remove("document-format"); jobAttrs.remove("document-format");
documentFormat = targetFormatIfAuto(documentFormat, mimeType, supportedMimeTypes); documentFormat = targetFormatIfAuto(documentFormat, mimeType, supportedMimeTypes);
qDebug() << "adjusted target format:" << documentFormat; qDebug() << "adjusted target format:" << documentFormat;
@ -425,67 +448,49 @@ void IppPrinter::print(QJsonObject attrs, QString filename)
return; return;
} }
qDebug() << "Printing job" << o << attrs; qDebug() << "Printing job" << o << jobAttrs;
QNetworkRequest request = mkReq(); QNetworkRequest request = mkReq();
QJsonValue PrinterResolutionRef = getAttrOrDefault(attrs, "printer-resolution"); QJsonValue PrinterResolutionRef = getAttrOrDefault(jobAttrs, "printer-resolution");
quint32 HwResX = PrinterResolutionRef.toObject()["x"].toInt(); quint32 HwResX = PrinterResolutionRef.toObject()["x"].toInt();
quint32 HwResY = PrinterResolutionRef.toObject()["y"].toInt(); quint32 HwResY = PrinterResolutionRef.toObject()["y"].toInt();
if(documentFormat == Mimer::URF) adjustRasterSettings(documentFormat, jobAttrs, HwResX, HwResY);
{ // Ensure symmetric resolution for URF
if(HwResX < HwResY)
{
HwResY = HwResX;
}
else
{
HwResX = HwResY;
}
if(attrs.contains("printer-resolution")) quint32 Quality = getAttrOrDefault(jobAttrs, "print-quality").toInt();
{
QJsonObject tmpObj {{"units", PrinterResolutionRef.toObject()["units"]},
{"x", (int)HwResX},
{"y", (int)HwResY}};
attrs["printer-resolution"] = QJsonObject { {"tag", IppMsg::Resolution}, {"value", tmpObj} };
}
}
quint32 Quality = getAttrOrDefault(attrs, "print-quality").toInt(); QString PrintColorMode = getAttrOrDefault(jobAttrs, "print-color-mode").toString();
QString PrintColorMode = getAttrOrDefault(attrs, "print-color-mode").toString();
quint32 Colors = PrintColorMode.contains("color") ? 3 : PrintColorMode.contains("monochrome") ? 1 : 0; quint32 Colors = PrintColorMode.contains("color") ? 3 : PrintColorMode.contains("monochrome") ? 1 : 0;
bool pdfPageRangeAdjustNeeded = false; bool pdfPageRangeAdjustNeeded = false;
quint32 PageRangeLow = 0; quint32 PageRangeLow = 0;
quint32 PageRangeHigh = 0; quint32 PageRangeHigh = 0;
if(attrs.contains("page-ranges")) if(jobAttrs.contains("page-ranges"))
{ {
QJsonObject PageRanges = getAttrOrDefault(attrs, "page-ranges").toObject(); QJsonObject PageRanges = getAttrOrDefault(jobAttrs, "page-ranges").toObject();
PageRangeLow = PageRanges["low"].toInt(); PageRangeLow = PageRanges["low"].toInt();
PageRangeHigh = PageRanges["high"].toInt(); PageRangeHigh = PageRanges["high"].toInt();
} }
QString Sides = getAttrOrDefault(attrs, "sides").toString(); QString Sides = getAttrOrDefault(jobAttrs, "sides").toString();
if(documentFormat == Mimer::PWG || documentFormat == Mimer::URF || documentFormat == Mimer::Postscript || Mimer::isOffice(mimeType)) if(documentFormat == Mimer::PWG || documentFormat == Mimer::URF || documentFormat == Mimer::Postscript || Mimer::isOffice(mimeType))
{ // Effected locally { // Effected locally
attrs.remove("page-ranges"); jobAttrs.remove("page-ranges");
} }
else if (documentFormat == Mimer::PDF) else if (documentFormat == Mimer::PDF)
{ // Only effected locally if really needed { // Only effected locally if really needed
if(attrs.contains("page-ranges") && !_attrs.contains("page-ranges-supported")) if(jobAttrs.contains("page-ranges") && !_attrs.contains("page-ranges-supported"))
{ {
pdfPageRangeAdjustNeeded = true; pdfPageRangeAdjustNeeded = true;
attrs.remove("page-ranges"); jobAttrs.remove("page-ranges");
} }
} }
qDebug() << "Final op attributes:" << o; qDebug() << "Final op attributes:" << o;
qDebug() << "Final job attributes:" << attrs; qDebug() << "Final job attributes:" << jobAttrs;
IppMsg job = mk_msg(o, attrs); IppMsg job = mk_msg(o, jobAttrs);
QByteArray contents = job.encode(IppMsg::PrintJob); QByteArray contents = job.encode(IppMsg::PrintJob);
// Non-jpeg images, Postscript and PDF (when not adjusting pages locally) // Non-jpeg images, Postscript and PDF (when not adjusting pages locally)

View file

@ -92,6 +92,8 @@ private:
QJsonObject opAttrs(); QJsonObject opAttrs();
void adjustRasterSettings(QString documentFormat, QJsonObject& jobAttrs, quint32& HwResX, quint32& HwResY);
void setBusyMessage(QString msg); void setBusyMessage(QString msg);
void setProgress(qint64 sent, qint64 total); void setProgress(qint64 sent, qint64 total);