2014-11-04 19 views
5

esiste un modo per creare più pagine pdf con diverso orientamento della pagina utilizzando pdfmake?pdfmake: Come creare pdf di più pagine con un orientamento diverso?

per renderlo semplice, voglio qualcosa di simile:

  • Pagina con orientamento verticale
  • pagina con orientamento orizzontale
  • pagina con orientamento verticale

L'ho provato tante volte con un metodo diverso ma ha sempre effetto su tutte le pagine.


dispiace per il mio terible inglese

risposta

0

stavo andando attraverso il documentation per pdfmake in cui danno il seguente codice per impostare l'orientamento della pagina:

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 
}; 

Ora l'essenza di questo intero progetto è l'oggetto di definizione del documento, che è unico, credo. Anche sulle github page e le questioni di cui, non vedo una disposizione della pagina di impostazione dell'orientamento per pagine specifiche, anche se è possibile aggiungere interruzioni di pagina in questo modo:

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

Detto questo, io credo che ci sia una soluzione per la vostra problema. Vedete, questo è come il documento pdf è generato in questo progetto:

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

Naturalmente i moduli pipe e fs sono implementazioni nodo. Tuttavia, dal momento che abbiamo l'orientamento della pagina associata a un oggetto definizione del documento, se abbiamo più definizioni doc in questo modo:

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. 

Ora possiamo semplicemente usare la bandiera append nel metodo createWriteStream(). Utile documentation. (Codice non testato)

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

stavo solo suggerendo come si potrebbe fare per la combinazione degli oggetti definizione del documento. Spero che tu inizi nella giusta direzione.

+0

grazie per la vostra risposta, proverò subito il vostro suggerimento e vi informerò sul risultato. Voglio solo renderlo sicuro, il tuo metodo è creare 3 pdf o solo 1 pdf? btw, Il mio obiettivo è creare 1 pdf con diverso orientamento –

+0

Vedo il tuo punto, hai provato a combinare 3 pdf generati in 1 file pdf. L'ho provato, ma è solo la prima pagina. :( ' –

+0

btw, qui il mio [code] (https://gist.github.com/ismile/3db044e5d557a8912b22) –

7

Questa è una domanda vecchia, ma la risposta può aiutare gli altri.

Se si desidera modificare l'orientamento della pagina, è necessario specificare il nuovo valore sul primo nodo della pagina.

Sotto queste righe ho allegato un semplice codice che è possibile incollare direttamente allo pdfmake playground per provarlo.

Buona fortuna!

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

Come posso utilizzare questo metodo se custruct il pdf dinamicamente in una per il? – jedi

+1

l'aggiunta di ogni oggetto al array 'content' con la funzione' push' e divide ogni pagina alla fine del ciclo for con l'opzione pagebreak. 'var foo [0] = {name:" ciao "}; foo [1] = {nome: "world"}; for (var i = 0; i jedi

Problemi correlati