2017-03-05 53 views
3

我正在一個網頁,使用jquery在document.ready上加載頁面,使用css格式化頁面,使用node.js http從頁面中檢索頁面服務器,html-pdf將html轉換爲pdf文件。從這一點,我將該文件作爲電子郵件附件發送。最終目標是創建發票。問題在於css和js在外部文件中似乎沒有處理。我寧願保留在外部文件,但需要jQuery來填充document.ready和CSS來正確格式化頁面的頁面。另外,我加了cheerio,看看是否能確保處理過程正確發生,並沒有幫助。代碼如下所示:html-pdf:css和js文件似乎沒有被處理

email sending code: 
    var transporter = nodemailer.createTransport({ 
     service: 'gmail', 
     host: this.hostname, 
     auth: { 
      user: this.smtpusername, 
      pass: this.smtppassword 
     } 
    }); 

    var mailOptions = { 
     from: fromaddress, // sender address 
     to: toaddresslist, // list of receivers 
     subject: subject, // Subject line 
     html: text 
    }; 

    if (attachments){ 
     mailOptions.attachments = [ 
      { // binary buffer as an attachment 
       filename: 'invoice.pdf', 
       content: attachments, 
       contentType: 'application/pdf', 
       encoding: 'base64' 
      } 
     ]; 
    } 

html conversion code: 
       let body = []; 
       var options = { 
        host: 'localhost', 
        path: '/invoice/' + invoiceid, 
        port: '3000' 
       }; 

       http.request(options, function(response){ 
        response.on('data', function (chunk) { 
         body.push(chunk); 
        }); 

        response.on('end', function() { 
        let buffer = ''; 
        buffer = Buffer.concat(body).toString(); 
        let $ = cheerio.load(buffer); 
        let newdocument = $.html(); 
        console.log(newdocument); 

        pdf.create(newdocument, { 
         directory: "tmp", 
         format: "letter", 
         orientation: "portrait", 
         zoomFactor: ".5", // default is 1 
         type: "pdf", 
         quality: "75" 
        }).toBuffer(function(err, newbuffer){ 
         if (err){ 
          reject(err); 
         } 

         if (Buffer.isBuffer(newbuffer)){ 
          resolve(newbuffer); 
         } else { 
          reject(new Error('The pdf file could not be generated at this time. Please try again later.')); 
         } 
        }); 
        }); 
       }) 
       .end(); 

當我檢查電子郵件,我得到的PDF格式,但沒有出現與我從API調用期望的,格式化的方式關閉數據填充。爲了測試的目的,我嘗試移動文檔中的css代碼,雖然css仍然關閉,但很明顯,它能夠在此場景中看到css。

1)如何獲取html-pdf包來識別和處理外部css和js文件?

2)html-pdf使用什麼類型的html格式,div或表格?

+0

從您運行html -pdf的位置可以連接到外部文件的鏈接嗎?你使用顯式路徑嗎? – Martina

回答

1

您是否嘗試過使用你的CSS文件的絕對鏈接?在HTML頭部分?

<link rel='stylesheet' type='text/css' href='http://www.url.com/css/my.css' /> 

使用http://localhost:3000與您使用本地主機可能是你的情況。

請確保您在nodejs服務器配置中正確設置了路徑。 (否則你會得到一個404錯誤)。

編輯:我也發現這個線程在他們的存儲庫。 https://github.com/marcbachmann/node-html-pdf/issues/13

希望這會有所幫助。

1

您是否使用基本選項?你的css和js可以在服務器上使用嗎?也是你的JavaScript長時間運行的腳本,也許與Ajax或任何需要時間?不知道HTML,PDF是多麼好,但它可能不會等待JS來完成,有些庫對於選擇:

// Rendering options 
     "base": "file:///home/www/your-asset-path", // Base path that's used to load files (images, css, js) when they aren't referenced using a host 

https://www.npmjs.com/package/html-pdf