如何编辑PDF文件?

我通常有两个需求:
情景A. 更改单个PDF页面。
在这种情况下,我有一个PDF文件,但没有用于创建该PDF的原始源文件。我不想尝试从头开始重新创建文档。我想打开PDF并进行一些更改。这种情况的一个很好的例子是:我负责在露营地规划一个大型活动,我有一个露营地的PDF文件。我想以那份文件为基础,突出显示一些部分,添加一些标签,删除一些与此无关的部分。
或者
情景B. 合并PDF或从PDF中提取页面
这种情况通常发生是因为我希望得到一个由不同程序创建的部分组成的单个PDF可交付物。在这种情况下,我拥有所有文档的源文件,但它们无法很好地协同工作,无法轻松地创建一个单独的PDF可交付物。对于其中的某部分,我可能想使用Libre Office Writer。对于另一页,我可能想使用Gimp。还有另一页,我可能会使用Libre Office Calc。我可以使用Writer作为主文档,并将图像或Calc对象嵌入其中,但是为了获得最终控制权,无法击败将分别合并的PDF文档。
在Ubuntu中,编辑PDF的最佳工具/流程是什么?

1介意将您的答案添加到此链接:http://askubuntu.com/questions/72920/is-there-a-better-way-to-redact-a-pdf 并标记此问题为第一个问题的重复?您还可以在另一边稍微编辑标题和问题。这样可以更加一致,确保信息位于一个地方。 - Bruno Pereira
我完全支持将最好的信息整合在一起,这样人们就不必去十个地方获取信息了... 在这种情况下,如果我把那个问题改成我的问题,其他评论和解决方案就会变得毫无意义,对吧? - snowguy
如果你愿意,我们可以清理一下,或者将另一篇帖子合并到这个帖子中。你可以看一下,然后告诉我你认为什么是一个好的解决方案,我全听你的。 - Bruno Pereira
我今天没有进一步的时间来处理这个问题,但明天会有。我发帖是为了帮助社区,绝对不想通过重复问题而造成更多的困惑。我确实觉得另一个问题(涂抹)是一个非常具体的问题,许多答案都涉及到涂抹的特定问题(而不是一般修改)。我会仔细考虑的,但我在这里还是新手。我很乐意听取你的建议,所以请告诉我你认为最好的解决方法是什么。谢谢。 - snowguy
今晚我会清理它,如果你发现你的帖子因某些原因被关闭,请将你的问题移动到另一个帖子。这是非常好的信息,格式也很好,我们真的很感激。别忘了,我们可以撤销网站上的任何东西(大部分),所以如果你不同意,我们总是可以改变一两件事情。 - Bruno Pereira
标签是什么?它是与PDF相关的概念,还是页面上具有给定属性和位置的一些文本? - Ciro Santilli OurBigBook.com
cirosantilli,我上面所说的“标签”的意思是后者——PDF上某个位置的一些文本。 - snowguy
https://superuser.com/q/380196/455690,Xournal非常有效果。https://superuser.com/a/380237/455690 - MycrofD
15个回答

LibreOffice绘图

这给我留下了深刻的印象:

sudo apt-get install libreoffice
libreoffice my.pdf

只需打开PDF文件,进行编辑,然后导出为PDF格式。
编辑工具显示在窗口底部的工具栏中(我花了一些时间才找到它...)。
到目前为止,我发现的相关功能集(Ubuntu 13.04,LibreOffice 4.0.2.2)有:
- 删除页面:右键单击左侧页面列表上的页面 > 删除页面。另请参阅:如何提取PDF的页面范围/部分内容? - 更改页面顺序:拖放页面到页面列表中 - 编辑现有文本字段(编辑文本、格式和位置)。只需使用选择工具双击两次进入编辑模式。 - 添加新的文本字段。在底部选择文本工具(T),选择所需的文本区域,然后输入文字。 - 编辑非文本字段对象,如线条或项目符号。 - 创建可填写的PDF表单(启用“表单”工具栏,并确保选择“创建PDF表单”)。
我找不到非常方便的突出显示方法,但你可以通过编辑文本属性来设置红色和加粗来达到目的。不过,我无法更改背景颜色。
如果我错过了一些好的功能,请编辑并添加它们!
这是我在6.4.6版本上编辑从此ODT导出的PDF的屏幕截图:https://github.com/cirosantilli/media/blob/f3497274fffcb043b9751c903c9fe715a5b023ce/test.odt

enter image description here

当然,正如您在上面的截图中所看到的那样,PDF文件没有原始ODT文件那么多的信息。例如,我一次只能编辑一个可见行的段落,而后续段落不会“回到”正确的大小,因为PDF文件并不是设计用来进行编辑的。
注意:我知道它对某些类型的PDF文件无法处理,这已经发生过了。
如果您遇到这种情况,请在他们的错误跟踪器https://bugs.documentfoundation.org/上提交一个最小、超详细和可重现的错误报告,以便开发人员可以解决该问题,并将链接作为评论发布。当我遇到这种情况时,我懒惰/经验不足,没有这样做 :-)
尽管如此,在我最近的检查中,它仍然是最好的开放解决方案,并且大部分时间都能正常工作。

2对于"场景A",LibreOffice的PDF导入器(如果您使用预装有Ubuntu或PPA版本,则可能需要单独安装它),而对于"场景B",pdftk是最简单(但非常强大)的工具。另外,在某些情况下,也可以使用Inkscape来处理"场景A"。 - carnendil
如果有人知道,请添加安装步骤,我很久以前安装过,不记得具体是怎么做的了。我不认为我明确地添加了PDF导入器,但我可能记错了。 - Ciro Santilli OurBigBook.com
4如果您没有安装来自libreoffice.org的社区提供的LibreOffice,则必须执行sudo apt-get install libreoffice-pdfimport - carnendil
2生成的PDF丢失了一些元素,但LibreOffice勉强可以使用,谢谢。 - Ethereal
15对我来说不起作用;它会搞乱整个PDF,似乎是因为它没有使用字体信息。 - ᴠɪɴᴄᴇɴᴛ
9对字体处理得不好。 - Raphael
@Raphael,非常欢迎提供一个错误报告的链接;-) 同意它还不完美。 - Ciro Santilli OurBigBook.com
3令人印象深刻!非常适合快速填写PDF注册表格。 - Patrick Refondini
2可能适用于一些简单的PDF文件,但会扰乱我尝试的那个。然而,Foxit(见下方答案)可以完美运行。 - nutty about natty
@nuttyaboutnatty 如果你可以的话,请提交一个关于你的PDF文件以及它是如何生成的错误报告。谢谢。 - Ciro Santilli OurBigBook.com
@nuttyaboutnatty 谢谢!如果你找到了一份可以分享和完整生成细节的文件,请将其放在他们的错误跟踪器上,并在评论中附上链接。 - Ciro Santilli OurBigBook.com
1加载花了好久时间。我放弃了,安装了pdfshuffler,旋转了需要旋转的页面,并在libreoffice打开我的文件之前保存了更改。 - craq
@craq,感谢你的报告,请创建一个 bug 报告,详细向开发人员反馈此问题。 - Ciro Santilli OurBigBook.com
1这对我来说真是太糟糕了。只是想签署一个文件,结果却无法正常工作——为了保存签名,你必须导出,而导出会因为字体问题而改变整个布局,导致所有的文字都超出页面范围。 - Caleb Stanford
@6005,感谢你的报告。请在上游开一个问题,并在确认后我会链接到它。 - Ciro Santilli OurBigBook.com
1弄乱了许多字体,就像别人说的那样。 - qwr
1它肯定具备所需的功能,但我刚刚尝试用Libre Office Draw打开一个LaTeX PDF文档,结果格式完全混乱了。我的所有LaTeX公式和.eps图像都完全损坏了。 - Ente Fetz
@EnteFetz 提供一个示例PDF,希望还有LaTeX源代码 :-) - Ciro Santilli OurBigBook.com
我尝试了大约5分钟,只是想插入文本:点击文本图标然后点击页面,让我选择我点击的任何内容。我找不到任何地方可以输入我的文本。接下来我尝试了Xournal,在5分钟内,我填满了我需要填写的每一块文本。 - vvvvv

LibreOffice Draw对我来说不起作用,因为字体完全混乱,导致文档的格式也乱了。
以下是三个多年来一直对我有效的解决方案。

PDF-shuffler

我经常需要合并PDF文档(如B方案),我发现PDF-shuffler简单方便。我还用它从较大的PDF文档中提取页面,效果也很好。PDF-shuffler的图形用户界面简单易用,而且一直都能正常工作。

Gimp

有时候在A方案中,你只想将PDF转换为图像,然后对图像进行处理。如果你不知道矢量图形和图像的区别,那么你可能想要转换为图像,而GIMP在这方面做得很好。当你用GIMP打开PDF时,它会给你一些关于如何转换的选项。注意分辨率选项。选择一个更高的数字可以得到更大的文件大小和更详细的图像。

Inkscape

事实是,按照上述情况A来编辑PDF文件并没有一种超级简单的方法。这是因为PDF是一种通用格式,当它被转换为PDF时,文档的某些结构会丢失。一个简单的例子:如果你将一个3页的报告转换为PDF,你就破坏了每一页上的文本之间的链接。如果你编辑PDF版本并删除第一页上的一个段落,第2页和第3页的文本不会自动流到第一页上。在原始程序中编辑该文档会更容易。

但出于某种原因,你没有原始文档,所以只能使用PDF进行工作。因此,在按照情况A编辑PDF文档时,请适当调整你的期望。

一旦你适当地调整了你的期望,你会发现Inkscape是大多数工作的最佳工具。它允许你将PDF文档的单个页面导入为Inkscape矢量图形。有一些东西被组合在一起,可能没有太多意义,你可能需要更改一些字体(假设你没有安装原始字体),但它真的很棒。

使用Inkscape确实需要一定的学习曲线,但事实上,如果要处理PDF文件,无论使用哪个程序都会有一定的学习曲线。对我来说,我更愿意将时间投入到学习Inkscape上——这是一个非常棒的矢量图形创建应用程序,可以在许多不同的场景中派上用场——而不是试图弄清楚如何使用专门用于编辑PDF的特殊工具。
祝好运!

PDF Studio适用于Linux吗? - Déjà vu
1@ringø PDF Studio 不是免费的。 - anderstood
1如果您能提供一个LibreOffice无法处理的最小PDF文件,我们可以为其找到/打开一个错误,并将其链接到该错误。我过去也遇到过一些问题,我想可能是某些文档的原因。 - Ciro Santilli OurBigBook.com
使用所见即所得(WYSIWYG)Foxit几乎没有学习曲线。 - nutty about natty
Gimp是最好的选择。Libreoffice把我的PDF文件搞得一团糟,导致文字密集且难以阅读。 - Anon
PDF Shuffler已经过时,根据本页面下面的回答,已被PDF Arranger取代。 - Al F
1Pdf Shuffler不再维护,然而它的分支Pdf Arranger正在维护,并且在最新版本的Ubuntu中可用:https://github.com/pdfarranger/pdfarranger - Étienne

你可以使用最新版本的Master PDF Editor,它可以让你编辑页面上的所有元素。

提示:先尝试最新版本。但是,我试过的最后一个版本1.9.24有一个bug,无法打开pdf文件中的所有图片,而版本1.9.00运行非常好,但是获取它的唯一方法是通过直接链接:
http://code-industry.net/public/MasterPDFEditor-1.9.00.x86_64.tar.gz
http://code-industry.net/public/MasterPDFEditor-1.9.00.i386.tar.gz

正如评论中所提到的,Master PDF Editor 4版本是最后一个不会在PDF上放置水印的免费版本,该版本已从其官网下架,但可以在以下链接获取: http://code-industry.net/public/master-pdf-editor-4.3.89_qt5.amd64.deb

1谢谢分享。这是一个非常有用的PDF编辑器。 - Umair A.
以前是免费的,但现在你必须购买它 :) 无法否认这个工具的伟大! - Umair A.
2我有没有漏掉什么?网站上写着:“基于Linux的版本可供非商业用途免费使用。” - Geppettvs D'Constanzo
1我立刻就被这个吸引住了。主要是因为它完美地保留了所有字体和对齐方式,看起来与原始文件一模一样。嗯...至少对我来说是这样的。 - SpiRail
4这是一个功能齐全的专业应用程序,可以编辑表单并保存它们(即使在免费版本中也可以)。免费版本锁定了一些高级功能,但并不受限制。如果您需要高级功能,那么它的价格是值得的。 - DavidJ
3应该是被接受的答案。这个程序非常专业、完整且可行。它毫无问题地处理了我的任务。 - Bryce
同意 - 这是最佳的PDF编辑和创建选择,而且还有一个适用于Linux的免费版本。 - user3375672
15Master PDF Editor(v5)在免费版本中插入了一个水印(“Created in Master PDF Editor”),这使得它变得无用。为了避免水印,您需要购买完整版(约70美元+税)。 - Jaydin
5@JayDin 在与其他工具进行比较后,购买了Master PDF Editor的完整版。这个程序真的非常专业,值得购买(以我个人的看法)。 - Déjà vu
2@JayDin 安装版本4:https://www.linuxuprising.com/2019/04/download-master-pdf-editor-4-for-linux.html - Seub
1答案中链接的最后一个免费版本(v4)在2021年的Ubuntu 20.10上仍然可用。 - Thomas Kainrad
免费版本会插入水印。它还需要libsane(apt-get install libsane),并且在2023年8月安装为master-pdf-editor-5(dpkg -L master-pdf-editor-5)。 - user643722

我在这个游戏中有点晚了,但最近在为自己谷歌时偶然发现了这个问题。不过,我想推荐 Xournal 作为第一个场景。

它应该在软件中心中,或者您可以直接从终端运行以下命令:

sudo apt-get install xournal

除此之外,我也会支持其他人对于第二种情况的建议,使用pdfshuffler和pdftk。

希望这能帮到你!


4优秀的免费PDF批注软件,如果你有触摸屏,甚至可以像在纸上一样签署文件!!! - champost
3据我所知,Xournal在保存/导出时会将所有内容转换为光栅图像。这并不总是你想要的结果。 - Raphael
6默认的PDF导出会显著降低质量(以及文件大小)。我发现在导出之前启用“选项”>“传统PDF导出”,质量几乎与原始文件相同。 - Johann
@Raphael,它仍然保留了文本,并且文件大小非常相似,我认为它并没有过多地光栅化。 - Ben Winding
1我确认当前版本(4/2021)不会将其内容转换为光栅图,并且在Debian 11上运行流畅。 - Arnaud Bouchez
这对于触摸屏上的PDF注释也非常有效。 - Caleb Jay
我没有看到任何质量下降,在我的情况下,这对于行政文件来说是完美的,正是我在寻找的。谢谢! - adxl

我认为PDF-Shuffler是一个小而相当不错的应用程序。
信息:PDF-Shuffler是一个小型的Python-GTK应用程序,它帮助用户使用交互和直观的图形界面合并或拆分PDF文档,并旋转、裁剪和重新排列页面。它是python-pyPdf的前端。 PDF-Shuffler网站

同意,弗拉基米尔。实际上,我可能也应该修改我的答案。我实际上已经开始使用PDF-Shuffler来合并两个PDF文件这样的简单事情,而不是pdftk。 - snowguy
1我很高兴地确认pdfshuffler在Ubuntu 12.04上可用,并帮助我重新排列了一份糟糕的PDF文件,其中有些页面是颠倒的。太棒了! - Denis Fuenzalida
非常棒的工具。完美地满足了我的需求。 - Rags

PDF-Shuffler在这里提到,非常古老,并且由于很长时间没有更新(自2012年以来),存在一些问题。为了解决这些问题并添加新功能,创建了一个分支,名为PDF Arranger

PDF Arranger

PDF Arranger是一个免费且开源的应用程序,用于操作PDF文档。它可以用于合并、拆分、旋转和裁剪PDF文档,并使用交互式用户界面重新排序页面。
PDF Arranger可在Ubuntu 19.04及更高版本中使用,并可通过以下方式进行安装:
sudo apt install pdfarranger

对于旧版本的Ubuntu,可以通过PPA安装它(由Linux Uprising提供):
sudo add-apt-repository ppa:linuxuprising/apps
sudo apt update
sudo apt install pdfarranger

4你不能像主题发起者想要的那样编辑PDF文件。 - Pavel Bariev
4从原始问题中:「情景B. 合并PDF或从PDF中提取页面」。PDF Arranger可以做到这一点。 - Logix
1这是一个令人惊叹的小应用程序,完全按照其设计目的运行,并且与Ubuntu和Debian非常兼容。 - Arnaud Bouchez

Foxit PDF Editor(非免费版)通过WINE运行良好。
新版本的Foxit可能也能正常工作,不过我还没有测试过。

~.~.~

ps:这个答案适用于您的“情景A”:您可以基本上使用Foxit编辑pdf中的所有内容,也就是说,您不仅可以添加内容,还可以像编辑Word文件一样对其进行编辑。

1在您的观点中,这个软件的效果是否比免费且不需使用WINE的Inkscape更好? - snowguy
谢谢你的询问!事实上,我还没有使用过Inkscape(因为我认为它主要是专业或有雄心的爱好设计师使用的矢量图形工具)。不过,我会尝试用它来编辑PDF文件,并很快向你汇报与Foxit相比的使用体验。 - nutty about natty
Inkscape中进行了一次快速试用;看起来相当稳定,但有一个主要的问题是多页支持似乎只能通过一个扩展实现,该扩展在sourceforge.net上获得了90%的赞同,所以我猜它应该很可靠。为了公正比较,还需要进一步检查。稍后会报告结果。 - nutty about natty
请点击这里查看相关内容。 - nutty about natty

PDF Buddy 是一个在线 PDF 编辑器,它是一个快速简便的跨平台 PDF 编辑解决方案,无论您使用 Ubuntu 还是其他任何操作系统都非常适用。(在您描述的 A 场景中,它将非常有用)

(声明:我是 PDF Buddy 的联合创始人之一)


我刚试了一下BDF Buddy,它似乎非常适合简单处理PDF文件,就像第一种情况或者用于签署PDF文档。与Inkscape不同的是,你无法访问PDF元素。但大多数时候,这可能会带来更多麻烦而不值得。PDF Buddy具有的"涂白"功能通常足以移除物体。 - snowguy
我不喜欢的一点是你必须创建一个账户(我没有这样做)。不过,考虑到这个免费模式每月可以免费编辑3个文档,我也料到了。这是一个很好且简单的解决方案,可以对现有的PDF进行批注或添加签名。 - snowguy
1很抱歉,您不能使用PDF Buddy来合并多个PDF文件。 - snowguy
1测试了一份文件,这个编辑器真的很棒。然后花了一个小时编辑真正的文件,才意识到它并不是免费的 :( - user200340
通过谷歌找到了这里...据我所知,PDFBuddy主要用于批注;它似乎不允许实际编辑(例如现有文本内容的编辑)。 - larsks

有一个神奇的东西叫做 "pdfedit" 存放在软件库里。无论如何,你可以从这里获取它 http://sourceforge.net/projects/pdfedit/。我用它直接对文件进行一些文本更改,省略了任何转换,以保持文件结构不变。只需要在工具箱中选择文本选择模式,然后点击要编辑的文本即可。你可以通过窗口左上角出现的文本框来进行编辑。当然,还有很多其他功能。

1看起来这个项目已经被放弃了 - 最后更新于2014年5月26日。 - Jaydin

我很惊讶这里没有提到PDF Studio。
它是一个全能的PDF解决方案,可以注释、标记文本、填写表单、编辑内容、签名、OCR和操作PDF文档。

http://www.qoppa.com/pdfstudio


4...这不是免费软件,但我确信它工作得很好。 - carnendil
1…在我接触过的所有非免费PDF编辑器中,Foxit仍然是我的基准...尽管我猜Nitro也值得一提... - nutty about natty
PDF Studio Viewer 是一款免费的软件,可以用来批注 PDF 文件。 - Jaydin