閱讀852 返回首頁    go 阿裏雲 go 技術社區[雲棲]


phantomjs技巧之將html頁麵轉換為pdf文件

需求

很多時候我們需要將一些網頁轉換為pdf,比如開發人員需要為每個客戶提供一份運維周報,周報一般是html的頁麵,但是為了能夠永久記錄存儲,需要將周報轉換為pdf格式的文件,pdf一方麵便於閱覽,另一方麵也便於打印出來。所以本文研究如何通過phantomjs將一個html的頁麵轉換為pdf文件。

編寫pdfconvert.js代碼

1. 先確定pdf輸出格式

  • 頁麵格式(format):A3/A4/A5/letter
  • 頁眉/頁腳(header/footer):true or false
  • 頁麵方向(orientation):portrait/landscape
  • 頁邊距(margin) -瀏覽器窗口大小(viewportSize)

2. 參數輸入輸出

  • 輸入:url地址
  • 輸出:文件名

3. 具體代碼(以A4紙輸出為例)

var page = require( 'webpage' ).create();
var oss_url, out_pdf;
var system = require('system')
oss_url = system.args[1];  //輸入,係統參數
out_pdf = system.args[2]; //輸出, 係統參數

page.viewportSize = { width: 1024, height: 800 };  //viewport size

page.paperSize = {
        format: 'A4',
        orientation: 'portrait',
        margin: '1cm',  //頁邊距
        header: { //如果不需要,可以不用添加
                height: '1cm',
                contents: phantom.callback(function(pageNum, numPages) {
                       //返回頁眉的代碼邏輯
                       }
                })
        },
        footer: { //如果不需要,可以不用添加
                height: '1cm',
                contents: phantom.callback(function(pageNum, numPages) {
                        //返回頁腳的代碼邏輯
                        }
                })
        }
};

page.open( oss_url, function( status ) {
                window.setTimeout(function() {
                        if ( status === "success" ) {
                                page.render(out_pdf);
                        }
                        phantom.exit();
                        }, 300); //超時設置
});

後端代碼

        url := os.Args[1]
        out_pdf := os.Args[2]
        cmd := exec.Command("./phantomjs", "pdfconvertor.js", url, out_pdf)
        cmd.Stdout = os.Stdout
        cmd.Run()

最後更新:2017-04-01 17:00:39

  上一篇:go ArrayBlockingQueue源碼分析
  下一篇:go PostgreSQL 10.0 preview 性能增強 - GIN索引vacuum鎖降低