V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
hfxsm
V2EX  ›  分享创造

熬了 2 小时,别人不能转的 PDF 我也能转了!

  •  
  •   hfxsm · 11 天前 · 2140 次点击

    引言

    前不久上线的网站www.pdf2docx.cn,有些 pdf 转 word 的时候,存在有些文件存在转换不了的情况,经过查找资料,发现 pdf 还有一些安全属性,导致没有权限去紧张转换 image.png 好家伙,竟然被不允许了,那就找工具修改属性!!! 经过调查,发现qpdf 工具挺好使的,可以很方便解除 PDF 文件的安全属性,比如编辑、打印或页面提取的限制。后台是用 golang 实现的,在 Golang 中调用开源的 qpdf 工具,我们可以轻松完成这一任务。本文将分享如何在 Golang 程序中集成 QPDF ,以及如何处理解除 PDF 限制过程中常见的错误。

    环境设置

    安装 QPDF

    首先,您需要确保系统上安装了 QPDF 。如果还没有安装,请按照以下步骤安装:

    • Windows 用户:在 QPDF Releases 页面下载并解压 qpdf 可执行文件,将其添加到系统 PATH 中,或将 qpdf.exe 与 Golang 项目放在同一个目录下。

    image.png

    代码实现

    在 Golang 中调用 QPDF ,可以使用 os/exec 包中的 exec.Command 函数:

    package main
    
    import (
    	"fmt"
    	"os/exec"
    )
    
    // RemovePDFRestrictions 使用 qpdf 移除 PDF 文件的限制。
    func RemovePDFRestrictions(inputFile, outputFile string) error {
    	// 这里我把 qpdf.exe 放在了本程序的同意目录下。
    	cmd := exec.Command("./qpdf.exe", "--decrypt", inputFile, outputFile)
    
    	// 获取 QPDF 执行结果
    	output, err := cmd.CombinedOutput()
    	outputStr := string(output)
    
    	// 打印完整的 QPDF 命令输出,以便调试
    	fmt.Println("QPDF Output:", outputStr)
    
    	if err != nil {
    		exitError, ok := err.(*exec.ExitError)
    		if ok {
    			// 检查退出状态
    			if exitError.ExitCode() == 3 {
    				// 退出状态 3 通常意味着警告
    				fmt.Println("QPDF completed with warnings.")
    				return nil // 忽略这些警告
    			}
    		}
    		return fmt.Errorf("qpdf failed with %s: %s", err, outputStr)
    	}
    
    	return nil
    }
    
    func main() {
    	// 调用函数解除 PDF 限制
    	err := RemovePDFRestrictions("source.pdf", "unrestricted.pdf")
    	if err != nil {
    		fmt.Println("Error:", err)
    	} else {
    		fmt.Println("PDF restrictions removed successfully.")
    	}
    }
    

    错误处理

    上面的代码提供了完整的错误处理逻辑:

    • 警告:如果 QPDF 以退出码 3 退出,它会发出一些警告,但文件通常已经成功生成。
    • 错误:任何其他的退出码都表明执行失败,我们需要报告相关的错误信息。

    总结

    至此,对于被安全属性锁定的 pdf ,就拥有了页面提取权限,可以进行转换了,快来体验下吧,效果杠杠滴。www.pdf2docx.cn

    3 条回复    2024-05-13 14:43:59 +08:00
    romotc
        1
    romotc  
       10 天前
    wps 、word 、execl 转 Pdf 的 API 现在收费吗?
    API 文档页面文字变灰色了,看不清
    hfxsm
        2
    hfxsm  
    OP
       10 天前
    @romotc API 很便宜的。文档最后加个微信可以单独发一份文档哈。
    lozzow
        3
    lozzow  
       10 天前
    我想问下做这种纯工具网站能把服务器的钱赚回来吗?没看到网站上的收费项目和广告
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1007 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:48 · PVG 05:48 · LAX 14:48 · JFK 17:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.