2014-11-04 3 views
5

Есть ли способ создать несколько страниц PDF с различной ориентацией страницы, используя pdfmake?pdfmake: Как создать несколько страниц PDF с различной ориентацией?

, чтобы сделать его простым, я хочу что-то вроде этого:

  • Page с портретной ориентацией
  • страницы с альбомной ориентацией
  • страницы с портретной ориентацией

Я пробовал это много раз с помощью другого метода, но он всегда влияет на всю страницу.


извините за мое terible английского

ответ

0

Я как раз собирался через documentation для 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 page и вопросов, упомянутых, я не вижу положение ориентации настройки страницы для конкретных страниц, хотя вы можете добавить 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(); 

Ofcourse в pipe и fs модулей реализации узлов. Однако, так как мы имеем ориентацию страницы прилагается к объекту определения документа, если у нас есть несколько определений Doc так:

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(). Полезно documentation. (Непроверенный код)

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(); 

Я просто предлагаю, как вы можете объединить объекты определения документа. Надеюсь, вы начнете в правильном направлении.

+0

спасибо, что ответите, я попробую ваше предложение сразу и сообщит вам результат. Я просто хочу убедиться, что ваш метод создает 3 pdf или только 1 pdf? Кстати, моя цель - создать 1 pdf с разной ориентацией –

+0

Я вижу вашу мысль, вы попытались объединить 3 генерируемых PDF в 1 файл pdf. Я пробовал, но это только первая страница. :( ' –

+0

Кстати, вот мой [код] (https://gist.github.com/ismile/3db044e5d557a8912b22) –

7

Это и старый вопрос, но ответ может помочь другим.

Если вы хотите изменить ориентацию страницы, вам нужно указать только новое значение в первом узле страницы.

Под этой строкой я прикрепил простой код, который вы можете вставить прямо на pdfmake playground, чтобы попробовать.

Удачи вам!

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, 
    } 
} 
+0

Как я могу использовать этот метод, если custruct ФПВ динамически в течение? – jedi

+1

добавления каждого объекта к array 'content' с функцией' push' и делить каждую страницу в конце цикла for с параметром pagebreak. 'var foo [0] = {name:" hello "}; foo [1] = {name: «world»}; for (var i = 0; i jedi