@@ -237,4 +237,162 @@ describe("Module: html", () => {
237
237
238
238
comparePdf ( doc . output ( ) , "html-font-faces.pdf" , "html" ) ;
239
239
} ) ;
240
+
241
+ it ( "html margin insets properly" , async ( ) => {
242
+ const doc = jsPDF ( { floatPrecision : 2 , unit : "pt" } ) ;
243
+ doc . line ( 30 , 10 , 100 , 10 ) ;
244
+ doc . line ( 30 , 10 , 30 , 100 ) ;
245
+ await new Promise ( resolve =>
246
+ doc . html (
247
+ "<div style='background: red; width: 10px; height: 10px;'></div>" ,
248
+ {
249
+ callback : resolve ,
250
+ margin : [ 10 , 30 ]
251
+ }
252
+ )
253
+ ) ;
254
+ comparePdf ( doc . output ( ) , "html-margin.pdf" , "html" ) ;
255
+ } ) ;
256
+
257
+ it ( "html margin on page break" , async ( ) => {
258
+ const doc = jsPDF ( { floatPrecision : 2 , unit : "pt" , format : [ 100 , 100 ] } ) ;
259
+ await new Promise ( resolve =>
260
+ doc . html (
261
+ "<div style='background: red; width: 10px; height: 200px;'></div>" ,
262
+ {
263
+ callback : resolve ,
264
+ margin : [ 10 , 30 , 10 , 30 ]
265
+ }
266
+ )
267
+ ) ;
268
+ const numberOfPages = doc . getNumberOfPages ( ) ;
269
+ const pageWidth = doc . internal . pageSize . getWidth ( ) ;
270
+ const pageHeight = doc . internal . pageSize . getHeight ( ) ;
271
+ for ( let i = 1 ; i <= numberOfPages ; i ++ ) {
272
+ doc . setPage ( i ) ;
273
+ doc . rect ( 30 , 10 , pageWidth - 60 , pageHeight - 20 ) ;
274
+ }
275
+ doc . line ( 0 , 50 , 100 , 50 ) ;
276
+ comparePdf ( doc . output ( ) , "html-margin-page-break.pdf" , "html" ) ;
277
+ } ) ;
278
+
279
+ it ( "page break with image" , async ( ) => {
280
+ const doc = jsPDF ( { floatPrecision : 2 , unit : "pt" , format : [ 100 , 100 ] } ) ;
281
+ await new Promise ( resolve =>
282
+ doc . html (
283
+ '<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==" width="10" height="200">' ,
284
+ {
285
+ callback : resolve ,
286
+ margin : [ 10 , 30 , 10 , 30 ]
287
+ }
288
+ )
289
+ ) ;
290
+ const numberOfPages = doc . getNumberOfPages ( ) ;
291
+ const pageWidth = doc . internal . pageSize . getWidth ( ) ;
292
+ const pageHeight = doc . internal . pageSize . getHeight ( ) ;
293
+ for ( let i = 1 ; i <= numberOfPages ; i ++ ) {
294
+ doc . setPage ( i ) ;
295
+ doc . rect ( 30 , 10 , pageWidth - 60 , pageHeight - 20 ) ;
296
+ }
297
+ doc . line ( 0 , 50 , 100 , 50 ) ;
298
+ comparePdf ( doc . output ( ) , "html-margin-page-break-image.pdf" , "html" ) ;
299
+ } ) ;
300
+
301
+ it ( "html x, y offsets properly" , async ( ) => {
302
+ const doc = jsPDF ( { floatPrecision : 2 , unit : "pt" } ) ;
303
+ doc . line ( 30 , 10 , 100 , 10 ) ;
304
+ doc . line ( 30 , 10 , 30 , 100 ) ;
305
+ await new Promise ( resolve =>
306
+ doc . html (
307
+ "<div style='background: red; width: 10px; height: 10px;'></div>" ,
308
+ {
309
+ callback : resolve ,
310
+ x : 30 ,
311
+ y : 10
312
+ }
313
+ )
314
+ ) ;
315
+ comparePdf ( doc . output ( ) , "html-x-y.pdf" , "html" ) ;
316
+ } ) ;
317
+
318
+ it ( "html x, y + margin offsets properly" , async ( ) => {
319
+ const doc = jsPDF ( { floatPrecision : 2 , unit : "pt" } ) ;
320
+ doc . line ( 30 , 10 , 100 , 10 ) ;
321
+ doc . line ( 30 , 10 , 30 , 100 ) ;
322
+ await new Promise ( resolve =>
323
+ doc . html (
324
+ "<div style='background: red; width: 10px; height: 10px;'></div>" ,
325
+ {
326
+ callback : resolve ,
327
+ x : 10 ,
328
+ y : 3 ,
329
+ margin : [ 7 , 20 ]
330
+ }
331
+ )
332
+ ) ;
333
+ comparePdf ( doc . output ( ) , "html-margin-x-y.pdf" , "html" ) ;
334
+ } ) ;
335
+
336
+ it ( "html x, y + margin offsets properly" , async ( ) => {
337
+ const doc = jsPDF ( { floatPrecision : 2 , unit : "pt" } ) ;
338
+ doc . line ( 30 , 10 , 100 , 10 ) ;
339
+ doc . line ( 30 , 10 , 30 , 100 ) ;
340
+ await new Promise ( resolve =>
341
+ doc . html ( "<span>Lorem Ipsum</span>" , {
342
+ callback : resolve ,
343
+ x : 10 ,
344
+ y : 3 ,
345
+ margin : [ 7 , 20 ]
346
+ } )
347
+ ) ;
348
+ comparePdf ( doc . output ( ) , "html-margin-x-y-text.pdf" , "html" ) ;
349
+ } ) ;
350
+
351
+ it ( "page break with autoPaging: 'text'" , async ( ) => {
352
+ const text = Array . from ( { length : 200 } )
353
+ . map ( ( _ , i ) => `ABC${ i } ` )
354
+ . join ( " " ) ;
355
+
356
+ const doc = jsPDF ( { floatPrecision : 2 , unit : "pt" } ) ;
357
+ await new Promise ( resolve =>
358
+ doc . html ( `<span>${ text } </span>` , {
359
+ callback : resolve ,
360
+ margin : [ 10 , 30 , 10 , 30 ] ,
361
+ autoPaging : "text"
362
+ } )
363
+ ) ;
364
+
365
+ const numberOfPages = doc . getNumberOfPages ( ) ;
366
+ const pageWidth = doc . internal . pageSize . getWidth ( ) ;
367
+ const pageHeight = doc . internal . pageSize . getHeight ( ) ;
368
+ for ( let i = 1 ; i <= numberOfPages ; i ++ ) {
369
+ doc . setPage ( i ) ;
370
+ doc . rect ( 30 , 10 , pageWidth - 60 , pageHeight - 20 ) ;
371
+ }
372
+ comparePdf ( doc . output ( ) , "html-margin-page-break-text.pdf" , "html" ) ;
373
+ } ) ;
374
+
375
+ it ( "page break with autoPaging: 'slice'" , async ( ) => {
376
+ const text = Array . from ( { length : 200 } )
377
+ . map ( ( _ , i ) => `ABC${ i } ` )
378
+ . join ( " " ) ;
379
+
380
+ const doc = jsPDF ( { floatPrecision : 2 , unit : "pt" } ) ;
381
+ await new Promise ( resolve =>
382
+ doc . html ( `<span>${ text } </span>` , {
383
+ callback : resolve ,
384
+ margin : [ 10 , 30 , 10 , 30 ] ,
385
+ autoPaging : "slice"
386
+ } )
387
+ ) ;
388
+
389
+ const numberOfPages = doc . getNumberOfPages ( ) ;
390
+ const pageWidth = doc . internal . pageSize . getWidth ( ) ;
391
+ const pageHeight = doc . internal . pageSize . getHeight ( ) ;
392
+ for ( let i = 1 ; i <= numberOfPages ; i ++ ) {
393
+ doc . setPage ( i ) ;
394
+ doc . rect ( 30 , 10 , pageWidth - 60 , pageHeight - 20 ) ;
395
+ }
396
+ comparePdf ( doc . output ( ) , "html-margin-page-break-slice.pdf" , "html" ) ;
397
+ } ) ;
240
398
} ) ;
0 commit comments