更改 PDF 文件的文本和背景颜色

Changing the text and background color of a PDF file

我想以编程方式更改 PDF 文档中的背景颜色和文本颜色,以便它们在晚上更容易阅读(有点像在 Adob​​e Reader 中:编辑 ->首选项 -> 辅助功能 -> 替换文档颜色)。

是否有任何好的命令行工具或 API for Windows 可以做到这一点?

到目前为止我还没有找到。如果需要将新上色的PDF保存到新文件中也可以。

没有我知道的(免费软件或免费)工具,无法直接执行此操作。 (因为在一般情况下,您必须更改 PDF 页面的 所有 颜色,而不仅仅是背景,因此您仍然可以有一些对比度和颜色差异。)

您为 Adob​​e Reader 描述的内容不会更改 PDF 文件本身,它会更改应用程序呈现页面的方式(通过反转颜色或类似方式)。 PDF 在查看期间和查看后保持不变。

但是,您可能通过将合适的 ICC 颜色配置文件应用到输入 PDF 并在(最新版本的) Ghostscript,由此产生的新输出 PDF。

问题仍然存在:什么 IS "suitable" ICC 颜色配置文件适合您的目的??


I've shortly considered to apply a gray-ish background to the PDF with the help of pdftk ... background ... command line. But this would probably make some or many PDFs unreadable. (A black background would surely make it unreadable, because most text is black and would remain so.)

To create a PDF page (A4 size) which could serve as the gray background, you could use Ghostscript: gs -o gray.pdf -sDEVICE=pdfwrite -g5950x8420 -c ".8 setgray 0 0 595 842 rectfill showpage".

Then apply it to your original PDF (A4): pdftk original.pdf background gray.pdf output orig-with-backgr.pdf.

Note, this will only change the background of these pages (or those areas of pages), where the original background is transparent, as most text-based PDFs are. It will not work for pages or areas where the background is opaque white or color.)


You can also achieve a permanent color change (inverse colors) quite easily with the help of ImageMagick. But this will at the same time munch and make mincemeat of your nice vector PDFs, converting them into complete-raster image pages: convert nice.pdf -alpha off -invert inverted-colors-ugly-raster.pdf.


最后,这里有一个不太靠谱的方法,借助Ghostscript完成颜色的反转。它为输出 PDF 文件设置了一个 colortransfer 函数:

gs -o output.pdf     \
   -sDEVICE=pdfwrite \
   -c "{1 exch sub}{1 exch sub}{1 exch sub}{1 exch sub} setcolortransfer" \
   -f input.pdf

这是不可靠的,因为并非每个 PDF 查看器都会支持该设置。我过去测试过几次...

这些观众DO SHOW 反色:

  1. Adobe Reader
  2. Adobe Acrobat
  3. gv
  4. Ghostscript/gs
  5. Chrome 的原生 PDF 渲染器('pdfium'

这些不显示反转颜色:

  1. Chrome 与 PDF.js
  2. Firefox 与 PDF.js
  3. 扎图拉
  4. MuPDF

以防万一 OP 真的 不需要 永久 更改 PDF 文档颜色,而只需要一个 PDF viewer 除了 Acrobat 可以类似地改变显示的颜色...

MuPDF: MuPDF 是一个轻量级的 PDF 查看器(除其他外)。它可以在任何文档打开时通过 i 的简单笔画反转显示的颜色。 MuPDF 也可用于 Windows(和 iOS、Android、OSX 和 Linux)。 (它是由为我们带来 Ghostscript 的同一家公司制作的)。

此处为 MuPDF 屏幕截图:"normal" 视图(左)和 "inverted" 视图(右)

SumatraPDF: 这是 Windows 非常流行的替代 PDF 查看器。它的 PDF 渲染引擎基于 MuPDF。在演示模式下点击 .,它会将背景更改为黑色。在演示模式下点击 w,它会将背景更改为白色。 (我不认为它也可以 反转 所有颜色,但我现在没有可用的最新版本来检查。)对于启动添加 -invert-colors 到命令行, 它将反转渲染文档的颜色。

Zathura: Linux 和 OSX 的轻量级 PDF 查看器,可以通过类似 Vim 的键盘快捷键进行控制。 ctrl+r 将重新着色任何打开文档的呈现。背景将变为深色,文本将变为亮灰色(但它不会像 MuPDF 那样将蓝色文本变为黄色)。我不确定它是否也适用于 Windows。

Evince: Gnome PDF 查看器,可用于 Linux、OSX 和 Windows。它也可以反转打开文档的颜色;键盘快捷键是 ctrl+i.

XPDF: XPDF 是一个非常古老的 Unix + Linux PDF 查看器(不确定是否有可用的 Windows 版本——也许在西格温)。它的命令行中有一个启动选项:xpdf -rv -papercolor "#333333" file.pdf 将反转颜色(-rv 用于 反转视频 -papercolor 允许您更改背景与纯黑色不同的东西[因为任何倒置的白色都会变成])。

正如您要求的那样 API,我将在组合中添加一个额外的可能性。其实可以给Adobe Acrobat写一个干扰显示的插件(Adobe Reader应该也可以,但是Reader插件比较难)。

很久以前,我为 Enfocus PitStop 编写了代码,以在 Adob​​e Acrobat 中实现 PDF 文件的线框渲染模式。单击一个按钮,显示变为线框,再次单击,您将看到正常视图。这是可行的,因为您可以(作为插件)修改 Acrobat 绘制的显示列表(对象列表)。

这意味着要绘制您的特殊显示模式,您可以创建一个新的显示列表(或修改现有的),使其在最后面有一个矩形,颜色为您想要的,然后修改颜色显示列表中的所有对象以满足您的需要。

这相对复杂,但更复杂的是 - 如果您不希望您的更改影响磁盘上的 PDF 文件,您必须拦截无数的 Acrobat 通知并撤消您的更改.例如,如果用户在您的显示模式下查看时试图保存 PDF 文档,您必须确保收到警告并在保存期间撤消更改。 Adobe Acrobat 使这成为可能,因为它会在保存过程前后向您发送通知,但确保没有任何问题仍然是一项严肃的工作。

但这是实现您所追求的东西的一种绝对酷且非常灵活的方式。请确保您有超过几周的时间来实施它:)

  1. 安装nodejs。
  2. npm i -g serve
  3. 在 pdf 目录中 运行:serve
  4. 在 Chrome 中打开 http://localhost:5000 并单击某个文件。
  5. 安装 Chrome 扩展 Dark Reader
  6. Dark Reader > Toggle localhost:5000