熬了 2 小时,别人不能转的 PDF 我也能转了! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
hfxsm
V2EX    分享创造

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

  •  
  •   hfxsm 2024 年 5 月 13 日 3847 次点击
    这是一个创建于 695 天前的主题,其中的信息可能已经有所发展或是发生改变。

    引言

    前不久上线的网站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
    Wy4q3489O1z996QO
        1
    Wy4q3489O1z996QO  
       2024 年 5 月 13 日
    wps 、word 、execl 转 Pdf 的 API 现在收费吗?
    API 文档页面文字变灰色了,看不清
    hfxsm
        2
    hfxsm  
    OP
       2024 年 5 月 13 日
    @romotc API 很便宜的。文档最后加个微信可以单独发一份文档哈。
    lozzow
        3
    lozzow  
       2024 年 5 月 13 日
    我想问下做这种纯工具网站能把服务器的钱赚回来吗?没看到网站上的收费项目和广告
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1135 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 23:10 PVG 07:10 LAX 16:10 JFK 19:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86