web-dev-qa-db-ja.com

ヘッダーサイズを大きくするpdfMake

Pdfmakeを使用してPDFのヘッダーサイズを大きくしようとしています。

現在、ページの左右両方にヘッダーを付けることができますが、高さが26を超えると、ヘッダーのスペースが限られているため、画像が消えます。

  • 余白を小さくしてサイズを大きくすることもできますが、余白を残したいです。
  • PdfMake githubで同様の問題を検索しましたが、成功しませんでした。

何かをテストする必要がある場合は、これまでに持っているコードを試してください pdfmake playground

それを機能させるには、このすべてのコードをコピーして「遊び場」に貼り付ける必要があることに注意してください。

var dd = {
  pageSize: 'LEGAL',
  pageOrientation: 'landscape',
  header: {
    margin: 8,
    columns: [{
      table: {
        widths: ['50%', '50%'],
        body: [
          [{
            image: 'sampleImage.jpg',
            width: 80,
            height: 26,
          }, {
            image: 'sampleImage.jpg',
            width: 80,
            height: 26,
            alignment: 'right'
          }]
        ]
      },
      layout: 'noBorders'
    }]
  },
  content: [
    'First paragraph',
    'Another paragraph, this time a little bit longer to make sure, this line will be divided into at least two lines'
  ]
}
12
sqrepants

PageMarginsを追加し、2番目のパラメーター(上部マージン)をヘッダーの合計サイズに調整する必要があります。すべてのヘッダーコンテンツが表示されるまで、値を試すことができます。

例えば:

この場合、80(pageMargin:[40、8、40,60])を使用して高さ60の画像を取得します

var dd = {

    pageSize: 'LEGAL',
    pageOrientation: 'landscape',
    pageMargins: [40, 80, 40, 60],

    header: {
        margin: 8,
        columns: [
            {
                table: {
                    widths: [ '50%','50%'],

                    body: [
                        [
                            { image: 'sampleImage.jpg',

                                width: 80, height: 60,

                            },

                            { image: 'sampleImage.jpg',

                                width: 80, height: 60,
                                alignment:'right'}
                        ]
                    ]
                },
                layout: 'noBorders'
            }

        ]
    },

    content: [
        'First paragraph',
        'Another paragraph, this time a little bit longer to make sure, this line will be divided into at least two lines'
    ]
}
15
Ramon-san

これに対する受け入れられた答えは良いものですが、私は他の人にとってよりうまくいくと思うものを見つけたので、特にヘッダーコンテンツの長さが異なる可能性がある場合は共有したいと思いました。

Pdfmakeのテーブルには、テーブルがまたがる各ページでヘッダー行が繰り返される優れた機能があります。したがって、ドキュメント全体をラップするテーブルを作成し、必要な数のヘッダー行を追加すると、すべてのページで固定されます。これがドキュメント定義の例です。

var docDefinition = {

  pageSize : 'LETTER',
  pageMargins : [25, 25, 25, 35],

  defaultStyle : {
    fontSize  : 12,
    columnGap : 20
  },

  // Page Layout

  content : {

    // This table will contain ALL content
    table : {
      // Defining the top 2 rows as the "sticky" header rows
      headerRows: 2,
      // One column, full width
      widths: ['*'],
      body: [


        // Header Row One
        // An array with just one "cell"
        [
          // Just because I only have one cell, doesn't mean I can't have
          // multiple columns!
          {
            columns : [
              {
                width    : '*',
                text     : 'Delivery Company, Inc.',
                fontSize : 12,
                bold     : true
              },
              {
                width     : '*',
                text      : [
                  { text: 'Delivery Slip\n', fontSize: 12 },
                  { text: 'Date ', bold: true },
                  '2/16/2015   ',
                  { text: 'Arrived ', bold: true },
                  '11:05 AM   ',
                  { text: 'Left ', bold: true },
                  '11:21 AM'
                ],
                fontSize  : 10,
                alignment : 'right'
              }
            ]
          }
        ],


        // Second Header Row

        [
          {
            columns: [
              {
                width: 'auto',
                margin: [0,0,10,0],
                text: [
                  { text: 'CUSTOMER\n', fontSize: 8, bold: true, color: '#bbbbbb' },
                  { text: 'John Doe', fontSize: 12 }
                ]
              },
              {
                width: 'auto',
                margin: [0,0,10,0],
                text: [
                  { text: 'INVOICE #\n', fontSize: 8, bold: true, color: '#bbbbbb' },
                  { text: '123456', fontSize: 12 }
                ]
              }
            ]
          }
        ],

        // Now you can break your content out into the remaining rows.
        // Or you could have one row with one cell that contains
        // all of your content

        // Content Row(s)

        [{
          fontSize: 10,
          stack: [

            // Content

            { text:'this is content', pageBreak: 'after' },
            { text:'this is more content', pageBreak: 'after' },
            { text:'this is third page content' }
          ]
        }],

        [{
          fontSize: 10,
          stack: [

            // Content

            { text:'this is content', pageBreak: 'after' },
            { text:'this is more content', pageBreak: 'after' },
            { text:'this is third page content' }
          ]
        }]


      ]
    },


    // Table Styles

    layout: {
      hLineWidth: function(i, node) { return (i === 1 || i === 2) ? 1 : 0; },
      vLineWidth: function(i, node) { return 0; },
      hLineColor: function(i, node) { return (i === 1 || i === 2) ? '#eeeeee' : 'white'; },
      vLineColor: function(i, node) { return 'white' },
      paddingBottom: function(i, node) {
        switch (i) {
          case 0:
            return 5;
          case 1:
            return 2;
          default:
            return 0;
        }
      },
      paddingTop: function(i, node) {
        switch (i) {
          case 0:
            return 0;
          case 1:
            return 2;
          default:
            return 10;
        }
      }
    }
  },


  // Page Footer

  footer : function(currentPage, pageCount) {
    return {
      alignment : 'center',
      text      : currentPage.toString() + ' of ' + pageCount,
      fontSize  : 8
    }
  },

};
7
Eric