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