20QString stringifyOhosNativePrintReturn(
std::int32_t retVal)
22 QString s = QString(
"%1 : ").arg(retVal);
25 case ::PRINT_ERROR_NONE:
26 s += QStringLiteral(
"Ok");
28 case ::PRINT_ERROR_NO_PERMISSION:
29 s += QStringLiteral(
"No Permission");
31 case ::PRINT_ERROR_INVALID_PARAMETER:
32 s += QStringLiteral(
"Invalid Parameter");
34 case ::PRINT_ERROR_GENERIC_FAILURE:
35 s += QStringLiteral(
"Printing Failure");
37 case ::PRINT_ERROR_RPC_FAILURE:
38 s += QStringLiteral(
"RPC Failure");
40 case ::PRINT_ERROR_SERVER_FAILURE:
41 s += QStringLiteral(
"Print Service Failure");
43 case ::PRINT_ERROR_INVALID_EXTENSION:
44 s += QStringLiteral(
"Invalid Printer Extension");
46 case ::PRINT_ERROR_INVALID_PRINTER:
47 s += QStringLiteral(
"Invalid Printer");
49 case ::PRINT_ERROR_INVALID_PRINT_JOB:
50 s += QStringLiteral(
"Invalid Print Job");
52 case ::PRINT_ERROR_FILE_IO:
53 s += QStringLiteral(
"Incorrect File I/O");
56 s += QStringLiteral(
"Unknown");
62QDebug operator<<(QDebug d, Print_Resolution nativePrintResolution)
64 const QDebugStateSaver saver(d);
65 d.nospace() <<
"Print_Resolution(" << nativePrintResolution.horizontalDpi <<
" x "
66 << nativePrintResolution.verticalDpi <<
" dpi)";
70PageSize convertNativeToOhosPageSize(Print_PageSize nativePageSize)
74 pageSize.id = QString::fromUtf8(nativePageSize.id);
75 pageSize.name = QString::fromUtf8(nativePageSize.name);
76 pageSize.width = nativePageSize.width;
77 pageSize.height = nativePageSize.height;
83 Print_PrinterCapability nativeCapabilities)
87 for (quint32 i = 0; i < nativeCapabilities.supportedColorModesCount; i++)
88 capabilities.supportedColorModes << nativeCapabilities.supportedColorModes[i];
89 for (quint32 i = 0; i < nativeCapabilities.supportedDuplexModesCount; i++)
90 capabilities.supportedDuplexModes << nativeCapabilities.supportedDuplexModes[i];
91 capabilities.supportedMediaTypes = QString::fromUtf8(nativeCapabilities.supportedMediaTypes);
92 for (quint32 i = 0; i < nativeCapabilities.supportedQualitiesCount; i++)
93 capabilities.supportedQualities << nativeCapabilities.supportedQualities[i];
94 capabilities.supportedPaperSources
95 = QString::fromUtf8(nativeCapabilities.supportedPaperSources);
96 capabilities.supportedCopies = nativeCapabilities.supportedCopies;
97 for (quint32 i = 0; i < nativeCapabilities.supportedResolutionsCount; i++)
98 capabilities.supportedResolutions << nativeCapabilities.supportedResolutions[i];
99 for (quint32 i = 0; i < nativeCapabilities.supportedOrientationsCount; i++)
100 capabilities.supportedOrientations << nativeCapabilities.supportedOrientations[i];
101 capabilities.advancedCapabilities = QString::fromUtf8(nativeCapabilities.advancedCapability);
102 for (quint32 i = 0; i < nativeCapabilities.supportedPageSizesCount; i++) {
103 capabilities.supportedPageSizes
104 << convertNativeToOhosPageSize(nativeCapabilities.supportedPageSizes[i]);
110PrinterDefaultValues convertNativeToOhosPrinterDefaultValue(Print_DefaultValue nativeDefaultValues)
114 defaultValues.colorMode = nativeDefaultValues.defaultColorMode;
115 defaultValues.duplexMode = nativeDefaultValues.defaultDuplexMode;
116 defaultValues.mediaType = QString::fromUtf8(nativeDefaultValues.defaultMediaType);
117 defaultValues.pageSizeId = QString::fromUtf8(nativeDefaultValues.defaultPageSizeId);
118 defaultValues.margin = nativeDefaultValues.defaultMargin;
119 defaultValues.paperSource = QString::fromUtf8(nativeDefaultValues.defaultPaperSource);
120 defaultValues.printQuality = nativeDefaultValues.defaultPrintQuality;
121 defaultValues.copies = nativeDefaultValues.defaultCopies;
122 defaultValues.resolution = nativeDefaultValues.defaultResolution;
123 defaultValues.orientation = nativeDefaultValues.defaultOrientation;
124 defaultValues.otherDefaultValues = QString::fromUtf8(nativeDefaultValues.otherDefaultValues);
126 return defaultValues;
129PrinterInfo convertNativeToOhosPrinterInfo(Print_PrinterInfo nativePrinterInfo)
133 printerInfo.state = nativePrinterInfo.printerState;
134 printerInfo.capabilities = convertNativeToOhosPrinterCapability(nativePrinterInfo.capability);
135 printerInfo.defaultValues
136 = convertNativeToOhosPrinterDefaultValue(nativePrinterInfo.defaultValue);
137 printerInfo
.isDefault = nativePrinterInfo.isDefaultPrinter;
138 printerInfo.id = QString::fromUtf8(nativePrinterInfo.printerId);
139 printerInfo.name = QString::fromUtf8(nativePrinterInfo.printerName);
140 printerInfo.description = QString::fromUtf8(nativePrinterInfo.description);
141 printerInfo.location = QString::fromUtf8(nativePrinterInfo.location);
142 printerInfo.makeAndModel = QString::fromUtf8(nativePrinterInfo.makeAndModel);
143 printerInfo.uri = QString::fromUtf8(nativePrinterInfo.printerUri);
144 printerInfo.detailedInfo = QString::fromUtf8(nativePrinterInfo.detailInfo);
153 qOhosDebug(QtForOhos) <<
"Connecting NativePrint Printer with deviceId =" << deviceId;
154 std::int32_t ret = OH_Print_ConnectPrinter(deviceId.toStdString().c_str());
155 if (ret != ::PRINT_ERROR_NONE) {
156 qOhosCritical(QtForOhos) <<
"Failed to connect printer with id \"" << deviceId <<
"\", reason: " << stringifyOhosNativePrintReturn(ret);
164 qOhosDebug(QtForOhos) <<
"Starting NativePrint PrintJob";
165 qOhosDebug(QtForOhos) <<
"NativePrintJob.printerId =" << job.printerId;
166 qOhosDebug(QtForOhos) <<
"NativePrintJob.resolution =" << job.resolution;
167 qOhosDebug(QtForOhos) <<
"NativePrintJob.copies =" << job.copyNumber;
168 qOhosDebug(QtForOhos) <<
"NativePrintJob.paperSource =" << job.paperSource;
169 qOhosDebug(QtForOhos) <<
"NativePrintJob.pageSizeId = " << job.pageSizeId;
170 qOhosDebug(QtForOhos) <<
"NativePrintJob.colorMode =" << job.colorMode;
171 qOhosDebug(QtForOhos) <<
"NativePrintJob.duplexMode =" << job.duplexMode;
172 qOhosDebug(QtForOhos) <<
"NativePrintJob.advancedOptions =" << job.advancedOptions;
173 for (
int i = 0; i <
static_cast<
int>(job.fdListCount); ++i)
174 qOhosWarning(QtForOhos) <<
"NativePrintJob.fd[" << i <<
"] =" << job.fdList[i];
176 std::int32_t ret = OH_Print_StartPrintJob(&job);
177 if (ret != ::PRINT_ERROR_NONE) {
178 qOhosCritical(QtForOhos) <<
"Failed to start print job, reason:" << stringifyOhosNativePrintReturn(ret);
186 qOhosDebug(QtForOhos) <<
"Querying Printer Id List";
188 Print_StringList nativePrinterIdList;
189 std::int32_t ret = OH_Print_QueryPrinterList(&nativePrinterIdList);
190 if (ret != ::PRINT_ERROR_NONE) {
191 qOhosCritical(QtForOhos) <<
"Failed to query printer id list, reason:"
192 << stringifyOhosNativePrintReturn(ret);
196 for (
std::uint32_t i = 0; i < nativePrinterIdList.count; i++) {
197 if (nativePrinterIdList.list[i])
198 printerIdList << QString::fromUtf8(nativePrinterIdList.list[i]);
201 OH_Print_ReleasePrinterList(&nativePrinterIdList);
208 qOhosDebug(QtForOhos) <<
"Querying Printer Info";
210 Print_PrinterInfo *nativePrinterInfo =
nullptr;
214 = OH_Print_QueryPrinterInfo(printerId.toUtf8().constData(), &nativePrinterInfo);
215 if (ret != ::PRINT_ERROR_NONE) {
216 qOhosCritical(QtForOhos) <<
"Failed to query printer info, reason:"
217 << stringifyOhosNativePrintReturn(ret);
221 Q_ASSERT(nativePrinterInfo !=
nullptr);
222 printerInfo = convertNativeToOhosPrinterInfo(*nativePrinterInfo);
223 OH_Print_ReleasePrinterInfo(nativePrinterInfo);
230 qOhosDebug(QtForOhos) <<
"Initializing Print Service";
231 std::int32_t ret = OH_Print_Init();
232 if (ret != ::PRINT_ERROR_NONE) {
233 qOhosCritical(QtForOhos) <<
"Failed to initialize print service, reason:"
234 << stringifyOhosNativePrintReturn(ret);
242 qOhosDebug(QtForOhos) <<
"Releasing Print Service";
243 std::int32_t ret = OH_Print_Release();
244 if (ret != ::PRINT_ERROR_NONE) {
245 qOhosCritical(QtForOhos) <<
"Failed to release print service, reason:"
246 << stringifyOhosNativePrintReturn(ret);
254 qOhosDebug(QtForOhos) <<
"Launching Printer Manager";
255 std::int32_t ret = OH_Print_LaunchPrinterManager();
256 if (ret != ::PRINT_ERROR_NONE) {
257 qOhosCritical(QtForOhos) <<
"Failed to launch Printer Manager, reason:"
258 << stringifyOhosNativePrintReturn(ret);
266 static constexpr double pixelsPerThousandDpiToMillimeterMultiplier = 2.54 / 0.1 / 1000.0;
267 static constexpr double millimeterToPointsMultiplier = 2.83464566929;
269 auto mm =
std::round(
270 static_cast<
double>(pixelsPerThousandDpi) * pixelsPerThousandDpiToMillimeterMultiplier);
271 auto points =
std::round(mm * millimeterToPointsMultiplier);
273 return static_cast<
int>(points);