go語言 doc轉換html,go語言使用wkhtmltopdf工具將html轉成pdf

最近收到網友的提問后端怎么把html轉成pdf文件,于是我就把我以前做的例子發出來給大家參考一下,如果對你有幫助的話請點個贊

1.首先選擇適合自己的系統下載wkhtmltopdf工具

mac下載后安裝成功會自動添加到環境變量 直接執行 wkhtmltopdf -V 測試是否安裝成功

hfy@566-Mac-mini ~ % wkhtmltopdf -V

wkhtmltopdf 0.12.5 (with patched qt)

linux環境安裝需要下載好,添加執行權限并手動加到環境變量下面,如果不想加入到環境變量在代碼里寫死路徑也行

2.直接使用下面demo修改下就可以使用了

package main

import (

"context"

"errors"

"fmt"

"io/ioutil"

"os/exec"

"path/filepath"

)

var (

argsError = errors.New("no input file or out path")

fileTypeError = errors.New("the file must be in pdf format")

)

type HtmlToPdf struct {

Commond string

in string

out string

argsMap map[string]string

prams []string

}

func NewPdf() *HtmlToPdf {

args := map[string]string{

"--load-error-handling": "ignore",

"--footer-center": "第[page]頁/共[topage]頁",

"--footer-font-size": "8",

"-B": "31",

"-T": "32",

}

return &HtmlToPdf{

Commond: "wkhtmltopdf",

argsMap: args,

}

}

func (this *HtmlToPdf) OutFile(input string, outPath string) (string, error) {

var pdfPath string

// 輸入 輸出 參數不能為空

if input == "" || outPath == "" {

return pdfPath, argsError

}

//判斷是否是生成pdf 文件

ext := filepath.Ext(outPath)

if ext != ".pdf" {

return pdfPath, fileTypeError

}

this.in = input

this.out = outPath

//構建參數

this.buildPrams()

//執行命令

if _, err := this.doExce();err != nil {

return pdfPath, err

}

return pdfPath, nil

}

func (this *HtmlToPdf) doExce() ([]byte, error) {

ctx, cancel := context.WithCancel(context.Background())

defer cancel()

cmd := exec.CommandContext(ctx, this.Commond, this.prams...)

stdout, err := cmd.StderrPipe()

if err != nil {

return nil, err

}

defer stdout.Close()

//運行命令

err = cmd.Start()

if err != nil {

return nil, err

}

bytes, err := ioutil.ReadAll(stdout)

if err != nil {

return nil, err

}

cmd.Wait()

return bytes, err

}

func (this *HtmlToPdf) buildPrams() {

for key, val := range this.argsMap {

this.prams = append(this.prams, key, val)

}

//添加 輸入 輸出 參數

this.prams = append(this.prams, this.in, this.out)

}

func main() {

pdfOpt:= NewPdf()

htmlDemoPath := "xxxxx/src/demo/test.html"

PdfDemoPath := "xxxxx/src/demo/test.pdf"

str,err := pdfOpt.OutFile(htmlDemoPath,PdfDemoPath)

if err != nil {

fmt.Println("Error ",err)

return

}

fmt.Println(str)

}

效果:

3dce30736279

image.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533149.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533149.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533149.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java sound 多線程同一音頻文件_Java在編程語言中占據何等優勢?

現在是信息時代,出現了各種各樣的行業,在這些眾多行業里面,程序員算是高薪職業。在國內程序員的薪水要比其他行業高一些。也正是如此高薪的誘惑和充滿挑戰性的工作,令程序員近幾年來成為了備受歡迎的職業。程序員日常的工作大多是…

dlna和miracast可以共存嗎_高考化學必備之離子共存問題

發生復分解反應1、有氣體產生。H與CO32ˉ、HCO3ˉ、SO32ˉ、HSO3ˉ、S2ˉ、HSˉ等不能共存如CO32-、S2-、HS-、HSO3-、等易揮發的弱酸的酸根與H不能大量共存,主要是由于CO32-+2H=CO2↑+H2O、HS-+H&#xff…

html向上浮動的方式,JS 實現Div向上浮動的實現代碼

Html 及 JS 代碼如下:復制代碼 代碼如下:style"position: absolute; width: 100px;">我們var newsOne document.getElementById("newsOne");newsOne.style.bottom 0;newsOne.style.left window.screen.availWidth - 100;var bottom 0;fu…

perl數組硬引用_Perl 繼續前行,Perl 7 將是下一代(硬核老王點評版)

它是默認帶有現代行為的 Perl 5,將為以后更大的變化奠定基礎。來源:https://linux.cn/article-12349-1.html作者:Brian D Foy譯者:Xingyu.Wang(本文字數:5043,閱讀時長大約:8 分鐘)近日 召開的 …

html文檔加載,html加載

SQL中進行Join操作時,可以按照以下步驟進行優化。為了方便說明,設表A和表B,且A、B表都有個名為name的列。對A、B表進行join操作。 估計表的大小。 根據每次加載數據的大小,來估計表大小。 也可以在Hive的數據庫存儲路徑下直接查看…

spark將rdd轉為string_八、Spark之詳解Tranformation算子

RDD中的所有轉換(Transformation)算子都是延遲加載的,也就是說,它們并不會直接計算結果。相反的,它們只是記住這些應用到基礎數據集(例如一個文件)上的轉換動作。只有當發生一個要求返回結果給Driver的動作時,這些轉換才會真正運行…

html的過渡屬性,CSS3屬性transition(過渡)多屬性詳解

transform呈現的是一種變形結果,而transition呈現的是一種過渡,通俗點說就是一種動畫轉換過程,如漸顯、漸弱、動畫快慢等。transition和transform是兩種不同的動畫模型。transition屬性是一個簡寫屬性,用于設置四個過渡屬性transi…

2021年呼和浩特高考段考成績查詢,2019屆呼和浩特市高三段考成績排名分析

原標題:2019屆呼和浩特市高三段考成績排名分析不忘初心 天道酬勤╳?校對:劉姝坤?文稿:王濤老師?聲明:如有轉載請聯系并注明出處好樂(巨人)教育2019高三普文理集訓段考班火熱招生中全呼市唯一一家吃住學一體封閉式管理的學校唯一…

dj打碟怎么學_學DJ要不要去培訓學校?

酒吧學DJ打碟他有很多種的說法,有些酒吧他是自己招學生,當這樣的酒吧在現今是挺少的,也有,但要求很高。還有一種就是說你自己在酒吧里上班的人自己招私人徒弟什么的,那也是就學DJ打碟,那一搬酒吧都是怎么學…

html設置table表格的弧度,用CSS3和table標簽實現一個圓形軌跡的動畫的示例代碼

html:其實就是根據table標簽把幾個實心圓div進行等邊六角形的排布,并放入一個div容器中,然后利用CSS3的循環旋轉的動畫效果對最外層的div容器進行自轉實現,當然不要忘了把div容器的外邊框設置圓形弧度的。BMI色盲色弱心率開始測試…

ios時間相差多少天_上海自駕拉薩,走川進青出,應如何規劃線路?需要多少天時間?...

線路總覽上海自駕西藏拉薩,川進青出,全程約8000公里,需用時18~25天,行程主要分為4段:1、進藏之前:上海—成都,2000公里,3~5天;2、川藏線進:成都—拉薩&#x…

儒林外史每回概括簡短10字_早安心語正能量經典短句 一句話的簡短勵志語錄

1、人生就兩件事, 一件是拿事兒把時間填滿,另一件是拿感覺把心填滿 。早安!早安心語正能量經典短句 一句話的簡短勵志語錄點擊添加圖片描述(最多60個字)2、憑著一股子信念往前沖,到哪兒都是優秀的人。生活它從來不會允諾我們一份輕…

半個小時用計算機怎么算,CPA機考計算器操作指南,掌握這些快捷鍵,考試“延長”半小時!...

原標題:CPA機考計算器操作指南,掌握這些快捷鍵,考試“延長”半小時!注冊會計師考試就是一場在有限的時間內得分最多的比拼游戲!不僅要求考生學習各種專業知識,同時還需要掌握一定的策略。例如注會考試采用機…

c均值聚類matlab程序_機器學習筆記-9-聚類

1 K-means算法K-means是最普及的聚類算法,算法接受一個未標記的數據集,然后將數據聚類成不同的組。它是一個迭代算法,假設我們想要將數據聚類成 n 個組,其方法為:選擇K個隨機的點,稱為聚類中心對于數據集中的每一個數據…

php井字游戲代碼_PHP初級筆試題:Tic-Tac-Toe(n階井字棋)判斷勝負

//Tic-Tac-Toe$n 5;//五階棋盤$res array();function check($arr){$n $GLOBALS[n];$res $GLOBALS[res];//已經下過這一步,返回false;沒有,賦值if (isset($res[$arr[1]][$arr[2]])) {return false;} else {$res[$arr[1]][$arr[2]] $arr[0…

js與html編碼不同,js與html中unicode編碼的使用

【轉】javascript和html中unicode編碼和字符轉義的詳解不是十分理解unicode和html轉義的情況下,可能會誤用,所以下面會對它們再做比較容易理解的解釋: 1.html中的轉義:在html中如果遇到轉義字符(如“ ”),不管你的頁面字符編碼是utf-8 ...javascript和html中unicode編碼和字符轉…

g標簽 怎么設置svg_SVG g元素

SVG 元素SVG 元素用于將SVG形狀分組在一起。分組后,您可以像變形單個形狀一樣變換整個形狀。與 不能單獨成為轉換目標的嵌套 元素相比,這是一個優勢。您還可以設置分組元素的樣式,并像對待單個元素一樣重復使用它們。元素g是用來組合對象的容…

html和css哪個優先,CSS3 | 樣式和優先級

css3一般介紹:CSS注釋:/*CSS*/CSS長度單位:1.px(像素)2.em(倍數,一般用于文字)一、HTML嵌套CSS3樣式:1.外部(推薦)例如HTML文件為index.html將樣式放入另一文件中,index.css以上兩個文件放入同一文件夾下2.…

java上傳視頻到七牛云_Java進階學習:將文件上傳到七牛云中

Java進階學習:將文件上傳到七牛云中通過本文,我們將講述如何利用七牛云官方SDK,將我們的本地文件傳輸到其存儲空間中去。JavaSDK:https://developer.qiniu.com/kodo/sdk/1239/java#server-upload官方SDK:https://devel…

計算機網絡討論4,計算機網絡實驗四

實驗四IEEE 802.3協議分析和以太網一、實驗目的1、分析802.3協議2、熟悉以太網幀的格式二、實驗環境與因特網連接的計算機網絡系統;主機操作系統為windows;Ethereal、IE 等軟件。三、實驗步驟(注:本次實驗先完成前面的“1 俘獲并分析以太網幀…