如何使用 pdfmake 对齐图像?

How do I align an image with pdfmake?

我正在使用 pdfmake 创建 PDF,并已成功使用数据 URI 嵌入图像。这是一张小图片,大约 200 像素,我想让它右对齐。有什么方法可以将图像推到 PDF 的右侧吗?

您可以在文档定义中使用 pre-defined 样式右对齐图像。 pdfmake playground 有一个很好的图像示例,我编辑它以在下面添加 'right aligned' 样式(称为 'rightme')。我尝试直接将 'alignment: right' 添加到文档定义中,但这不起作用。

由于长度原因我删除了图像数据 - 访问pdfmake playground图像以查看其工作情况:

  var dd = {
    content: [
      'pdfmake (since it\'s based on pdfkit) supports JPEG and PNG format',
      'If no width/height/fit is provided, image original size will be used',
      {
        image: 'sampleImage.jpg',
      },
      'If you specify width, image will scale proportionally',
      {
        image: 'sampleImage.jpg',
        width: 150
      },
      'If you specify both width and height - image will be stretched',
      {
        image: 'sampleImage.jpg',
        width: 150,
        height: 150,
      },
      'You can also fit the image inside a rectangle',
      {
        image: 'sampleImage.jpg',
        fit: [100, 100],
        pageBreak: 'after'
      },
    
      // Warning! Make sure to copy this definition and paste it to an
      // external text editor, as the online AceEditor has some troubles
      // with long dataUrl lines and the following image values look like
      // they're empty.
      'Images can be also provided in dataURL format...',
      {
            image: **'IMAGE TRUNCATED FOR BREVITY'**,
            width: 200,
            style: 'rightme'
      },
      'or be declared in an "images" dictionary and referenced by name',
      {
        image: 'building',
        width: 200
      },
    ],
    images: {
      building: **'IMAGE DATA TRUNCATED FOR BREVITY'**
    },
    styles:{
        rightme:
        {   
            alignment: 'right'
        }
    
    }
    
  }
 $('#cmd').click(function () {
         var img = document.getElementById('imgReq');
         var empImage = img.getAttribute('src');

var docDefinition = { 

        pageMargins: [0, 0, 0, 0],
        content: [
               {
                style: 'tableExample',
                table: {
                        headerRows: 1,
                        body: [
                                [ {
                                    image: 'building',
                                    width: 195,
                                    height: 185,
                                } ],

                        ]
                },
                layout: {
                                                hLineWidth: function(i, node) {
                                                        return (i === 0 || i === node.table.body.length) ? 0 : 0;
                                                },
                                                vLineWidth: function(i, node) {
                                                        return (i === 0 || i === node.table.widths.length) ? 0 : 0;
                                                },
                                                hLineColor: function(i, node) {
                                                        return (i === 0 || i === node.table.body.length) ? '#276fb8' : '#276fb8';
                                                },
                                                vLineColor: function(i, node) {
                                                        return (i === 0 || i === node.table.widths.length) ? '#276fb8' : '#276fb8';
                                                },
                                                paddingLeft: function(i, node) { return 0; },
                                                paddingRight: function(i, node) { return 0; },
                                                paddingTop: function(i, node) { return 0; },
                                                paddingBottom: function(i, node) { return 0; }
                }
        }
],styles:{
   tableExample: {
                margin: [200, 74, 0, 0],
                //alignment: 'center'
            }
          }, images: {
                building: empImage
            }
        };

下面的代码演示了图像的左对齐(默认)、居中和右对齐。

将以下代码粘贴到 http://pdfmake.org/playground.html 中进行实时查看。

Playground 要求您将文档定义分配给名为 dd 的变量

    var dd = {
        content: [
            'left align image', ' ',
            {
                image: 'sampleImage.jpg',
                width: 100,
                height: 100,
                alignment: 'left' // Default... not actually required.
            },
            ' ', ' ', 'center align image', ' ',
            {
                image: 'sampleImage.jpg',
                width: 100,
                height: 100,
                alignment: 'center'
            },
            ' ', ' ', 'right align image', ' ',
            {
                image: 'sampleImage.jpg',
                width: 100,
                height: 100,
                alignment: 'right'
            }
        ]
    }

我在浏览器中(不是在 Nodejs 中)使用 images "dictionary" 从服务器定位图像,如下所示:

{
  content: [
    {
           image: 'imageKey',
           width: 20,
           height: 20
    }
  ],
  images: {
    imageKey: window.location.origin + "path/to/image" // via URL address, which can be referenced by this key
  }
}

这使您可以轻松地(重新)使用服务器中的本地图像。我希望这对处于类似情况的人有所帮助。

只需将 alignment: "center" 添加到图像中,对我来说很有效)