19QString stringifyOhosNativePrintReturn(
std::int32_t retVal)
21 QString s = QString(
"%1 : ").arg(retVal);
24 case ::PRINT_ERROR_NONE:
25 s += QStringLiteral(
"Ok");
27 case ::PRINT_ERROR_NO_PERMISSION:
28 s += QStringLiteral(
"No Permission");
30 case ::PRINT_ERROR_INVALID_PARAMETER:
31 s += QStringLiteral(
"Invalid Parameter");
33 case ::PRINT_ERROR_GENERIC_FAILURE:
34 s += QStringLiteral(
"Printing Failure");
36 case ::PRINT_ERROR_RPC_FAILURE:
37 s += QStringLiteral(
"RPC Failure");
39 case ::PRINT_ERROR_SERVER_FAILURE:
40 s += QStringLiteral(
"Print Service Failure");
42 case ::PRINT_ERROR_INVALID_EXTENSION:
43 s += QStringLiteral(
"Invalid Printer Extension");
45 case ::PRINT_ERROR_INVALID_PRINTER:
46 s += QStringLiteral(
"Invalid Printer");
48 case ::PRINT_ERROR_INVALID_PRINT_JOB:
49 s += QStringLiteral(
"Invalid Print Job");
51 case ::PRINT_ERROR_FILE_IO:
52 s += QStringLiteral(
"Incorrect File I/O");
55 s += QStringLiteral(
"Unknown");
61QDebug operator<<(QDebug d, Print_Resolution nativePrintResolution)
63 const QDebugStateSaver saver(d);
64 d.nospace() <<
"Print_Resolution(" << nativePrintResolution.horizontalDpi <<
" x "
65 << nativePrintResolution.verticalDpi <<
" dpi)";
69PageSize convertNativeToOhosPageSize(Print_PageSize nativePageSize)
73 pageSize.id = QString::fromUtf8(nativePageSize.id);
74 pageSize.name = QString::fromUtf8(nativePageSize.name);
75 pageSize.width = nativePageSize.width;
76 pageSize.height = nativePageSize.height;
82 Print_PrinterCapability nativeCapabilities)
86 for (quint32 i = 0; i < nativeCapabilities.supportedColorModesCount; i++)
87 capabilities.supportedColorModes << nativeCapabilities.supportedColorModes[i];
88 for (quint32 i = 0; i < nativeCapabilities.supportedDuplexModesCount; i++)
89 capabilities.supportedDuplexModes << nativeCapabilities.supportedDuplexModes[i];
90 capabilities.supportedMediaTypes = QString::fromUtf8(nativeCapabilities.supportedMediaTypes);
91 for (quint32 i = 0; i < nativeCapabilities.supportedQualitiesCount; i++)
92 capabilities.supportedQualities << nativeCapabilities.supportedQualities[i];
93 capabilities.supportedPaperSources
94 = QString::fromUtf8(nativeCapabilities.supportedPaperSources);
95 capabilities.supportedCopies = nativeCapabilities.supportedCopies;
96 for (quint32 i = 0; i < nativeCapabilities.supportedResolutionsCount; i++)
97 capabilities.supportedResolutions << nativeCapabilities.supportedResolutions[i];
98 for (quint32 i = 0; i < nativeCapabilities.supportedOrientationsCount; i++)
99 capabilities.supportedOrientations << nativeCapabilities.supportedOrientations[i];
100 capabilities.advancedCapabilities = QString::fromUtf8(nativeCapabilities.advancedCapability);
101 for (quint32 i = 0; i < nativeCapabilities.supportedPageSizesCount; i++) {
102 capabilities.supportedPageSizes
103 << convertNativeToOhosPageSize(nativeCapabilities.supportedPageSizes[i]);
109PrinterDefaultValues convertNativeToOhosPrinterDefaultValue(Print_DefaultValue nativeDefaultValues)
113 defaultValues.colorMode = nativeDefaultValues.defaultColorMode;
114 defaultValues.duplexMode = nativeDefaultValues.defaultDuplexMode;
115 defaultValues.mediaType = QString::fromUtf8(nativeDefaultValues.defaultMediaType);
116 defaultValues.pageSizeId = QString::fromUtf8(nativeDefaultValues.defaultPageSizeId);
117 defaultValues.margin = nativeDefaultValues.defaultMargin;
118 defaultValues.paperSource = QString::fromUtf8(nativeDefaultValues.defaultPaperSource);
119 defaultValues.printQuality = nativeDefaultValues.defaultPrintQuality;
120 defaultValues.copies = nativeDefaultValues.defaultCopies;
121 defaultValues.resolution = nativeDefaultValues.defaultResolution;
122 defaultValues.orientation = nativeDefaultValues.defaultOrientation;
123 defaultValues.otherDefaultValues = QString::fromUtf8(nativeDefaultValues.otherDefaultValues);
125 return defaultValues;
128PrinterInfo convertNativeToOhosPrinterInfo(Print_PrinterInfo nativePrinterInfo)
132 printerInfo.state = nativePrinterInfo.printerState;
133 printerInfo.capabilities = convertNativeToOhosPrinterCapability(nativePrinterInfo.capability);
134 printerInfo.defaultValues
135 = convertNativeToOhosPrinterDefaultValue(nativePrinterInfo.defaultValue);
136 printerInfo
.isDefault = nativePrinterInfo.isDefaultPrinter;
137 printerInfo.id = QString::fromUtf8(nativePrinterInfo.printerId);
138 printerInfo.name = QString::fromUtf8(nativePrinterInfo.printerName);
139 printerInfo.description = QString::fromUtf8(nativePrinterInfo.description);
140 printerInfo.location = QString::fromUtf8(nativePrinterInfo.location);
141 printerInfo.makeAndModel = QString::fromUtf8(nativePrinterInfo.makeAndModel);
142 printerInfo.uri = QString::fromUtf8(nativePrinterInfo.printerUri);
143 printerInfo.detailedInfo = QString::fromUtf8(nativePrinterInfo.detailInfo);
152 qOhosDebug(QtForOhos) <<
"Connecting NativePrint Printer with deviceId =" << deviceId;
153 std::int32_t ret = OH_Print_ConnectPrinter(deviceId.toStdString().c_str());
154 if (ret != ::PRINT_ERROR_NONE) {
155 qOhosCritical(QtForOhos) <<
"Failed to connect printer with id \"" << deviceId <<
"\", reason: " << stringifyOhosNativePrintReturn(ret);
163 qOhosDebug(QtForOhos) <<
"Starting NativePrint PrintJob";
164 qOhosDebug(QtForOhos) <<
"NativePrintJob.printerId =" << job.printerId;
165 qOhosDebug(QtForOhos) <<
"NativePrintJob.resolution =" << job.resolution;
166 qOhosDebug(QtForOhos) <<
"NativePrintJob.copies =" << job.copyNumber;
167 qOhosDebug(QtForOhos) <<
"NativePrintJob.paperSource =" << job.paperSource;
168 qOhosDebug(QtForOhos) <<
"NativePrintJob.pageSizeId = " << job.pageSizeId;
169 qOhosDebug(QtForOhos) <<
"NativePrintJob.colorMode =" << job.colorMode;
170 qOhosDebug(QtForOhos) <<
"NativePrintJob.duplexMode =" << job.duplexMode;
171 qOhosDebug(QtForOhos) <<
"NativePrintJob.advancedOptions =" << job.advancedOptions;
172 for (
int i = 0; i <
static_cast<
int>(job.fdListCount); ++i)
173 qOhosWarning(QtForOhos) <<
"NativePrintJob.fd[" << i <<
"] =" << job.fdList[i];
175 std::int32_t ret = OH_Print_StartPrintJob(&job);
176 if (ret != ::PRINT_ERROR_NONE) {
177 qOhosCritical(QtForOhos) <<
"Failed to start print job, reason:" << stringifyOhosNativePrintReturn(ret);
185 qOhosDebug(QtForOhos) <<
"Querying Printer Id List";
187 Print_StringList nativePrinterIdList;
188 std::int32_t ret = OH_Print_QueryPrinterList(&nativePrinterIdList);
189 if (ret != ::PRINT_ERROR_NONE) {
190 qOhosCritical(QtForOhos) <<
"Failed to query printer id list, reason:"
191 << stringifyOhosNativePrintReturn(ret);
195 for (
std::uint32_t i = 0; i < nativePrinterIdList.count; i++) {
196 if (nativePrinterIdList.list[i])
197 printerIdList << QString::fromUtf8(nativePrinterIdList.list[i]);
200 OH_Print_ReleasePrinterList(&nativePrinterIdList);
207 qOhosDebug(QtForOhos) <<
"Querying Printer Info";
209 Print_PrinterInfo *nativePrinterInfo =
nullptr;
213 = OH_Print_QueryPrinterInfo(printerId.toUtf8().constData(), &nativePrinterInfo);
214 if (ret != ::PRINT_ERROR_NONE) {
215 qOhosCritical(QtForOhos) <<
"Failed to query printer info, reason:"
216 << stringifyOhosNativePrintReturn(ret);
220 Q_ASSERT(nativePrinterInfo !=
nullptr);
221 printerInfo = convertNativeToOhosPrinterInfo(*nativePrinterInfo);
222 OH_Print_ReleasePrinterInfo(nativePrinterInfo);
229 qOhosDebug(QtForOhos) <<
"Initializing Print Service";
230 std::int32_t ret = OH_Print_Init();
231 if (ret != ::PRINT_ERROR_NONE) {
232 qOhosCritical(QtForOhos) <<
"Failed to initialize print service, reason:"
233 << stringifyOhosNativePrintReturn(ret);
241 qOhosDebug(QtForOhos) <<
"Releasing Print Service";
242 std::int32_t ret = OH_Print_Release();
243 if (ret != ::PRINT_ERROR_NONE) {
244 qOhosCritical(QtForOhos) <<
"Failed to release print service, reason:"
245 << stringifyOhosNativePrintReturn(ret);
253 qOhosDebug(QtForOhos) <<
"Launching Printer Manager";
254 std::int32_t ret = OH_Print_LaunchPrinterManager();
255 if (ret != ::PRINT_ERROR_NONE) {
256 qOhosCritical(QtForOhos) <<
"Failed to launch Printer Manager, reason:"
257 << stringifyOhosNativePrintReturn(ret);
265 static constexpr double pixelsPerThousandDpiToMillimeterMultiplier = 2.54 / 0.1 / 1000.0;
266 static constexpr double millimeterToPointsMultiplier = 2.83464566929;
268 auto mm =
std::round(
269 static_cast<
double>(pixelsPerThousandDpi) * pixelsPerThousandDpiToMillimeterMultiplier);
270 auto points =
std::round(mm * millimeterToPointsMultiplier);
272 return static_cast<
int>(points);