簡體   English   中英

服務器端的HTML到pdf轉換?

[英]Html to pdf conversion at server side?

我們正在使用包princexml pdf轉換器從html文件創建一個pdf文件。 對於創建html文件,數據由服務器提供。 在使用jquery的瀏覽器中,為pdf創建創建輸入字符串(html代碼)。 從瀏覽器接收到輸入字符串后,服務器會創建一個html文件,該文件是princexml pdf轉換器的輸入,用於創建pdf。

Example for the input string
var sample = "<html>text</html>";//browser side
sample.html converted to sample.pdf //server side 

沒有瀏覽器的幫助,是否可以在服務器端執行相同的操作?

您可以使用像http://phantomjs.org/這樣的無頭瀏覽器。 這允許從渲染頁面生成圖像。 另見http://www.lelesys.com/en/media/technology/phantomjs-as-screen-capture-to-generate-image-pdf-files.html

這允許您使用jquery和其他所有東西 - 因為它使用了實際渲染引擎。 我猜你甚至不需要princexml。 還有一個關於捕獲的常見問題解答頁面: http//phantomjs.org/screen-capture.html

查看wkhtmltopdf - 使用Webkit(QtWebKit)將HTML轉換為PDF @ http://wkhtmltopdf.org

我知道這是一個有點老問題但是因為我找到了一個很好的模塊,我想與大家分享。

名為Puppeteer的模塊可以讓您在無頭模式下運行Chrome,並通過API與其進行交互。 現在,您可以創建一個模板,並通過POST調用獲取該模板的占位符值,並在服務器中動態生成PDF

我創建了一個小POC,這里是它的鏈接: Demo-Puppeteer

我在這里做一些解釋:

    ...........
    const content = await compile(templateName, data);

    /***
     * Launched the headless chrome in memory.
     */
    const browser = await puppeteer.launch();

    /***
     * Created a new page(tab)
     */
    const page = await browser.newPage();

    /***
     * Set the content of the new page
     */
    await page.setContent(content, { waitUntil: 'networkidle0' });
    /***
     * Telling chrome to emulate screen i.e how the page looks if 
     * it would have been rendered in the normal browser.
     */
    await page.emulateMedia('screen');

    const byteArray = await page.pdf({
        format: "A4",
        landscape: true,
        scale: 1.29,
        printBackground: true
    });

    const buffer = Buffer.from(byteArray, 'binary');
    /**
     * We don't need the acknowledgement of this call that is the 
     * reason we are not waiting for this call to return.
     */
    browser.close();

    return buffer;
    .......

現在,這個緩沖區基本上是一個二進制數據,你必須使用Node的文件模塊將它寫在一個文件中。

如需進一步說明,請查看Exlpanation Link

您可以在以下任何一個庫的幫助下實現這一目標......

FPDF - FPDF是一個PHP類,它允許使用純PHP生成PDF文件,也​​就是說不使用PDFlib庫。 FPDF的F代表Free:您可以將它用於任何用途並根據您的需要進行修改。

HTML2PDF - HTML2PDF是一個用PHP4(使用FPDF)和PHP5(使用TCPDF)編寫的HTML到PDF轉換器。 它允許以PDF格式轉換有效的HTML 4.01,並在LGPL下發布。

dompdf - dompdf是一個HTML到PDF轉換器。 從本質上講,dompdf(主要)是CSS 2.1兼容的HTML布局和用PHP編寫的渲染引擎。 它是一個樣式驅動的渲染器:它將下載和讀取外部樣式表,內聯樣式標記以及各個HTML元素的樣式屬性。 它還支持大多數表示HTML屬性。

GIT位置https//github.com/dompdf/dompdf

pdfcrowd - Pdfcrowd API是一個在線工具,可讓您輕松地在PHP應用程序中將網頁和原始HTML代碼轉換為PDF。 PDF是在雲中生成的,不需要第三方庫。 您只需要一個很小的PHP API客戶端庫。

您可以像這樣調用princexml服務器端:

prince sample.html -o sample.pdf 

請參閱命令行文檔

您無需使用瀏覽器即可完成此操作。 目前你正在使用jQuery來生成HTML內容,所以你需要瀏覽器,因為jQuery在瀏覽器中運行,對吧?

您可以通過編寫生成所需HTML內容的服務器端應用程序將HTML代碼的生成移動到服務器端,並將其發送到pdf轉換器。

可以從許多服務器端編程語言中調用Princexml,如下所示: http//www.princexml.com/doc/9.0/

從列表中選擇一種服務器端語言,以該語言生成HTML並將HTML發送到pdf轉換器。 就這樣。

請參閱http://www.princexml.com/doc/7.1/中的文檔您可以選擇服務器端語言並完成工作。 只需制作表格並提交數據即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM