有没有办法使用pdfmake创建具有不同页面方向的多页 pdf ?
为了简单起见,我想要这样的东西:
- 第1页,纵向
- 第2页,横向
- 第3页,纵向
我用不同的方法尝试了很多次,但它总是对所有页面都有影响。
对不起我糟糕的英语
有没有办法使用pdfmake创建具有不同页面方向的多页 pdf ?
为了简单起见,我想要这样的东西:
我用不同的方法尝试了很多次,但它总是对所有页面都有影响。
这是一个老问题,但回答可能对其他人有所帮助。
如果要更改页面方向,只需在页面的第一个节点指定新值。
在这行下面,我附上了一个简单的代码,您可以直接将其粘贴到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,
}
}
我刚刚浏览了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();
我只是建议您如何组合文档定义对象。希望它能让你朝着正确的方向开始。
你可以在 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'}
]
}