Alban
Committed by David PHAM-VAN

fix: resolve driver compatibility issues

@@ -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;