2

Je suis en train d'imprimer une page avec plusieurs cartes nvd3 en pdf en utilisant un marionnettiste. Lorsque vous utilisez la fonction d'impression via le navigateur Chrome-je obtenir la sortie correcte suivant (ne me dérange pas les frontières bleues):Chrome rendu sans tête complètement faux au pdf

Correct output

Lorsque je tente de visiter la même page en utilisant sans tête chrome par marionnettiste, je reçois cette sortie à la place, couvrant plus de 3 pages:

Wrong output

Voici le code que j'utilise:

const puppeteer = require('puppeteer'); 

(async() => { 
    const browser = await puppeteer.launch(); 
    const page = await browser.newPage(); 

    await page.setCookie({ 
     name: 'cookie-a', 
     value: '...', 
     domain: 'example.com' 
    }); 
    await page.setCookie({ 
     name: 'cookie-b', 
     value: '...', 
     domain: 'example.com' 
    }); 

    await page.goto('http://example.com/search/?bookmark=bot-overview', {waitUntil: 'networkidle'}); 

    setTimeout(async function() { 
     await page.pdf({ path: 'page.pdf', format: 'A4', landscape: true }); 
     browser.close(); 
    }, 10000); 
})(); 

J'ai également essayé de fixer la hauteur et la largeur aux valeurs de pixels, cm et mm, mais cela n'affecte pas la sortie. Notez que la page entière est stylée à travers les pages et bootstrap avec leur feuille de style de support d'impression. J'ai également ajouté plusieurs règles CSS pour les supports d'impression (parmi lesquels les frontières bleues). Une de ces règles force la page entière à avoir une taille de 297 mm x 210 mm, c'est-à-dire la taille exacte d'une page A4.

+0

Avez-vous déjà essayé de définir le type de média * * en utilisant [ 'page.emulateMedia()'] (https://github.com/GoogleChrome/ marionnettiste/blob/master/docs/api.md # pageemulatemediamediatype) avant de créer le PDF? – flozia

Répondre

1

Je faisais face à des problèmes comme le vôtre. Après un certain temps, j'ai pu corriger certains d'entre eux:

const puppeteer = require('puppeteer'); 
    const devices = require('puppeteer/DeviceDescriptors'); 

    (async() => { 
     const browser = await puppeteer.launch(); 
     const page = await browser.newPage(); 
     const url = 'https://example.com'; 

     await page.emulateMedia('screen'); //<-- 
     await page.goto(url, {waitUntil: 'networkidle'}); 

     await page.screenshot({path: 'full_img.png', fullPage: true}); 
     await page.pdf({ 
      path: 'the_file.pdf', 
      format: 'A4', 
      printBackground: true, //<--- 
      displayHeaderFooter: true, //<--- 
      scale: 1, 
      landscape: false, 
      pageRanges: "" 
     }); 
    })();