Committed by
David PHAM-VAN
fix: resolve driver compatibility issues
Showing
1 changed file
with
10 additions
and
2 deletions
| @@ -81,13 +81,21 @@ bool PrintJob::printPdf(const std::string& name, | @@ -81,13 +81,21 @@ bool PrintJob::printPdf(const std::string& name, | ||
| 81 | bool usePrinterSettings) { | 81 | bool usePrinterSettings) { |
| 82 | documentName = name; | 82 | documentName = name; |
| 83 | 83 | ||
| 84 | - auto dm = static_cast<DEVMODE*>(GlobalAlloc(0, sizeof(DEVMODE))); | 84 | + std::size_t dmSize = sizeof(DEVMODE); |
| 85 | + std::size_t dmExtra = 0; | ||
| 86 | + | ||
| 87 | + if(!printer.empty()){ | ||
| 88 | + dmExtra = DeviceCapabilities(fromUtf8(printer).c_str(), NULL, DC_EXTRA, NULL, NULL); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + auto dm = static_cast<DEVMODE*>(GlobalAlloc(0, dmSize + dmExtra)); | ||
| 85 | 92 | ||
| 86 | if (usePrinterSettings) { | 93 | if (usePrinterSettings) { |
| 87 | dm = nullptr; // to use default driver config | 94 | dm = nullptr; // to use default driver config |
| 88 | } else { | 95 | } else { |
| 89 | ZeroMemory(dm, sizeof(DEVMODE)); | 96 | ZeroMemory(dm, sizeof(DEVMODE)); |
| 90 | - dm->dmSize = sizeof(DEVMODE); | 97 | + dm->dmSize = (WORD)dmSize; |
| 98 | + dm->dmDriverExtra = (WORD)dmExtra; | ||
| 91 | dm->dmFields = | 99 | dm->dmFields = |
| 92 | DM_ORIENTATION | DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH; | 100 | DM_ORIENTATION | DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH; |
| 93 | dm->dmPaperSize = 0; | 101 | dm->dmPaperSize = 0; |
-
Please register or login to post a comment