如何将包含的 PDF 的白色背景更改为透明

如何将包含的 PDF 的白色背景更改为透明

我有一个外部的 100 页 PDF 文档(不是由 pdflatex 创建的),我\includegraphics将其逐页放入 beamer 演示文稿中。外部 PDF 文档使用白色作为页面颜色,但我需要背景透明。

理想情况下,这是一个可以传递的选项\includegraphics——我怀疑它是否存在。不过,我也愿意接受一些涉及外部工具的过程(pdftk、、pdfjamImageMagick、Acrobat……)。

答案1

我不确定是否可以将 PDF 中的任何东西变成透明的。PDF 不是图像格式,所以我猜唯一的方法是从页面中完全删除背景对象。您可以使用 Acrobat 专业版(可能还有一些免费的 PDF 编辑器)手动执行此操作(在每一页上),但如果您幸运的话,以下方法可能会奏效:

  1. 使用 将您的 PDF 转换为可读的内容qpdf -qdf file.pdf file-redable.pdf
  2. 在那里寻找背景物体。(此时需要运气)通常,它看起来有点像这样:

    10 765.75 591.75 -729.75 re
    f
    

    也就是说,一个足够大的填充矩形可以覆盖整个页面。

  3. 实验性地将其移除。

  4. 使用 修复生成的 pdf fix-qdf file-redable.pdf
  5. 试试看是否有效 ;-)
  6. 如果您找到了要移除的正确对象,则可以用 同时在所有位置将其移除sed

答案2

qpdf按照建议尝试了,它对我的​​ libreoffice 生成的 pdf 有效。我创建了一个脚本来删除背景。它可能有效也可能无效,具体取决于版本等,并且可能会损坏您的 PDF,因此使用时请自担风险

#!/bin/bash
if [ $# -ne 1 ] ; then
    echo "Use: $0 pdf_with_background.pdf"
    exit 1
fi

FILE="$1"
FILEQDF="$1.readable.pdf"
FILETMP="$1.tempfile.pdf"

# backups
#cp "$FILE" "$FILE.BAK"
# converts to readable format
qpdf -qdf "$FILE" "$FILEQDF"
# removes background
cat "$FILEQDF" | sed  '/^%% Contents for page/, /f\*/ { /^1 1 1 rg/, /f\*/ { s/^/%% /  }  }' >  "$FILETMP"
# fixes pdf
fix-qdf "$FILETMP" > "$FILE"
rm "$FILETMP"
rm "$FILEQDF"

答案3

我使用 Inkscape 修改现有的 PDF 并在文档属性中选择了已检查的背景,效果非常好!

相关内容