Deepak
Committed by David PHAM-VAN

Improve Android page format detection

1 # Changelog 1 # Changelog
2 2
  3 +## 5.2.0
  4 +
  5 +- Improve Android page format detection [Deepak]
  6 +
3 ## 5.1.0 7 ## 5.1.0
4 8
5 - Fix PdfPreview timer dispose [wwl901215] 9 - Fix PdfPreview timer dispose [wwl901215]
@@ -194,13 +194,129 @@ public class PrintingJob extends PrintDocumentAdapter { @@ -194,13 +194,129 @@ public class PrintingJob extends PrintDocumentAdapter {
194 jobName = name; 194 jobName = name;
195 195
196 PrintAttributes.Builder attrBuilder = new PrintAttributes.Builder(); 196 PrintAttributes.Builder attrBuilder = new PrintAttributes.Builder();
197 - if (width > height) {  
198 - attrBuilder.setMediaSize(PrintAttributes.MediaSize.UNKNOWN_LANDSCAPE); 197 +
  198 + int widthMils = Double.valueOf(width * 1000.0 / 72.0).intValue();
  199 + int heightMils = Double.valueOf(height * 1000.0 / 72.0).intValue();
  200 +
  201 + PrintAttributes.MediaSize mediaSize = null;
  202 + boolean isPortrait = heightMils >= widthMils;
  203 +
  204 + // get the media size from predefined media sizes
  205 + for (PrintAttributes.MediaSize size : getAllPredefinedSizes()) {
  206 + // https://github.com/DavBfr/dart_pdf/issues/635
  207 + int err = 20;
  208 + PrintAttributes.MediaSize m = isPortrait ? size.asPortrait() : size.asLandscape();
  209 + if ((widthMils + err) >= m.getWidthMils() && (widthMils - err) <= m.getWidthMils() &&
  210 + (heightMils + err) >= m.getHeightMils() && (heightMils - err) <= m.getHeightMils()) {
  211 + mediaSize = m;
  212 + break;
  213 + }
  214 + }
  215 +
  216 + if (mediaSize == null) {
  217 + mediaSize = isPortrait ? PrintAttributes.MediaSize.UNKNOWN_PORTRAIT : PrintAttributes.MediaSize.UNKNOWN_LANDSCAPE;
199 } 218 }
  219 +
  220 + attrBuilder.setMediaSize(mediaSize);
200 PrintAttributes attrib = attrBuilder.build(); 221 PrintAttributes attrib = attrBuilder.build();
201 printJob = printManager.print(name, this, attrib); 222 printJob = printManager.print(name, this, attrib);
202 } 223 }
203 224
  225 + List<PrintAttributes.MediaSize> getAllPredefinedSizes() {
  226 + List<PrintAttributes.MediaSize> sizes = new ArrayList<>();
  227 +
  228 + // ISO sizes
  229 + sizes.add(PrintAttributes.MediaSize.ISO_A0);
  230 + sizes.add(PrintAttributes.MediaSize.ISO_A1);
  231 + sizes.add(PrintAttributes.MediaSize.ISO_A2);
  232 + sizes.add(PrintAttributes.MediaSize.ISO_A3);
  233 + sizes.add(PrintAttributes.MediaSize.ISO_A4);
  234 + sizes.add(PrintAttributes.MediaSize.ISO_A5);
  235 + sizes.add(PrintAttributes.MediaSize.ISO_A6);
  236 + sizes.add(PrintAttributes.MediaSize.ISO_A7);
  237 + sizes.add(PrintAttributes.MediaSize.ISO_A8);
  238 + sizes.add(PrintAttributes.MediaSize.ISO_A9);
  239 + sizes.add(PrintAttributes.MediaSize.ISO_A10);
  240 + sizes.add(PrintAttributes.MediaSize.ISO_B0);
  241 + sizes.add(PrintAttributes.MediaSize.ISO_B1);
  242 + sizes.add(PrintAttributes.MediaSize.ISO_B2);
  243 + sizes.add(PrintAttributes.MediaSize.ISO_B3);
  244 + sizes.add(PrintAttributes.MediaSize.ISO_B4);
  245 + sizes.add(PrintAttributes.MediaSize.ISO_B5);
  246 + sizes.add(PrintAttributes.MediaSize.ISO_B6);
  247 + sizes.add(PrintAttributes.MediaSize.ISO_B7);
  248 + sizes.add(PrintAttributes.MediaSize.ISO_B8);
  249 + sizes.add(PrintAttributes.MediaSize.ISO_B9);
  250 + sizes.add(PrintAttributes.MediaSize.ISO_B10);
  251 + sizes.add(PrintAttributes.MediaSize.ISO_C0);
  252 + sizes.add(PrintAttributes.MediaSize.ISO_C1);
  253 + sizes.add(PrintAttributes.MediaSize.ISO_C2);
  254 + sizes.add(PrintAttributes.MediaSize.ISO_C3);
  255 + sizes.add(PrintAttributes.MediaSize.ISO_C4);
  256 + sizes.add(PrintAttributes.MediaSize.ISO_C5);
  257 + sizes.add(PrintAttributes.MediaSize.ISO_C6);
  258 + sizes.add(PrintAttributes.MediaSize.ISO_C7);
  259 + sizes.add(PrintAttributes.MediaSize.ISO_C8);
  260 + sizes.add(PrintAttributes.MediaSize.ISO_C9);
  261 + sizes.add(PrintAttributes.MediaSize.ISO_C10);
  262 +
  263 + // North America
  264 + sizes.add(PrintAttributes.MediaSize.NA_LETTER);
  265 + sizes.add(PrintAttributes.MediaSize.NA_GOVT_LETTER);
  266 + sizes.add(PrintAttributes.MediaSize.NA_LEGAL);
  267 + sizes.add(PrintAttributes.MediaSize.NA_JUNIOR_LEGAL);
  268 + sizes.add(PrintAttributes.MediaSize.NA_LEDGER);
  269 + sizes.add(PrintAttributes.MediaSize.NA_TABLOID);
  270 + sizes.add(PrintAttributes.MediaSize.NA_INDEX_3X5);
  271 + sizes.add(PrintAttributes.MediaSize.NA_INDEX_4X6);
  272 + sizes.add(PrintAttributes.MediaSize.NA_INDEX_5X8);
  273 + sizes.add(PrintAttributes.MediaSize.NA_MONARCH);
  274 + sizes.add(PrintAttributes.MediaSize.NA_QUARTO);
  275 + sizes.add(PrintAttributes.MediaSize.NA_FOOLSCAP);
  276 +
  277 + // Chinese
  278 + sizes.add(PrintAttributes.MediaSize.ROC_8K);
  279 + sizes.add(PrintAttributes.MediaSize.ROC_16K);
  280 + sizes.add(PrintAttributes.MediaSize.PRC_1);
  281 + sizes.add(PrintAttributes.MediaSize.PRC_2);
  282 + sizes.add(PrintAttributes.MediaSize.PRC_3);
  283 + sizes.add(PrintAttributes.MediaSize.PRC_4);
  284 + sizes.add(PrintAttributes.MediaSize.PRC_5);
  285 + sizes.add(PrintAttributes.MediaSize.PRC_6);
  286 + sizes.add(PrintAttributes.MediaSize.PRC_7);
  287 + sizes.add(PrintAttributes.MediaSize.PRC_8);
  288 + sizes.add(PrintAttributes.MediaSize.PRC_9);
  289 + sizes.add(PrintAttributes.MediaSize.PRC_10);
  290 + sizes.add(PrintAttributes.MediaSize.PRC_16K);
  291 + sizes.add(PrintAttributes.MediaSize.OM_PA_KAI);
  292 + sizes.add(PrintAttributes.MediaSize.OM_DAI_PA_KAI);
  293 + sizes.add(PrintAttributes.MediaSize.OM_JUURO_KU_KAI);
  294 +
  295 + // Japanese
  296 + sizes.add(PrintAttributes.MediaSize.JIS_B10);
  297 + sizes.add(PrintAttributes.MediaSize.JIS_B9);
  298 + sizes.add(PrintAttributes.MediaSize.JIS_B8);
  299 + sizes.add(PrintAttributes.MediaSize.JIS_B7);
  300 + sizes.add(PrintAttributes.MediaSize.JIS_B6);
  301 + sizes.add(PrintAttributes.MediaSize.JIS_B5);
  302 + sizes.add(PrintAttributes.MediaSize.JIS_B4);
  303 + sizes.add(PrintAttributes.MediaSize.JIS_B3);
  304 + sizes.add(PrintAttributes.MediaSize.JIS_B2);
  305 + sizes.add(PrintAttributes.MediaSize.JIS_B1);
  306 + sizes.add(PrintAttributes.MediaSize.JIS_B0);
  307 + sizes.add(PrintAttributes.MediaSize.JIS_EXEC);
  308 + sizes.add(PrintAttributes.MediaSize.JPN_CHOU4);
  309 + sizes.add(PrintAttributes.MediaSize.JPN_CHOU3);
  310 + sizes.add(PrintAttributes.MediaSize.JPN_CHOU2);
  311 + sizes.add(PrintAttributes.MediaSize.JPN_HAGAKI);
  312 + sizes.add(PrintAttributes.MediaSize.JPN_OUFUKU);
  313 + sizes.add(PrintAttributes.MediaSize.JPN_KAHU);
  314 + sizes.add(PrintAttributes.MediaSize.JPN_KAKU2);
  315 + sizes.add(PrintAttributes.MediaSize.JPN_YOU4);
  316 +
  317 + return sizes;
  318 + }
  319 +
204 void cancelJob(String message) { 320 void cancelJob(String message) {
205 if (callback != null) callback.onLayoutCancelled(); 321 if (callback != null) callback.onLayoutCancelled();
206 if (printJob != null) printJob.cancel(); 322 if (printJob != null) printJob.cancel();
@@ -7,7 +7,7 @@ description: > @@ -7,7 +7,7 @@ description: >
7 homepage: https://github.com/DavBfr/dart_pdf/tree/master/printing 7 homepage: https://github.com/DavBfr/dart_pdf/tree/master/printing
8 repository: https://github.com/DavBfr/dart_pdf 8 repository: https://github.com/DavBfr/dart_pdf
9 issue_tracker: https://github.com/DavBfr/dart_pdf/issues 9 issue_tracker: https://github.com/DavBfr/dart_pdf/issues
10 -version: 5.1.0 10 +version: 5.2.0
11 11
12 environment: 12 environment:
13 sdk: ">=2.12.0-0 <3.0.0" 13 sdk: ">=2.12.0-0 <3.0.0"