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…

perl数组硬引用_Perl 继续前行,Perl 7 将是下一代(硬核老王点评版)

它是默认带有现代行为的 Perl 5,将为以后更大的变化奠定基础。来源:https://linux.cn/article-12349-1.html作者:Brian D Foy译者:Xingyu.Wang(本文字数:5043,阅读时长大约:8 分钟)近日 召开的 …

spark将rdd转为string_八、Spark之详解Tranformation算子

RDD中的所有转换(Transformation)算子都是延迟加载的,也就是说,它们并不会直接计算结果。相反的,它们只是记住这些应用到基础数据集(例如一个文件)上的转换动作。只有当发生一个要求返回结果给Driver的动作时,这些转换才会真正运行…

2021年呼和浩特高考段考成绩查询,2019届呼和浩特市高三段考成绩排名分析

原标题:2019届呼和浩特市高三段考成绩排名分析不忘初心 天道酬勤╳✎校对:刘姝坤✎文稿:王涛老师✎声明:如有转载请联系并注明出处好乐(巨人)教育2019高三普文理集训段考班火热招生中全呼市唯一一家吃住学一体封闭式管理的学校唯一…

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个随机的点,称为聚类中心对于数据集中的每一个数据…

html和css哪个优先,CSS3 | 样式和优先级

css3一般介绍:CSS注释:/*CSS*/CSS长度单位:1.px(像素)2.em(倍数,一般用于文字)一、HTML嵌套CSS3样式:1.外部(推荐)例如HTML文件为index.html将样式放入另一文件中,index.css以上两个文件放入同一文件夹下2.…

锁定计算机 背景图片,win7系统电脑更换锁屏壁纸的方法

当win7系统电脑在一段时间不动的话就进入锁屏状态,然而很多用户觉得默认的锁屏壁纸不好看,就想要更换自己喜欢的锁屏壁纸,那么win7怎么更换锁屏壁纸呢?下面给大家讲解一下win7系统电脑更换锁屏壁纸的方法。1、同时按下窗口键winR组…

计算机二级循环队列知识点,考点!计算机二级考试公共基础知识冲刺复习笔记:栈、队列和循环队列...

小编所收集到的相关计算机二级考试公共基础知识冲刺复习笔记:栈、队列和循环队列的资料 大家要认真阅读哦!1、栈(Stack)又称堆栈。(1)栈是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。人们把此端称为栈顶,…

lua 字符串包含_Programming in Lualua学习第11期 Lua模块与包

微信公众号:GameToolDev关注可了解更多的游戏工具开发教程。问题或建议,请公众号留言;从Lua 5.1开始,我们可以使用require和module函数来获取和创建Lua中的模块。从使用者的角度来看,一个模块就是一个程序库,可以通过r…

.net 从txt中读取行数据_【VBA项目】从指定文件中读取数据并绘制图表

VBA 是一种很久远的编程语言,但并不过时。在满足以下两个条件时,借助 VBA 可以极大的提升生产率,降低出错率:你的电脑上不允许自主安装软件; 你需要执行的工作中大部分的步骤都是固定且重复的。项目背景近期接到一个工…

axure实现复选框全选_jq简单的全选、反选和全不选效果

jquery是很实用和方便的前端效果库,可以让我减少很多的操作和节省很多的时间。今天,我们来说一下jq的全选、全不选和反选效果,本篇讲的是最简单简洁的jq全选、全不选和反选的例子。如果还有什么其他的功能要求可自己根据所学到的基础来扩展一…

计算机设备管理器驱动,设备管理器安装驱动程序的详细教程

系统出现问题,很多人都会选择重装系统。但系统重装后,我们所做的第一件事,就是安装驱动。有的驱动程序有安装包,直接安装就行了。但是有的驱动是只有驱动程序文件,而没有执行程序,这时候就需要通过设备管理…

电路串联和并联图解_一个关于交流电路谐振现象的仿真实验

对于一个具有电阻、电感、电容的交流电路中,交流电源两端的电压一般不和它输出的电流同相位。如果调节电路的参数或者电源频率使它们同相位,这时电路就发生了谐振现象。按照发生谐振现象的电路不同,可以分为串联谐振和并联谐振。1、串联谐振在…

sync不生效 vue_Vue实战项目-记账器-重要知识点汇总

历时3周,记账器项目终于可以运行了,这次项目是基于Vue开发,用到了typeScript和Scss,下面基于项目做一个阶段性的总结,回顾一下项目中用到的知识点。一.组件一开始用的是JS对象的写法:构造选项:{ data(){ret…

fifo页面置换算法设计思路_千万级并发!如何设计一个多级缓存系统?

什么是一个多级缓存系统?它有什么用?我们又如何设计一个多级缓存系统?图片来自 Pexels所谓多级缓存系统,就是指在一个系统的不同的架构层级进行数据缓存,以提升访问效率。我们都知道,一个缓存系统,它面临着许多问题&#xff0c…