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.mzph.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 俘获并分析以太网帧…