Golang实现DOCX转PDF的最佳实践
Golang实现DOCX转PDF的最佳实践 大家好。
有没有允许将 .docx 转换为 pdf 格式的库? 我找到的那些库能够将不同格式转换为 txt,或者从 HTML 转换为 PDF,但不能从 .docx 转换为 pdf。
你们能在这方面帮助我吗?
4 回复
你提供的那些链接对我没用。它们要么使用云上传,要么依赖LibreOffice,这些选项对我都不适用,因为我的文件中包含敏感数据。
你知道还有其他方法可以实现吗?
在Go中实现DOCX转PDF,推荐使用unidoc/unioffice库,它提供了完整的Office文档处理能力。以下是具体实现:
package main
import (
"fmt"
"log"
"os"
"github.com/unidoc/unioffice/document"
"github.com/unidoc/unioffice/document/convert"
)
func convertDocxToPDF(inputPath, outputPath string) error {
// 读取DOCX文档
doc, err := document.Open(inputPath)
if err != nil {
return fmt.Errorf("打开DOCX文件失败: %v", err)
}
defer doc.Close()
// 创建PDF转换器
converter := convert.NewConverter(doc)
// 转换为PDF
pdfBytes, err := converter.ToPDF()
if err != nil {
return fmt.Errorf("转换PDF失败: %v", err)
}
// 保存PDF文件
err = os.WriteFile(outputPath, pdfBytes, 0644)
if err != nil {
return fmt.Errorf("保存PDF文件失败: %v", err)
}
return nil
}
func main() {
input := "document.docx"
output := "document.pdf"
err := convertDocxToPDF(input, output)
if err != nil {
log.Fatal(err)
}
fmt.Printf("转换成功: %s -> %s\n", input, output)
}
安装依赖:
go get github.com/unidoc/unioffice/v2
如果需要处理复杂的格式和布局,可以使用更高级的配置:
func convertWithOptions(inputPath, outputPath string) error {
doc, err := document.Open(inputPath)
if err != nil {
return err
}
defer doc.Close()
converter := convert.NewConverter(doc)
// 设置转换选项
converter.SetDPI(300) // 设置DPI
converter.SetImageQuality(90) // 设置图片质量
// 添加水印
converter.AddWatermark("CONFIDENTIAL", 45, 0.5)
pdfBytes, err := converter.ToPDF()
if err != nil {
return err
}
return os.WriteFile(outputPath, pdfBytes, 0644)
}
对于批量处理:
func batchConvert(files []string) {
for _, file := range files {
output := strings.TrimSuffix(file, ".docx") + ".pdf"
err := convertDocxToPDF(file, output)
if err != nil {
log.Printf("转换失败 %s: %v", file, err)
continue
}
log.Printf("已转换: %s", output)
}
}
这个方案能保持原始DOCX文档的格式、图片、表格和样式,转换质量较高。

