14

有没有办法使用pdfmake创建具有不同页面方向的多页 pdf ?

为了简单起见,我想要这样的东西:

  • 1页,纵向
  • 第2页,横向
  • 第3页,纵向

我用不同的方法尝试了很多次,但它总是对所有页面都有影响。


对不起我糟糕的英语

4

3 回答 3

19

这是一个老问题,但回答可能对其他人有所帮助。

如果要更改页面方向,只需在页面的第一个节点指定新值。

在这行下面,我附上了一个简单的代码,您可以直接将其粘贴到pdfmake 操场上以进行尝试。

祝你好运!

var dd = {
    content: [
        { 
            text: 'Unordered list', 
            style: 'header' 
        },
        {
            ol: [
                'item 1',
                'item 2',
                'item 3',
            ]
        },
        { 
             text: '\n\nUnordered list with longer lines', 
             style: 'header', 
             pageBreak: 'before', 
             pageOrientation: 'landscape' 
        },
        {
            ol: [
                'item 1',
                'Lorem ipsum dolor sit amet, consectetur ..',
                'item 3',
            ]
        },
        { 
            text: '\n\nNested lists', 
            style: 'header', 
            pageBreak: 'before', 
            pageOrientation: 'portrait' 
        },
        {
            ol: [
                'item 1',
                'Lorem ipsum dolor sit amet, consectetur ..',
                {
                    ol: [
                        'subitem 1',
                        'subitem 2',
                        'subitem 3 - Lorem ipsum dolor sit ame...',
                        'subitem 4',
                        'subitem 5',
                    ]
                },
                'item 3\nsecond line of item3',
            ]
        },
    ],
    styles: {
        header: {
            bold: true,
            fontSize: 15
        }
    },
    defaultStyle: {
        fontSize: 12,
    }   
}
于 2015-06-02T07:46:10.990 回答
1

我刚刚浏览了pdfmake的文档,他们提供了以下用于设置页面方向的代码:

 var docDefinition = {
  // a string or { width: number, height: number }
  pageSize: 'A5',  
 // by default we use portrait, you can change it to landscape if you wish
 pageOrientation: 'landscape',
  ...

//Other content
};

现在整个项目的本质是文档定义对象,我猜它是独一无二的。即使在github 页面和提到的问题上,我也没有看到为特定页面设置页面方向的规定,尽管您可以像这样添加 PageBreaks:

  (...)
   'You can also fit the image inside a rectangle',
  {
    image: 'fonts/sampleImage.jpg',
    fit: [100, 100],
    pageBreak: 'after'
  },
  (...)

也就是说,我确实认为您的问题有解决方法。你看,这是pdf在这个项目中生成文档的方式:

 var fs = require('fs');
 var pdfDoc = printer.createPdfKitDocument(docDefinition);
 pdfDoc.pipe(fs.createWriteStream('pdfs/basics.pdf'));
 pdfDoc.end();

当然,管道fs模块是节点实现。但是,由于我们将页面方向附加到文档定义对象,如果我们有多个文档定义,如下所示:

 var pdf1 = printer.createPdfKitDocument(docdef1); //landscape mode page 1
 var pdf2 = printer.createPdfKitDocument(docdef2); //portrait mode page 2
 var pdf3 = printer.createPdfKitDocument(docdef3); //landscape mode for the rest of the pages.

我们现在可以append在方法中使用标志createWriteStream()。有用的文档。(未经测试的代码)

 pdf1.pipe(fs.createWriteStream('foo.pdf'));
 pdf2.pipe(fs.createWriteStream('foo.pdf',{flags:'a'}));
 pdf3.pipe(fs.createWriteStream('foo.pdf',{flags:'a'}));
 pdf1.end();
 pdf2.end();
 pdf3.end();

我只是建议您如何组合文档定义对象。希望它能让你朝着正确的方向开始。

于 2014-11-04T10:52:44.647 回答
1

你可以在 pdf make 中试试这个

var dd = { 
pageOrientation: 'portrait',
content: [
   {text: 'Text on Portrait'},
   {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},
   {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},
   {text: 'Text on Portrait 2'}
   ]
}
于 2021-10-06T17:58:17.920 回答