V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
LeviMarvin
V2EX  ›  程序员

PDF 编辑技术很难吗?

  •  2
     
  •   LeviMarvin ·
    LeviMarvin · 18 天前 · 8689 次点击

    市面上 90%的 PDF 软件都是免费查看,付费编辑。要实现 PDF 的编辑功能会很难吗?

    68 条回复    2025-05-27 10:45:30 +08:00
    tcper
        1
    tcper  
       18 天前   ❤️ 7
    PDF 是一个封装格式,主要用于渲染的
    所以 PDF 的编辑是把 PDF 的内容读出来,生成一个类似 office word 让你编辑,保存的时候重新导出 PDF
    从软件开发者角度看,导出功能有很多标准的库可以用,这个编辑功能是他们自己费很多功夫研发的,自然都用来收费了。
    HaroldFinchNYC
        2
    HaroldFinchNYC  
       18 天前
    我正在写一个非常简单的 nodejs addon with c++ pdf library
    我设置为 private
    所以,将来肯定是要收费的
    ratazzi
        3
    ratazzi  
       18 天前 via iPhone   ❤️ 2
    当然很难,技术规范将近两千页,涉及文本渲染、图形渲染,字体处理等
    xtreme1
        4
    xtreme1  
       18 天前
    而且 adobe 有很多私有实现没写到 pdf 的 iso 标准中的
    zhengfan2016
        5
    zhengfan2016  
       18 天前
    icloud 上传下载也不难,但是很多 ios app 就把 icloud 同步做成付费功能
    kzfile
        6
    kzfile  
       18 天前
    pdf 是偏向固化的格式,二次编辑就是很麻烦
    ccpp132
        7
    ccpp132  
       18 天前   ❤️ 2
    pdf 编辑很恶心的,就像做个工具让你去修改一个编译好的程序
    ratazzi
        8
    ratazzi  
       18 天前 via iPhone   ❤️ 1
    图形不说,文本渲染就是个巨坑,unicode 多种文字,字体 subset
    putaozhenhaochi
        9
    putaozhenhaochi  
       18 天前 via Android
    是的 我试用了一堆应用。后来开了 wps 会员
    Rorysky
        10
    Rorysky  
       18 天前
    博大精深
    kokerkov
        11
    kokerkov  
       18 天前
    如果你说的页面之间的编辑,比如旋转合并拆分,那么挺简单的。

    如果是指你要直接在上面编辑文本,那么从技术上是很蛋疼的存在。因为 PDF 本来就是用来显示而不是用来编辑的,出版界最终输出 pdf 文件给出版社印刷。比较类似 JPG 文件,它不支持图层(本意就只是用来显示的),所以你直接编辑 JPG 是很蛋疼的。

    一般来说 PDF 编辑只限于修改一点点小错误,如果你真的想排版,请使用专门的排版软件。简单的话,可以用 power point 。更专业一点用微软 publisher ,终极的就是 adobe indesign.
    kokerkov
        12
    kokerkov  
       18 天前
    @putaozhenhaochi 没有正版情节可以用 foxit pdf editor, 挺好用的。
    evan9527
        13
    evan9527  
       18 天前
    很难,所以我都是转换成图片,等于编辑图片,就很简单但是费时间。
    angrylid
        14
    angrylid  
       18 天前
    处理这种东西需要大量脏活累活。原来稍微研究过 OOXML ,规范文档就有五千页,还有一些微软自己的私有实现和标准不兼容的,但是因为他的垄断地位你又不得不以他为准。PDF 的情况估计类似
    Mithril
        15
    Mithril  
       18 天前
    PDF 就是个桶,里面装的东西乱七八糟。虽然有标准,但你照着标准做产品,做完了大概率你的客户会给你报各种东西编辑不了。

    等你挨个反馈处理完又是一大笔精力和投资。很难做到免费去搞这些细节。
    lucasj
        16
    lucasj  
       18 天前
    @ccpp132 #7 有没有可能反编译,修改源码后再编译
    chutsetien
        17
    chutsetien  
       18 天前   ❤️ 2
    就这么说吧,OP 你这句话,PDF 完全可以做到让它被记录的字符顺序是这样:

    要件辑 9F 免付很现吗会实编的 P 看市软面。都,?编 0D 查 % 上功 F 是费难 PD 辑能的费

    但是显示出来还是你所说的那样一行。

    (更有甚者,被存储下来的都是一些不存在的字,真复制出来全是框框,但是显示出来依旧正常。)
    putaozhenhaochi
        18
    putaozhenhaochi  
       18 天前
    @kokerkov
    程序员职业都不支持正版 说不过去吧.

    WPS 好用,编辑文字也很流畅, 试用的 smallpdf 那些,编辑完字都对不齐,排版都乱了
    totoro52
        19
    totoro52  
       18 天前
    技术不难,难在规范一大堆,而且各家各的标准,你想要编辑任意的 pdf 文件还要去研究其他人的标准
    ysc3839
        20
    ysc3839  
       18 天前
    举个例子:
    Word 里面一段文字,设置了开头缩进,然后文字很长自动换行了。
    实际在 PDF 里面,是先定位到缩进后的位置,输出这一行文字。然后再定位到下一行的位置,输出下一行文字。
    等于是变成了 PPT ,一行文字一个文本框这样。要编辑的话,就只能编辑这一个文本框内的文字。
    而且上述还只是比较标准的 PDF ,实际上完全可以输出一个文字定位一次,等于每个文字都是一个独立的文本框。甚至还有输出图片,然后附加上隐藏的可选中文字这种操作。
    lucasj
        21
    lucasj  
       18 天前
    话又说回来,为什么要去编辑 PDF 。PDF 的本意不就是不可编辑吗?
    Chevalierbite
        22
    Chevalierbite  
       18 天前
    可以试试 ABBYY 的 PDF 编辑,一直在使用。
    kokerkov
        23
    kokerkov  
       18 天前
    @chutsetien 估计你遇到的是方正排版软件输出的 pdf 。他们用的字体编码不是通用的...
    tinytoadd
        24
    tinytoadd  
       18 天前
    这点确实很奇怪,按理来说页面重排、添加和删除 应该不难。但开源软件和商业软件里似乎没找到用起来很顺手的。反而是 Mac 自带的预览在这方面做的很好,可以 drag and drop 轻松搞定。
    akira
        25
    akira  
       18 天前
    是的,难
    ShadowPower
        26
    ShadowPower  
       18 天前
    很难,类似于从机器码反编译成源码,而且还没有完整的手册可以参考
    ccc008
        27
    ccc008  
       18 天前   ❤️ 1
    Adobe 自己家的 pdf 编辑器 Acrobat 都不好用
    silvernoo
        28
    silvernoo  
       18 天前   ❤️ 3
    史诗 pdfgear
    ksmiloLove
        29
    ksmiloLove  
       18 天前
    是的,难,快逃
    liuzimin
        30
    liuzimin  
       18 天前   ❤️ 1
    @silvernoo #28 我也在用这个 pdf gear ,真的好用,不光能免费编辑,而且还有各种转换和导出,而且本体还很轻巧!真是神了。不过好像官方说不排除后续会改收费?反正我是把当前版本备份收藏了。
    iseki
        31
    iseki  
       18 天前 via Android
    工作量很大,这种规模的软件很难不以盈利为目的
    june4
        32
    june4  
       18 天前
    这和 pdf 格式本身有多复杂关系不大,主要是转成 pdf 就丢了所有原 word 格式信息,现在要重转回可编辑的 word ,几乎快和从图片转回 word 差不多了,永远做不完美只能尽量准确
    说实在的就是人类内耗,如果原始 pdf 可以加个 meta 信息把原格式放入就没这么多事了
    yolee599
        33
    yolee599  
       18 天前 via Android   ❤️ 1
    难,而且是非常难,PDF 就是一个输出的格式,他就不是用来编辑的。你这个问法相当于:.exe 编辑技术很难吗?
    caiqichang
        34
    caiqichang  
       18 天前
    @lucasj #16 照这么说,没有加密的软件都算开源
    laLuna
        35
    laLuna  
       18 天前
    PDF 创造之初就是为了避免被随意修改吧,保证大家看到的是一样的内容
    bjtugun
        36
    bjtugun  
       18 天前 via Android
    有按次按天付费的吗,就一年用那么几次,不想开月会员
    huaweii
        37
    huaweii  
       18 天前 via Android
    这个问题稍微了解下甚至问下 GPT 就能得到很全面的答案了。我希望楼主你问这个问题是为了骗金币的,不然的话你作为程序员这点 sense 都没有的话...
    xiri
        38
    xiri  
       18 天前 via Android   ❤️ 6
    多年前看到的一篇文章,解释的挺清楚的:理解数字世界中的纸张:PDF | 科普
    https://sspai.com/post/47092

    PDF 与其说是一种数字文档,不如说是实体文档在数字世界中的影像。对 PDF 的操作,很大程度上可以看成对真实纸张的操作,只是操作环境从物理世界换到了数字世界而已。PDF 的创建就是一种虚拟的打印,复制 PDF 文字的过程更像是一种抄写,而 PDF 的编辑实质上是一种涂改。

    这也是为什么“导出”PDF 有时也叫作“打印”
    xiri
        39
    xiri  
       18 天前 via Android
    @xiri 比如删掉一段文字中的一个字符这个简单的操作,对于 TXT 之类的电子文档格式,被删字符后的所有字符顺序接上来是很自然的。
    但是对于已经打印出来的一份纸质文档,从其中扣掉一个字符(比如用胶布粘掉?😂)只会在原地留下一个空位,要实现我们习惯的编辑效果实际需要把被删字符和其后面的所有字符都扣掉,再重新把新的字符打印上去
    ouqihang
        40
    ouqihang  
       18 天前 via Android
    以前用 latex ,用 N 张照片构建 GIF 动画进 PDF 。有些阅读器不能正常播放,Adobe 可以。
    后来有人把 CAD 立体模型放进去,像是 3 维立体图那样操作。至于 PDF 里面放代码是常规操作了,这里面有安全问题。
    有些软件喜欢打开 PDF 就 OCR 。。。
    nnegier
        41
    nnegier  
       18 天前 via Android
    不懂就问呀,能渲染不就能修改吗?为什么单说修改难呢
    importmeta
        42
    importmeta  
       18 天前
    需要另起炉灶再创造个 pdf.
    redca
        43
    redca  
       18 天前
    往往免费的最贵
    yulon
        44
    yulon  
       18 天前
    那你自己做个呗,PDF 基本就是的一堆有二维坐标的小图片,你要重新去猜他的段落结构,很多明明是一行的文字,在像素上也是高低不一的
    huyudong1991
        45
    huyudong1991  
       18 天前 via Android
    https://www.ilovepdf.com/zh-cn
    每个 ip 可以免费转换几个,用完换个 ip 继续,转的非常优质(英文的文件),中文的没试过
    w568w
        46
    w568w  
       18 天前
    第一,PDF 不是文本格式而是印刷格式,印刷格式从源头上来说就没想着让你编辑方便。每一个字都可以是不同字体,可以是位图,可以是矢量,可以用坐标定位……

    就像楼上说的,把主帖这段话的汉字顺序完全打乱,转换为图片,然后用绝对坐标安放到对应的位置,你觉得 PDF 编辑器要怎么为你编辑?每个字一个框吗,还是一个笔画一个框?

    很多可复制文字 PDF 的原理都是辅助标记文本上去(这个矩形内有 xxx 文本),你看到的文字本身实际上都是字体渲染或者图片。这就更不可能「编辑」看到的文本了。

    第二,公开的 PDF 规范实在太复杂。更何况 Adobe 还弄了很多私有规范不公开,只能在自家的阅读器里看。
    bigtear
        47
    bigtear  
       18 天前
    你这个问题和之前遇到的一个产品经理一样,都低估了处理 PDF 的难度。
    一方面是因为技术上确实很有难度,像楼上比喻的一样,类似将汇编逆向为高级语言的源代码;
    另一方面前人做出来的不开源,这个领域每个新人来都是从零开始。

    计算机现在之所以这么先进发展迅速,离不开大佬们无私的分享和奉献。
    Mandelo
        48
    Mandelo  
       18 天前
    用常识想一想,要是简单价格不早就被卷下来了
    WhatTheBridgeSay
        49
    WhatTheBridgeSay  
       18 天前
    @silvernoo #28 感谢,解决了我一直以来缺少一个全能且干净的 PDF 软件的困扰
    lefer
        50
    lefer  
       18 天前
    @xiri #38 想来也觉得奇怪,本来就是一个 [打印并仅用于在不同设备上呈现一致的阅读效果] 的文件格式,结果大家还特别喜欢直接在这个 [打印] 格式中直接修改数据。

    太奇怪了。。
    twig
        51
    twig  
       18 天前 via iPhone
    @nnegier 就好像双击程序就能跑。但程序就不是一个数量级的难度了。
    C02TobNClov1Dz56
        52
    C02TobNClov1Dz56  
       18 天前
    @lefer 谁让文档提供方不提供 word 源文件呢...
    nnegier
        53
    nnegier  
       18 天前 via Android
    @twig 我的意思是,渲染不是需要读出所有数据然后显示吗,既然都读出来了,还不能编辑吗?
    loading
        54
    loading  
       17 天前   ❤️ 2
    冷知识:
    PDF 文件里面可以运行 Linux
    loading
        55
    loading  
       17 天前
    sir283
        56
    sir283  
       17 天前
    其实 op 可以自己先实现一般 free 的 pdf editor 给大伙用。
    opentrade
        57
    opentrade  
       17 天前
    不难,楼主做一个,造福人类
    vfxx
        58
    vfxx  
       17 天前
    福昕高级 PDF 编辑器 FoxitPhantomPDF 可以编辑 PDF 文件,还是很好用的。
    tairan2006
        59
    tairan2006  
       17 天前
    pdf 编辑非常麻烦

    最便宜的还是 wps 会员
    iyaozhen
        60
    iyaozhen  
       17 天前   ❤️ 1
    有点像 DNA 表达成蛋白质了。你无法还原为 DNA ,在蛋白质上猜 DNA 还是有点难
    stone981023655
        61
    stone981023655  
       17 天前
    恭喜你, 你要完成一个基础版本的 WPS(PDF)了.
    Odyssey98
        62
    Odyssey98  
       17 天前
    @iyaozhen 很精辟的比喻
    pythonee
        63
    pythonee  
       16 天前
    所以,我一直很佩服排版类、字体处理类软件,比如 knuth 搞的那几个
    WesleyWong
        64
    WesleyWong  
       16 天前
    代码操作 PDF 对于文本的修改, 就是覆盖一层白色背景,再添加文本. 要直接修改原内容太难了.
    Mr54
        65
    Mr54  
       16 天前
    自从了解过排版、编辑、修改这类的文字类软件,什么富文本,什么数学公式,我发现这群大佬是真他妈牛逼啊,这脑子不知道怎么长的。
    Projection
        66
    Projection  
       16 天前
    说几个编辑 PDF 的难点(只是根据我目前的经验总结,还没有阅读过 PDF 标准):

    需要理解文档语义:页眉、页脚、段落、标题等语义信息一般不包含在 PDF 中,只有 tagged PDF 才可能有些许帮助。

    就地编辑可能导致重排:PDF 是基于绝对坐标的,不像 Word 是基于流式内容。修改文字后可能破坏排版,导致需要部分或全部重新排版。当然好处就是任何 PDF 阅读器看到的内容几乎一样。

    排版本身就不简单:想想 LaTeX 需要支持很多字体特性、断行算法、表格分页、浮动体支持,PDF 编辑器重新生成的内容质量不高。

    字体子集化:PDF 文件常只嵌入实际使用中字体的字形,导致新增文字时字体中可能缺少对应字形,无法正确显示。

    编码与文字映射复杂:PDF 中的文本内容不一定使用 Unicode 编码,而是引用字体中自定义的字形编码,编辑器需要反向映射这些编码才能恢复原始文字。还有合字或上下文替换只体现为一个字形。还有些时候 PDF 复制出来都是错的,更别说还原了。

    字体布局信息不可逆:如 kerning (字偶间距)等 OpenType 特性常以坐标偏移体现在 PDF 中,这种低级信息很难还原为原始高层语义,并且嵌入的字体也不会有这个表。

    不过有些编辑还是很好做的:旋转页面(修改、覆盖(非就地)编辑、手工删除页面内容(不需要重排)

    建议看看 qpdf 作者写的 Text in PDF:
    https://medium.com/@jberkenbilt/text-in-pdf-introduction-df3dd3dfa9ea
    Projection
        67
    Projection  
       16 天前
    说一个意思的,PDF 里面画不了圆,你看到的“圆”一般都是 4 段三次贝塞尔曲线
    XYZSUN
        68
    XYZSUN  
       15 天前
    @Projection illustrator 其实也是这么实现的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3821 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:50 · PVG 08:50 · LAX 17:50 · JFK 20:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.