Golang在线将PDF文件转换为Word格式无需邮箱
Golang在线将PDF文件转换为Word格式无需邮箱 大家好,你们好吗?
我正在寻找一个能轻松将PDF文件转换为Word格式的网站,就像 https://pdfinsider.com/en/pdf-to-word 这样。 如果你有任何建议,请与我分享。
你有什么推荐吗? 此致, Allan Max
2 回复
Golang在线将PDF文件转换为Word格式无需邮箱 大家好,你们好吗?
我正在寻找一个能轻松将PDF文件转换为Word格式的网站,就像 https://pdfinsider.com/en/pdf-to-word 这样。 如果你有任何建议,请与我分享。
你有什么推荐吗? 此致, Allan Max
试试 Zamzar。
这里不是讨论这类问题的论坛 
更多关于Golang在线将PDF文件转换为Word格式无需邮箱的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
对于将PDF转换为Word格式的需求,我推荐使用Go语言结合开源库来实现本地化转换,这样可以避免依赖在线服务或提供邮箱。以下是两种可行的方案:
package main
import (
"fmt"
"log"
"os"
"github.com/unidoc/unipdf/v3/extractor"
"github.com/unidoc/unipdf/v3/model"
"github.com/unidoc/unipdf/v3/creator"
)
func convertPDFToWord(pdfPath, docxPath string) error {
// 打开PDF文件
f, err := os.Open(pdfPath)
if err != nil {
return err
}
defer f.Close()
// 创建PDF阅读器
pdfReader, err := model.NewPdfReader(f)
if err != nil {
return err
}
// 创建Word文档
c := creator.New()
numPages, err := pdfReader.GetNumPages()
if err != nil {
return err
}
// 逐页提取文本并添加到文档
for i := 1; i <= numPages; i++ {
page, err := pdfReader.GetPage(i)
if err != nil {
return err
}
// 提取文本
ex, err := extractor.New(page)
if err != nil {
return err
}
text, err := ex.ExtractText()
if err != nil {
return err
}
// 添加段落到文档
p := c.NewParagraph(text)
p.SetMargins(50, 50, 50, 50)
c.Add(p)
// 添加分页符(除最后一页外)
if i < numPages {
c.NewPage()
}
}
// 保存为.docx文件
return c.WriteToFile(docxPath)
}
func main() {
err := convertPDFToWord("input.pdf", "output.docx")
if err != nil {
log.Fatal(err)
}
fmt.Println("转换完成")
}
package main
import (
"bytes"
"fmt"
"io"
"mime/multipart"
"net/http"
"os"
)
func convertViaGotenberg(pdfPath, outputPath string) error {
// 准备文件
file, err := os.Open(pdfPath)
if err != nil {
return err
}
defer file.Close()
// 创建multipart表单
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, err := writer.CreateFormFile("files", "document.pdf")
if err != nil {
return err
}
_, err = io.Copy(part, file)
if err != nil {
return err
}
writer.Close()
// 发送到本地Gotenberg服务
req, err := http.NewRequest("POST", "http://localhost:3000/forms/libreoffice/convert", body)
if err != nil {
return err
}
req.Header.Set("Content-Type", writer.FormDataContentType())
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
// 保存结果
out, err := os.Create(outputPath)
if err != nil {
return err
}
defer out.Close()
_, err = io.Copy(out, resp.Body)
return err
}
func main() {
err := convertViaGotenberg("input.pdf", "output.docx")
if err != nil {
fmt.Printf("转换失败: %v\n", err)
} else {
fmt.Println("转换完成")
}
}
docker run --rm -p 3000:3000 gotenberg/gotenberg:7
# 方案一依赖
go get github.com/unidoc/unipdf/v3
# 方案二依赖
go get -u 标准库即可
这两个方案都无需邮箱注册,方案一适合纯文本PDF转换,方案二通过Docker服务能处理更复杂的格式但需要部署环境。可以根据实际需求选择适合的方案。