当前位置: 首页>>技术教程>>正文


有没有更好的方法来编辑 PDF?

, , ,

问题描述

我最近不得不打印几个 PDF 并发送给某人,但我想编辑(涂黑)一些小文本。

快速谷歌搜索没有找到任何用于此特定目的的工具,所以我又回到了 imagemagick & 。瘸子:

  • convert document.pdf document.png

  • gimp document-0.png

  • (使用画笔将文字涂黑)

  • 从 gimp 打印编辑页面

  • 打印 xpdf 的剩余页面

这种策略的问题在于转换过程(从 PDF 到 PNG 或任何其他格式)会降低质量。我尝试在 gimp 中编辑 PDF,但它没有立即工作。

是否有特定的工具允许以这种方式进行编辑? (它甚至不需要 “real” 密文——我不会发送软拷贝,因此 “fake” 密文将起作用,因为硬拷贝无法被黑客攻击以揭示底层文本。)

或者,有什么技巧可以在 gimp 中编辑 PDF 吗?

最佳思路

您可以使用奥库拉。

sudo apt-get install okular
  1. 使用 Okular 打开 pdf。

  2. F6(或转到工具 –> 注释)。

  3. 8

  4. 突出显示您要编辑的文本。

  5. 右键单击文本,选择属性,选择 “Type” 作为 “Highlight”,按 Ok

  6. 将文件打印为 pdf(检查 “Force rasterization” 以确保已从生成的文件中删除经过编辑的文本)。

次佳思路

(本来我推荐Okular,但它并没有达到我的预期)

1. 在矢量编辑器中编辑文档

我能够在 Inkscape 中打开 PDF 文件,在一段文本上绘制一个矩形并将其打印出来。 Inkscape 是一个矢量编辑器,因此不涉及光栅化。但有些字体看起来不正确 – 可能是因为该文档是在 Windows 计算机上创建的,而我的计算机上没有字体。

请注意,只有当您要将编辑后的文档打印在纸上而不是以电子方式分发时,任何不涉及光栅化的方法都是可接受的,因为文本仍然可以在停电时检索。

2. 提高在位图编辑器中打开时的光栅化分辨率

关于Gimp中打开页面时的”quality loss”:可以直接在Gimp中打开PDF文件。在此过程中它将被光栅化。该过程中的质量损失量取决于您在导入时选择的分辨率 – 300 dpi 应该会给您带来非常不错的质量(默认值为 100)。

如果您告诉 ImageMagick 的 convert 命令提高分辨率,您也可以获得良好的结果:

convert -density 300x300 ...

第三种思路

基本上,您想要做的是突出显示/注释 PDF,但对标记不透明度和颜色具有一定的灵活性(您提到您不需要审查/删除某些内容,只需编辑)。您看过这里的答案吗:\n How can I highlight or annotate PDFs?

评价最高的答案之一推荐了 Xournal,这里没有提到它,它将是我选择的武器。它是一个允许您手写笔记的工具,但还具有额外的功能,允许您对 PDF 进行注释。默认情况下,它将您的注释保存为单独的文件,但也允许您将带注释的 PDF 导出为新的 PDF。这应该保持布局、字体等。

使用 Xournal,您可以选择 “Annotate PDF”,然后使用纯黑色标记来遮盖您想要编辑的部分,然后“导出为 PDF”。

互联网上有一些故事表明 Xournal 对导出的 PDF 中的文本进行光栅化(感谢 MHC 指出这一点)。这似乎并非如此:使用简单的注释,文本仍然可以选择和搜索,并且文件大小不会增加太多(在下面的示例中,文件大小从 205 kb 增加到 220 kb)。

要安装,请在终端中运行:sudo apt-get install xournal 或从软件中心选择它

\n

第四种思路

我每天都会编辑大量 PDF 文件,因此我花了很多时间思考如何以最好的方式进行编辑。

对我来说,最好的方法是将 PDF 拆分为 1 页 PDF 文件,然后使用 GIMP 进行编辑,然后将其合并。我不在所有文件上使用 imagemagick(我根本不使用),因此我不会在所有页面上丢失 text-layer,但仅在编辑后丢失。不要一次加载整个 PDF 文件,因为这会导致内存耗尽。

将 PDF 拆分为一页文件

您可以通过此 bash 函数轻松将 PDF 文件拆分为一页 PDF(将其放入 ~/.bashrc 中):

function pdf_split(){
    for file in "$@"; do
        if [ "${file##*.}" != "pdf" ]; then
            echo "Skip $file because it's not PDF file";
            continue
        fi; 
        pages=$(pdfinfo "$file" | grep "Pages" | awk '{print $2}') 
        echo "Detect $pages in $file";
        filename="${file%.*}";
        unset Outfile;
        for i in $(seq 1 "$pages"); do
            pdftk "$file" cat "$i" output "$filename-$i.pdf";
            Outfile[$i]="$filename-$i.pdf";
        done;
    done;
};

您现在可以输入split_pdf file.pdf来获取大量PDF文件。

编辑文件

但是,现在您需要编辑所有这些文件。 \n你可以使用 gimp original-filename-*.pdf 来完成。\n我建议在 GIMP 中配置快捷方式(主窗口 -> 编辑 -> 快捷方式)来替换文件(我使用 CTRL+R)、模糊滤镜(例如 CTRL+D)、关闭文件(例如 CTRL+W)并退出 GIMP(例如 CTRL+Q)。请记住不要一次在 GIMP 中加载多个文件,而是在打开 GIMP 后加载,这样您就可以在数千个文件上安全地使用 gimp original-filename-*.pdf

合并文件

您可以轻松地组合文件:pdftk originam-filename-*.pdf cat output "new-file-anon.pdf";

将它们连接在一起

这些操作非常重复且无聊,所以我将它们全部连接在 1 个脚本中:

function pdf_redact(){
    for file in "$@"; do
        if [ "${file##*.}" != "pdf" ]; then
            echo "Skip $file because it's not PDF file";
            continue
        fi; 
        pages=$(pdfinfo "$file" | grep "Pages" | awk '{print $2}') 
        echo "Detect $pages in $file";
        filename="${file%.*}";
        unset Outfile;
        for i in $(seq 1 "$pages"); do
            pdftk "$file" cat "$i" output "$filename-$i.pdf";
            Outfile[$i]="$filename-$i.pdf";
        done;
        gimp "${Outfile[@]}";
        pdftk "${Outfile[@]}" cat output "$filename-anon.pdf";
        rm "${Outfile[@]}";

    read -p "Do you want open output file? " -n 1 -r
    echo    
    if [[ $REPLY =~ ^[Yy]$ ]]
    then
            evince "$filename-anon.pdf";
    fi

    read -p "Do you want upload output file to Scribd.com? " -n 1 -r
    echo 
    if [[ $REPLY =~ ^[Yy]$ ]]
    then
        scribd_up "$filename-anon.pdf";
    fi
    done;
};

该脚本的最新版本始终可以在以下位置访问:http://dostep.jawne.info.pl/it/bashrc

请记住在完成所有编辑后关闭 GIMP (CTRL+Q) 以继续脚本。

上瘾的是,我打开编辑的文件(我喜欢阅读以检查是否全部)并使用我的其他脚本 – scribd_up 上传到 Scribd,所以现在我可以非常有效地编辑大量 PDF 文件。

第五种思路

由于这里的许多解决方案建议通过注释进行编辑/涂黑(将原始内容保留在 pdf 中),因此我建议随后对 pdf 进行光栅化以真正删除原始内容。 (不要成为 this guy 。)

这是一种方法,可以同时保持较高的质量和较低的文件大小(至少在我的一堆黑白页面的情况下):

$  convert -quality 100 -density 180 -compress zip notreallyredacted.pdf trulyredacted.pdf

注意:convert 需要 ImageMagick。

注 2:convert 不会保留您可能已填写的表格内容。为了使其不丢失,您可能需要先将文档“打印到文件”,例如 evince(或在您填写表格的任何应用程序中),然后对其进行光栅化。

第六种思路

Xournalpp 是 Xournal 的一个流行变体,它可以满足您的需求。它无法通过包管理器(在 Ubuntu 20.10 上)使用,但可以使用 CMake 构建 Github 版本。

构建指令 here 建议以下依赖项:

sudo apt-get install cmake libgtk-3-dev libpoppler-glib-dev portaudio19-dev libsndfile-dev libcppunit-dev dvipng texlive libxml2-dev liblua5.3-dev libzip-dev librsvg2-dev gettext lua-lgi

然后,在 Xournalpp 中,您应该选择矩形图标,以及笔颜色旁边的油漆桶图标。然后您可以创建填充矩形 – 但它们将是透明的。要使它们完全不透明,请选择 Tools > Pen Options > Fill Transparency 并将弹出窗口更改为 100%。 (Github 问题 here 对此进行了解释。)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13897.html,未经允许,请勿转载。