@@ -207,6 +207,235 @@ doc.image(
207207 } ,
208208) . text ( "Scale" , 320 , 265 ) ;
209209
210+ // $ExpectType PDFDocument
211+ doc . table ( {
212+ data : [
213+ [ "Column 1" , "Column 2" , "Column 3" ] ,
214+ [ "One value goes here" , "Another one here" , "OK?" ] ,
215+ ] ,
216+ } ) ;
217+
218+ // $ExpectType PDFTableObject
219+ doc . table ( )
220+ . row ( [ "Column 1" , "Column 2" , "Column 3" ] )
221+ . row ( [ "One value goes here" , "Another one here" , "OK?" ] ) ;
222+
223+ doc . table ( {
224+ columnStyles : [ 100 , "*" , 200 , "*" ] ,
225+ data : [
226+ [ "width=100" , "star-sized" , "width=200" , "star-sized" ] ,
227+ [
228+ "fixed-width cells have exactly the specified width" ,
229+ { text : "nothing interesting here" , textColor : "grey" } ,
230+ { text : "nothing interesting here" , textColor : "grey" } ,
231+ { text : "nothing interesting here" , textColor : "grey" } ,
232+ ] ,
233+ ] ,
234+ } ) ;
235+
236+ doc . table ( {
237+ rowStyles : [ 20 , 50 , 70 ] ,
238+ data : [
239+ [ "row 1 with height 20" , "column B" ] ,
240+ [ "row 2 with height 50" , "column B" ] ,
241+ [ "row 3 with height 70" , "column B" ] ,
242+ ] ,
243+ } ) ;
244+
245+ doc . table ( {
246+ rowStyles : 40 ,
247+ data : [
248+ [ "row 1" , "column B" ] ,
249+ [ "row 2" , "column B" ] ,
250+ [ "row 3" , "column B" ] ,
251+ ] ,
252+ } ) ;
253+
254+ doc . table ( {
255+ rowStyles : ( row ) => ( row + 1 ) * 25 ,
256+ data : [
257+ [ "row 1" , "column B" ] ,
258+ [ "row 2" , "column B" ] ,
259+ [ "row 3" , "column B" ] ,
260+ ] ,
261+ } ) ;
262+
263+ doc . table ( {
264+ columnStyles : [ 200 , "*" , "*" ] ,
265+ data : [
266+ [ { colSpan : 2 , text : "Header with Colspan = 2" } , "Header 3" ] ,
267+ [ "Header 1" , "Header 2" , "Header 3" ] ,
268+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
269+ [
270+ {
271+ rowSpan : 3 ,
272+ text :
273+ "rowspan set to 3\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor" ,
274+ } ,
275+ "Sample value 2" ,
276+ "Sample value 3" ,
277+ ] ,
278+ [ "Sample value 2" , "Sample value 3" ] ,
279+ [ "Sample value 2" , "Sample value 3" ] ,
280+ [
281+ "Sample value 1" ,
282+ {
283+ colSpan : 2 ,
284+ rowSpan : 2 ,
285+ text : "Both:\nrowspan and colspan\ncan be defined at the same time" ,
286+ } ,
287+ ] ,
288+ [ "Sample value 1" ] ,
289+ ] ,
290+ } ) ;
291+
292+ doc . table ( {
293+ rowStyles : { border : false } ,
294+ data : [
295+ [ "Header 1" , "Header 2" , "Header 3" ] ,
296+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
297+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
298+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
299+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
300+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
301+ ] ,
302+ } ) ;
303+
304+ doc . table ( {
305+ rowStyles : ( i ) => {
306+ return i < 1 ? { border : [ 0 , 0 , 1 , 0 ] } : { border : false } ;
307+ } ,
308+ data : [
309+ [ "Header 1" , "Header 2" , "Header 3" ] ,
310+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
311+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
312+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
313+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
314+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
315+ ] ,
316+ } ) ;
317+
318+ doc . table ( {
319+ rowStyles : ( i ) => {
320+ return i < 1
321+ ? { border : [ 0 , 0 , 2 , 0 ] , borderColor : "black" }
322+ : { border : [ 0 , 0 , 1 , 0 ] , borderColor : "#aaa" } ;
323+ } ,
324+ data : [
325+ [ "Header 1" , "Header 2" , "Header 3" ] ,
326+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
327+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
328+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
329+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
330+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
331+ ] ,
332+ } ) ;
333+
334+ doc . table ( {
335+ // Set the style for all cells
336+ defaultStyle : { border : 1 , borderColor : "gray" } ,
337+ // Set the style for cells based on their column
338+ columnStyles : ( i ) => {
339+ if ( i === 0 ) return { border : { left : 2 } , borderColor : { left : "black" } } ;
340+ if ( i === 2 ) return { border : { right : 2 } , borderColor : { right : "black" } } ;
341+ } ,
342+ // Set the style for cells based on their row
343+ rowStyles : ( i ) => {
344+ if ( i === 0 ) return { border : { top : 2 } , borderColor : { top : "black" } } ;
345+ if ( i === 3 ) return { border : { bottom : 2 } , borderColor : { bottom : "black" } } ;
346+ } ,
347+ data : [
348+ [ "Header 1" , "Header 2" , "Header 3" ] ,
349+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
350+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
351+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
352+ ] ,
353+ } ) ;
354+
355+ doc . table ( {
356+ rowStyles : ( i ) => {
357+ if ( i % 2 === 0 ) return { backgroundColor : "#ccc" } ;
358+ } ,
359+ data : [
360+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
361+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
362+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
363+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
364+ [ "Sample value 1" , "Sample value 2" , "Sample value 3" ] ,
365+ ] ,
366+ } ) ;
367+
368+ doc . table ( {
369+ data : [
370+ [
371+ {
372+ border : [ true , false , false , false ] ,
373+ backgroundColor : "#eee" ,
374+ text : "border:\n[true, false, false, false]" ,
375+ } ,
376+ { border : false , backgroundColor : "#ddd" , text : "border:\nfalse" } ,
377+ { border : true , backgroundColor : "#eee" , text : "border:\ntrue" } ,
378+ ] ,
379+ [
380+ { rowSpan : 3 , border : true , backgroundColor : "#eef" , text : "rowSpan: 3\n\nborder:\ntrue" } ,
381+ { border : undefined , backgroundColor : "#eee" , text : "border:\nundefined (default)" } ,
382+ {
383+ border : [ false , false , false , true ] ,
384+ backgroundColor : "#ddd" ,
385+ text : "border:\n[false, false, false, true]" ,
386+ } ,
387+ ] ,
388+ [
389+ { colSpan : 2 , border : true , backgroundColor : "#efe" , text : "colSpan: 2\n\nborder:\ntrue" } ,
390+ ] ,
391+ [
392+ { border : 0 , backgroundColor : "#eee" , text : "border:\n0 (same as false)" } ,
393+ {
394+ border : [ false , true , true , false ] ,
395+ backgroundColor : "#ddd" ,
396+ text : "border:\n[false, true, true, false]" ,
397+ } ,
398+ ] ,
399+ ] ,
400+ } ) ;
401+
402+ doc . table ( {
403+ defaultStyle : { border : false , width : 60 } ,
404+ data : [
405+ [ "" , "column 1" , "column 2" , "column 3" ] ,
406+ [
407+ "row 1" ,
408+ {
409+ rowSpan : 3 ,
410+ colSpan : 3 ,
411+ border : true ,
412+ backgroundColor : "#ccc" ,
413+ text : "rowSpan: 3\ncolSpan: 3\n\nborder:\n[true, true, true, true]" ,
414+ } ,
415+ ] ,
416+ [ "row 2" ] ,
417+ [ "row 3" ] ,
418+ ] ,
419+ } ) ;
420+
421+ doc . table ( {
422+ defaultStyle : { border : 1 } ,
423+ columnStyles : { border : { right : 2 } } ,
424+ rowStyles : { border : { bottom : 3 } } ,
425+ data : [
426+ [ { border : { left : 4 } } ] ,
427+ ] ,
428+ } ) ;
429+
430+ doc . text ( "before" )
431+ . table ( {
432+ data : [
433+ [ "Column 1" , "Column 2" , "Column 3" ] ,
434+ [ "One value goes here" , "Another one here" , "OK?" ] ,
435+ ] ,
436+ } )
437+ . text ( "after" ) ;
438+
210439doc . text ( "Scale" , { align : "justify" } ) ;
211440
212441doc . text ( "Baseline - string literal" , { baseline : "alphabetic" } ) ;
0 commit comments