首页 > 其他分享 >通过ole将docx转换为pdf

通过ole将docx转换为pdf

时间:2024-07-06 19:20:27浏览次数:16  
标签:docx word ole err oleutil file go pdf

package main

import (
	"log"
	"os"
	"path/filepath"

	ole "github.com/go-ole/go-ole"
	"github.com/go-ole/go-ole/oleutil"
)

// NOTE: This example can only run on Windows and requires that Word be installed.

func main() {
	ole.CoInitialize(0)
	defer ole.CoUninitialize()

	// cmd, _ := os.Getwd()
	allArgs := os.Args[1:]
	for _, arg := range allArgs {
		files, _ := filepath.Glob(arg)
		for _, file := range files {
			ext := filepath.Ext(file)
			newFile := file[:len(file)-len(ext)] + ".pdf"
			log.Print(newFile)
			// err := ConvertToPDF(filepath.Join(cmd, file), filepath.Join(cmd, newFile))
			err := ConvertToPDF(file, newFile)
			if err != nil {
				log.Printf("error creating Word object: %s", err)
			}
		}
	}
}

// ConvertToPDF uses go-ole to convert a docx to a PDF using the Word application
func ConvertToPDF(source, destination string) error {
	iunk, err := oleutil.CreateObject("Word.Application")
	if err != nil {
		return err
	}

	word := iunk.MustQueryInterface(ole.IID_IDispatch)
	defer word.Release()

	// opening then saving works due to the call to doc.Settings.SetUpdateFieldsOnOpen(true) above

	docs := oleutil.MustGetProperty(word, "Documents").ToIDispatch()
	wordDoc := oleutil.MustCallMethod(docs, "Open", source).ToIDispatch()

	// file format constant comes from https://msdn.microsoft.com/en-us/vba/word-vba/articles/wdsaveformat-enumeration-word
	const wdFormatPDF = 17
	oleutil.MustCallMethod(wordDoc, "SaveAs2", destination, wdFormatPDF)
	oleutil.MustCallMethod(wordDoc, "Close")
	oleutil.MustCallMethod(word, "Quit")
	return nil
}

不过,代码不太稳定,时不时抛出异常,导致转换失败。

标签:docx,word,ole,err,oleutil,file,go,pdf
From: https://www.cnblogs.com/soarowl/p/18287616

相关文章

  • 语义角色标注(Semantic Role Labeling, SRL)
    语义角色标注(SemanticRoleLabeling,SRL)是自然语言处理中一种重要的任务,旨在识别和标注句子中每个谓词(通常是动词)与其周围单词之间的语义角色关系。每个语义角色表示动作或事件中的不同参与者的角色或语义功能。下面是一些常见的语义角色标签及其含义:ARG0:表示动作的施事(Agent......
  • python-docx库 写入docx时中文不适配问题,中文异常问题解决办法。
    python-docx库写入docx时中文不适配问题,中文异常问题解决办法。通过以下方法可以成功将正文修改为宋体字体。这个是全文设置。fromdocx.oxml.nsimportqndoc=Document()doc.styles['Normal'].font.name=u'宋体'doc.styles['Normal']._element.rPr.rFonts.set(qn('w:......
  • Spark快速大数据分析PDF下载读书分享推荐
    《Spark快速大数据分析》是一本为Spark初学者准备的书,它没有过多深入实现细节,而是更多关注上层用户的具体用法。不过,本书绝不仅仅限于Spark的用法,它对Spark的核心概念和基本原理也有较为全面的介绍,让读者能够知其然且知其所以然。Spark快速大数据分析PDF下载本书作者均来......
  • Mean teacher are better role models-论文笔记
    论文笔记资料1.代码地址2.论文地址https://arxiv.org/pdf/1703.017803.数据集地址CIFAR-10https://www.cs.utoronto.ca/~kriz/cifar.html论文摘要的翻译最近提出的TemporalEnsembling方法在几个半监督学习基准中取得了最先进的结果。它维护每个训练样本的标签预测......
  • 【方法】国标和密评标准的PDF下载
    国标方法1:国家标准全文公开网址:https://openstd.samr.gov.cn/bzgk/gb/ind查询的标准如果不能预览,参照方法2;如果可以预览,进入预览页面,按Ctrl+Shift+I调出控制台,进入控制台,输入如下代码,执行后,点击获取页面,点击下载PDF即可得到PDF页面。$("head").append('<scriptsrc="https://c......
  • AbMole精选文献解读——猪瞬时受体电位通道1(TRPC1)通过Wnt信号通路调控肌肉生长的研究
    AbMole以其卓越的品质、与时俱进的产品、专业无忧的服务,不断鼎力支持全球科学家获得重要的突破性成果。AbMole(奥默生物)是ChemBridge在中国的唯一官方指定合作伙伴。由XinHao, YuFu, ShixinLi等人发表的名为“Porcinetransientreceptorpotentialchannel1(TRPC1)r......
  • P10668 BZOJ2720 [Violet 5] 列队春游
    P10668BZOJ2720[Violet5]列队春游期望考虑每个元素什么情况下会产生贡献,然后分别贡献到答案中。当当前枚举的数\(h_i\)在\(i\)与\(pre_i\)之间有一个数字时那么会有对当前方案会有\(1\)的贡献。不妨将严格小于\(h_i\)的数的数量记为\(s_i\),则大于等于\(h_i\)的......
  • 四种封装 ThreadPoolExecutor 的线程池的使用以及直接使用 ThreadPoolExecutor ,优缺点
    池化思想:线程池、字符串常量池、数据库连接池提高资源的利用率下面是手动创建线程和执行任务过程,可见挺麻烦的,而且线程利用率不高。手动创建线程对象执行任务执行完毕,释放线程对象线程池的优点:提高线程的利用率提高程序的响应速度便于统一管理线程对象可以控制最大并发......
  • pdf如何免费转换为jpg图片?
    随着社会经济的飞速发展,随着工作节奏的加快,越来越多的上班族把图片作为临时储存材料的工具。由于图片保存方式即使快捷也简单,而且保存周期长,不会出现故障或丢失的情况,无论是上传还是浏览图片都比较方便。那么pdf怎么免费转换为图片呢?下面就教大家pdf转图片的方法。方法一、使用在......
  • Python多线程-线程池ThreadPoolExecutor
    1.线程池不是线程数量越多,程序的执行效率就越快。线程也是一个对象,是需要占用资源的,线程数量过多的话肯定会消耗过多的资源,同时线程间的上下文切换也是一笔不小的开销,所以有时候开辟过多的线程不但不会提高程序的执行效率,反而会适得其反使程序变慢,得不偿失。为了防止无尽的线程......