将彩色 PDF 转换为白色/黑色

pol*_*nux 4 linux pdf

在 Debian Sid 上,我有一个蓝色背景和黄色字体的 PDF。我在超级用户上搜索了很多,但没有找到任何对我有用的东西。

我试图将 PDF 转换为灰度格式:

gs -o grayscale.pdf -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -sProcessColorModel=DeviceGray -dCompatibilityLevel=1.4 colored.pdf
Run Code Online (Sandbox Code Playgroud)

问题是我获得了一个带有白色字体和深灰色背景的 PDF,所以我无法打印它。

之后我尝试过:

convert -density 96x96 gs2.pdf -density 96x96 -negate -compress zip inv.pdf
Run Code Online (Sandbox Code Playgroud)

我得到了一个带有黑色字体(这没关系)和灰色背景(这不太好)的 PDF。

我该怎么做才能获得白色背景和黑色字体的 PDF?

Din*_*ngo 8

一般警告!!!处理您的文件的副本!!!

(所以如果你犯了错误,你可以有第二次机会)

可以通过几个步骤轻松更改 pdf 文件中的矢量pdf 背景(意味着不是光栅图像)(另请参阅我的 stackoverflow 答案,现在我将对其进行扩展和改进


  • 初步检查

使用能够显示内部 pdf 结构的编辑器打开您的 pdf 文件,例如

记事本++

并验证您是否可以看到类似的代码片段

1.000 1.000 0.000 rg(表示黄色

0.000 0.000 1.000 rg如果您的蓝色具有 RGB 三元组 0、0、255纯蓝色则表示蓝色 ,否则请阅读答案的其余部分以将正确的三元组识别为 pdf 代码

等等...

(代码片段可以更改,例如,在由 openoffice 内部 pdf 导出功能生成的 pdf 中,相同的代码片段采用以下形式:

0 0 0 rg (it means *black*)
1 1 1 rg (it means *white*)
Run Code Online (Sandbox Code Playgroud)

等等...

如果你能看到这些代码片段,那么你就可以开始改变值,否则,你需要解压文本流

您可以执行此任务

pdftk

http://www.pdflabs.com/docs/install-pdftk/

pdftk file.pdf output uncompressed.pdf uncompress
Run Code Online (Sandbox Code Playgroud)

并在完成更改后重新压缩

pdftk uncompressed.pdf output recompressed.pdf compress
Run Code Online (Sandbox Code Playgroud)

现在,如果您看到这些代码片段,您可以更改值

第 1 步(用于 pdf 编辑)-

您需要做的第一件事是找到文本和背景的 RGB 颜色值与相同颜色的内部 pdf 表示之间的正确等价关系

你可以使用像这样的免费颜色选择器

识别文本和背景颜色的 rgb 值

一旦你有了这些值,你需要转换成特殊的内部 pdf 表示

要做到这一点,我介意这个比例:

1:255=x:您选择的颜色

例如:假设你有这个 RGB 三元组作为背景:30,144,255

RGB 三元组 蓝色

要知道 pdf 中的对应值以便在代码片段中插入以更改 pdf 背景颜色,您可以:(您可以使用http://www.wolframalpha.com/进行精确计算)

1:255=x:30 = 30/255 = 0.117 (approximated to first three decimals)

1:255=x:144 = 144/255 = 0.564 (approximated to first three decimals)

1:255=x:255 = 255/255 = 1
Run Code Online (Sandbox Code Playgroud)

因此,对应于RGB 30,144,255 的pdf 中的整个三元组将是:

0.117 0.564 1.000


# STEP 2 (pdf 编辑)

我们使用notepad ++在pdf文件中查找0.117 0.564 1.000环绕匹配一个只需要检查的单词),我们找到了背景的内部pdf表示,我们可以从天蓝色更改为白色

1.000 1.000 1.000

或者

1 1 1

但是,由于您写了关于蓝色背景的文章,更准确地说,我创建了一个带有蓝色背景的示例 pdf (纯蓝色0,0,255 RGB - 如果您的蓝色有不同的色调,请根据需要修改我的提示)和黄色文本

因为我们知道 0.000 0.000 1.000 rg 表示蓝色,所以我们寻找这个,我们可以从 0.000 0.000 1.000 rg 更改为 1.000 1.000 1.000 rg(白色)但是...

同时,您还将文本从黄色更改为黑色

寻找 1.000 1.000 0.000(黄色文本)并更改为黑色0.000 0.000 0.000

我们现在有一个带有黑色文本和白色背景的矢量 pdf

请记住

    • 如果您使用 pdftk 解压缩,请再次压缩您修改过的 pdf
    • 修理
pdftk file.pdf output fixed.pdf
Run Code Online (Sandbox Code Playgroud)

还有另一种方法,从 postscript 开始,执行相同的任务,但由于您已经有了pdf 文件,转换为 postscript 以执行类似的任务将是多余的步骤

请提供反馈,并随时询问更多