@@ -14,7 +14,12 @@ import {
14
14
CBOARD_ZIP_OPTIONS ,
15
15
NOT_FOUND_IMAGE ,
16
16
EMPTY_IMAGE ,
17
- PDF_GRID_BORDER
17
+ PDF_GRID_BORDER ,
18
+ PICSEEPAL_GRID_WIDTH ,
19
+ PDF_GRID_WIDTH ,
20
+ PDF_BORDER_WIDTH ,
21
+ PICSEEPAL_IMAGES_WIDTH ,
22
+ PDF_IMAGES_WIDTH
18
23
} from './Export.constants' ;
19
24
import {
20
25
LABEL_POSITION_ABOVE ,
@@ -360,10 +365,10 @@ async function toDataURL(url, styles = {}, outputFormat = 'image/jpeg') {
360
365
pdfMake . tableLayouts = {
361
366
pdfGridLayout : {
362
367
hLineWidth : function ( i , node ) {
363
- return 2 ;
368
+ return PDF_BORDER_WIDTH ;
364
369
} ,
365
370
vLineWidth : function ( i ) {
366
- return 2 ;
371
+ return PDF_BORDER_WIDTH ;
367
372
} ,
368
373
hLineColor : function ( i ) {
369
374
return '#ffffff' ;
@@ -380,21 +385,35 @@ pdfMake.tableLayouts = {
380
385
}
381
386
} ;
382
387
388
+ function getCellWidths ( columns , picsee = false ) {
389
+ const GRID_WIDTH = picsee ? PICSEEPAL_GRID_WIDTH : PDF_GRID_WIDTH ;
390
+ const cellWidht = ( GRID_WIDTH - PDF_BORDER_WIDTH * columns ) / columns ;
391
+ const cellWidths = new Array ( columns ) . fill ( cellWidht ) ;
392
+ return cellWidths ;
393
+ }
394
+
383
395
async function generatePDFBoard ( board , intl , breakPage = true , picsee = false ) {
384
- const header = board . name || '' ;
396
+ const header = {
397
+ absolutePosition : { x : 0 , y : 5 } ,
398
+ text : board . name || '' ,
399
+ alignment : 'center' ,
400
+ fontSize : 8
401
+ } ;
385
402
const columns =
386
403
board . isFixed && board . grid ? board . grid . columns : CBOARD_COLUMNS ;
387
404
const rows = board . isFixed && board . grid ? board . grid . rows : CBOARD_ROWS ;
405
+ const cellWidths = getCellWidths ( columns , picsee ) ;
406
+
388
407
const table = {
389
408
table : {
390
- widths : '*' ,
409
+ widths : cellWidths ,
391
410
body : [ { } ]
392
411
} ,
393
412
layout : 'pdfGridLayout'
394
413
} ;
395
414
396
415
if ( breakPage ) {
397
- table . pageBreak = 'before' ;
416
+ picsee ? ( table . pageBreak = 'before' ) : ( header . pageBreak = 'before' ) ;
398
417
}
399
418
400
419
if ( ! board . tiles || ! board . tiles . length ) {
@@ -507,14 +526,26 @@ async function generateNonFixedBoard(
507
526
// Wait for previous tile
508
527
await prev ;
509
528
currentRow = i >= ( currentRow + 1 ) * columns ? currentRow + 1 : currentRow ;
529
+
530
+ // Add a page break when we reach the maximum number of rows on the
531
+ // current page.
532
+ let pageBreak = false ;
533
+ if (
534
+ ( currentRow + 1 ) % rows === 1 &&
535
+ currentRow + 1 > rows &&
536
+ currentRow !== 0
537
+ ) {
538
+ pageBreak = true ;
539
+ }
540
+
510
541
return await addTileToGrid (
511
542
tile ,
512
543
intl ,
513
544
grid ,
514
545
rows ,
515
546
columns ,
516
547
currentRow ,
517
- false ,
548
+ pageBreak ,
518
549
picsee
519
550
) ;
520
551
} , Promise . resolve ( ) ) ;
@@ -591,59 +622,16 @@ const addTileToGrid = async (
591
622
border : PDF_GRID_BORDER [ labelPosition ] . labelData
592
623
} ;
593
624
594
- if ( picsee ) {
595
- // This scales down images to fit inside PicseePal
596
- // dimensions depending on number of columns
597
- var colImgWidths = {
598
- 1 : 130 ,
599
- 2 : 130 ,
600
- 3 : 80 ,
601
- 4 : 84 ,
602
- 5 : 75 ,
603
- 6 : 60 ,
604
- 7 : 55 ,
605
- 8 : 55 ,
606
- 9 : 45 ,
607
- 10 : 45 ,
608
- 11 : 40 ,
609
- 12 : 37
610
- // max num of columns is 12
611
- } ;
612
- var rowImgWidths = {
613
- 1 : 130 ,
614
- 2 : 130 ,
615
- 3 : 86 ,
616
- 4 : 59 ,
617
- 5 : 45 ,
618
- 6 : 33 ,
619
- 7 : 32 ,
620
- 8 : 26 ,
621
- 9 : 21 ,
622
- 10 : 17 ,
623
- 11 : 14 ,
624
- 12 : 11
625
- // max num of rows is 12
626
- } ;
625
+ const IMG_WIDTH = picsee ? PICSEEPAL_IMAGES_WIDTH : PDF_IMAGES_WIDTH ;
627
626
628
- imageData . width = Math . min ( colImgWidths [ columns ] , rowImgWidths [ rows ] ) ;
627
+ imageData . width = Math . min ( IMG_WIDTH . column [ columns ] , IMG_WIDTH . row [ rows ] ) ;
629
628
630
- if ( imageData . width <= 37 ) {
631
- labelData . fontSize = 7 ;
632
- } else if ( imageData . width <= 40 ) {
633
- labelData . fontSize = 8 ;
634
- } else if ( imageData . width <= 45 ) {
635
- labelData . fontSize = 9 ;
636
- }
637
- } else {
638
- // if not picseepal PDF, then retain old method for computing image widths
639
- if ( 11 === columns || columns === 12 || rows >= 6 ) {
640
- imageData . width = '59' ;
641
- labelData . fontSize = 9 ;
642
- } else if ( 9 === columns || columns === 10 || rows === 5 ) {
643
- imageData . width = '70' ;
644
- } else if ( 7 === columns || columns === 8 ) {
645
- imageData . width = '90' ;
646
- }
629
+ if ( imageData . width <= 37 ) {
630
+ labelData . fontSize = 7 ;
631
+ } else if ( imageData . width <= 40 ) {
632
+ labelData . fontSize = 8 ;
633
+ } else if ( imageData . width <= 45 ) {
634
+ labelData . fontSize = 9 ;
647
635
}
648
636
649
637
let value1 ,
@@ -908,16 +896,17 @@ export async function pdfExportAdapter(boards = [], intl, picsee = false) {
908
896
return {
909
897
stack : [
910
898
{
899
+ absolutePosition : { x : 0 , y : 3 } ,
911
900
text : [
912
901
{
913
902
text : '\nPicseePal compatible PDF' ,
914
903
fontSize : 18 ,
915
- alignment : 'center' ,
916
- bold : true
904
+ alignment : 'center'
917
905
}
918
906
]
919
907
} ,
920
908
{
909
+ absolutePosition : { x : 0 , y : 48 } ,
921
910
canvas : [
922
911
{
923
912
// rectangle showing PicseePal viewable area
@@ -943,6 +932,10 @@ export async function pdfExportAdapter(boards = [], intl, picsee = false) {
943
932
]
944
933
} ,
945
934
{
935
+ absolutePosition : {
936
+ x : 0 ,
937
+ y : 500
938
+ } ,
946
939
text : [
947
940
{
948
941
text : `\nPlease print on A4 / US Letter paper at 100% scale.
@@ -956,13 +949,12 @@ export async function pdfExportAdapter(boards = [], intl, picsee = false) {
956
949
} ;
957
950
} ;
958
951
959
- docDefinition . pageMargins = [ 144 , 93 , 144 , 130 ] ;
952
+ docDefinition . pageMargins = [ 144 , 100 , 144 , 120 ] ;
960
953
}
961
954
962
- const lastBoardIndex = boards . length - 1 ;
963
955
const content = await boards . reduce ( async ( prev , board , i ) => {
964
956
const prevContent = await prev ;
965
- const breakPage = i !== lastBoardIndex ;
957
+ const breakPage = i !== 0 ;
966
958
const boardPDFData = await generatePDFBoard ( board , intl , breakPage , picsee ) ;
967
959
return prevContent . concat ( boardPDFData ) ;
968
960
} , Promise . resolve ( [ ] ) ) ;
@@ -973,7 +965,7 @@ export async function pdfExportAdapter(boards = [], intl, picsee = false) {
973
965
if ( pdfObj ) {
974
966
let prefix = getDatetimePrefix ( ) ;
975
967
if ( content . length === 2 ) {
976
- prefix = prefix + content [ 0 ] + ' ' ;
968
+ prefix = prefix + content [ 0 ] . text + ' ' ;
977
969
} else {
978
970
prefix = prefix + 'boardsset ' ;
979
971
}
0 commit comments