Showing
5 changed files
with
35 additions
and
10 deletions
| @@ -6,7 +6,7 @@ description: > | @@ -6,7 +6,7 @@ description: > | ||
| 6 | homepage: https://github.com/DavBfr/dart_pdf/tree/master/printing | 6 | homepage: https://github.com/DavBfr/dart_pdf/tree/master/printing |
| 7 | repository: https://github.com/DavBfr/dart_pdf | 7 | repository: https://github.com/DavBfr/dart_pdf |
| 8 | issue_tracker: https://github.com/DavBfr/dart_pdf/issues | 8 | issue_tracker: https://github.com/DavBfr/dart_pdf/issues |
| 9 | -version: 5.6.3 | 9 | +version: 5.6.4 |
| 10 | 10 | ||
| 11 | environment: | 11 | environment: |
| 12 | sdk: ">=2.12.0 <3.0.0" | 12 | sdk: ">=2.12.0 <3.0.0" |
| @@ -73,15 +73,29 @@ std::wstring fromUtf8(std::string str) { | @@ -73,15 +73,29 @@ std::wstring fromUtf8(std::string str) { | ||
| 73 | PrintJob::PrintJob(Printing* printing, int index) | 73 | PrintJob::PrintJob(Printing* printing, int index) |
| 74 | : printing{printing}, index{index} {} | 74 | : printing{printing}, index{index} {} |
| 75 | 75 | ||
| 76 | -bool PrintJob::printPdf(std::string name, std::string printer) { | 76 | +bool PrintJob::printPdf(std::string name, |
| 77 | + std::string printer, | ||
| 78 | + double width, | ||
| 79 | + double height) { | ||
| 77 | documentName = name; | 80 | documentName = name; |
| 78 | 81 | ||
| 82 | + auto dm = static_cast<DEVMODE*>(GlobalAlloc(0, sizeof(DEVMODE))); | ||
| 83 | + ZeroMemory(dm, sizeof(DEVMODE)); | ||
| 84 | + dm->dmSize = sizeof(DEVMODE); | ||
| 85 | + dm->dmFields = DM_ORIENTATION | DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH; | ||
| 86 | + dm->dmPaperSize = 0; | ||
| 87 | + if (width > height) { | ||
| 88 | + dm->dmOrientation = DMORIENT_LANDSCAPE; | ||
| 89 | + dm->dmPaperWidth = static_cast<short>(round(height * 254 / 72)); | ||
| 90 | + dm->dmPaperLength = static_cast<short>(round(width * 254 / 72)); | ||
| 91 | + } else { | ||
| 92 | + dm->dmOrientation = DMORIENT_PORTRAIT; | ||
| 93 | + dm->dmPaperWidth = static_cast<short>(round(width * 254 / 72)); | ||
| 94 | + dm->dmPaperLength = static_cast<short>(round(height * 254 / 72)); | ||
| 95 | + } | ||
| 96 | + | ||
| 79 | if (printer.empty()) { | 97 | if (printer.empty()) { |
| 80 | PRINTDLG pd; | 98 | PRINTDLG pd; |
| 81 | - DEVMODE* dm = static_cast<DEVMODE*>(GlobalAlloc(0, sizeof(DEVMODE))); | ||
| 82 | - ZeroMemory(dm, sizeof(DEVMODE)); | ||
| 83 | - dm->dmFields = DM_ORIENTATION; | ||
| 84 | - dm->dmOrientation = 2; | ||
| 85 | 99 | ||
| 86 | // Initialize PRINTDLG | 100 | // Initialize PRINTDLG |
| 87 | ZeroMemory(&pd, sizeof(pd)); | 101 | ZeroMemory(&pd, sizeof(pd)); |
| @@ -115,11 +129,11 @@ bool PrintJob::printPdf(std::string name, std::string printer) { | @@ -115,11 +129,11 @@ bool PrintJob::printPdf(std::string name, std::string printer) { | ||
| 115 | hDevNames = pd.hDevNames; | 129 | hDevNames = pd.hDevNames; |
| 116 | 130 | ||
| 117 | } else { | 131 | } else { |
| 118 | - hDC = CreateDC(TEXT("WINSPOOL"), fromUtf8(printer).c_str(), NULL, NULL); | 132 | + hDC = CreateDC(TEXT("WINSPOOL"), fromUtf8(printer).c_str(), NULL, dm); |
| 119 | if (!hDC) { | 133 | if (!hDC) { |
| 120 | return false; | 134 | return false; |
| 121 | } | 135 | } |
| 122 | - hDevMode = nullptr; | 136 | + hDevMode = dm; |
| 123 | hDevNames = nullptr; | 137 | hDevNames = nullptr; |
| 124 | } | 138 | } |
| 125 | 139 |
| @@ -71,7 +71,10 @@ class PrintJob { | @@ -71,7 +71,10 @@ class PrintJob { | ||
| 71 | 71 | ||
| 72 | std::vector<Printer> listPrinters(); | 72 | std::vector<Printer> listPrinters(); |
| 73 | 73 | ||
| 74 | - bool printPdf(std::string name, std::string printer); | 74 | + bool printPdf(std::string name, |
| 75 | + std::string printer, | ||
| 76 | + double width, | ||
| 77 | + double height); | ||
| 75 | 78 | ||
| 76 | void writeJob(std::vector<uint8_t> data); | 79 | void writeJob(std::vector<uint8_t> data); |
| 77 | 80 |
| @@ -74,10 +74,14 @@ class PrintingPlugin : public flutter::Plugin { | @@ -74,10 +74,14 @@ class PrintingPlugin : public flutter::Plugin { | ||
| 74 | auto printer = vPrinter != arguments->end() | 74 | auto printer = vPrinter != arguments->end() |
| 75 | ? std::get<std::string>(vPrinter->second) | 75 | ? std::get<std::string>(vPrinter->second) |
| 76 | : std::string{}; | 76 | : std::string{}; |
| 77 | + auto width = std::get<double>( | ||
| 78 | + arguments->find(flutter::EncodableValue("width"))->second); | ||
| 79 | + auto height = std::get<double>( | ||
| 80 | + arguments->find(flutter::EncodableValue("height"))->second); | ||
| 77 | auto vJob = arguments->find(flutter::EncodableValue("job")); | 81 | auto vJob = arguments->find(flutter::EncodableValue("job")); |
| 78 | auto jobNum = vJob != arguments->end() ? std::get<int>(vJob->second) : -1; | 82 | auto jobNum = vJob != arguments->end() ? std::get<int>(vJob->second) : -1; |
| 79 | auto job = new PrintJob{&printing, jobNum}; | 83 | auto job = new PrintJob{&printing, jobNum}; |
| 80 | - auto res = job->printPdf(name, printer); | 84 | + auto res = job->printPdf(name, printer, width, height); |
| 81 | if (!res) { | 85 | if (!res) { |
| 82 | delete job; | 86 | delete job; |
| 83 | } | 87 | } |
-
Please register or login to post a comment