Golang在线将PDF文件转换为Word格式无需邮箱

Golang在线将PDF文件转换为Word格式无需邮箱 大家好,你们好吗?

我正在寻找一个能轻松将PDF文件转换为Word格式的网站,就像 https://pdfinsider.com/en/pdf-to-word 这样。 如果你有任何建议,请与我分享。

你有什么推荐吗? 此致, Allan Max

2 回复

试试 Zamzar。 这里不是讨论这类问题的论坛

更多关于Golang在线将PDF文件转换为Word格式无需邮箱的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


对于将PDF转换为Word格式的需求,我推荐使用Go语言结合开源库来实现本地化转换,这样可以避免依赖在线服务或提供邮箱。以下是两种可行的方案:

方案一:使用unipdf库(纯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("转换完成")
}

方案二:使用gotenberg(Docker部署的转换服务)

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("转换完成")
    }
}

部署Gotenberg服务(Docker方式):

docker run --rm -p 3000:3000 gotenberg/gotenberg:7

安装依赖:

# 方案一依赖
go get github.com/unidoc/unipdf/v3

# 方案二依赖
go get -u 标准库即可

这两个方案都无需邮箱注册,方案一适合纯文本PDF转换,方案二通过Docker服务能处理更复杂的格式但需要部署环境。可以根据实际需求选择适合的方案。

回到顶部