我想在PDF文档中以编程方式更改背景颜色和文本颜色,以便在夜间更好地阅读(有点像在Adobe Reader中: 编辑 – >首选项 – >辅助function – >replace文档颜色 )。
有什么好的命令行工具或Windows的API可以做到这一点?
到目前为止,我还没有find任何。 如果需要将新的彩色PDF保存到一个新的文件中,那也行。
没有办法直接做到这一点,没有(免费软件或免费)工具,我知道。 (因为在一般情况下,你将不得不改变PDF页面的所有颜色,而不仅仅是背景,所以你仍然可以有一些对比度和颜色的差异。)
您对Adobe Reader的描述不会更改PDF文件本身,它会更改应用程序呈现页面的方式(通过反转颜色或类似方式)。 在查看期间和之后,PDF保持不变。
但是,通过在输入PDF中应用合适的ICC颜色配置文件,并在Ghostscript(最新版本)的帮助下生成一个新的输出PDF,您也许能够实现类似的功能。
问题依然存在:什么是适合您的目的的“合适的”ICC色彩配置?
我很快就考虑在
pdftk ... background ...
命令行的帮助下将灰色背景应用于PDF。 但这可能会使一些或许多PDF不可读。 (一个黑色的背景肯定会使其不可读,因为大多数文本是黑色的,而且会保持这样的状态。)要创建一个可以作为灰色背景的PDF页面(A4尺寸),可以使用Ghostscript:
gs -o gray.pdf -sDEVICE=pdfwrite -g5950x8420 -c ".8 setgray 0 0 595 842 rectfill showpage"
。然后将其应用到您的原始PDF(A4):
pdftk original.pdf background gray.pdf output orig-with-backgr.pdf
。请注意,这只会改变这些页面的背景(或那些页面的区域),原始背景是透明的, 因为大多数基于文本的PDF都是。 它不适用于背景不透明的白色或彩色的页面或区域。)
在ImageMagick的帮助下,您也可以很容易地实现永久的颜色变换(反色)。 但是,这将同时munch和你的漂亮的矢量PDFs,把它们转换成完整的光栅图像网页
convert nice.pdf -alpha off -invert inverted-colors-ugly-raster.pdf
: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倒置的颜色:
这些不显示倒置的颜色:
以防万一OP没有真正需要永久更改PDF文档颜色,但只需要一个PDF阅读器,而不是Acrobat,可以做类似的改变显示的颜色…
MuPDF: MuPDF是一个轻量级的PDF查看器(除其他外)。 它可以反转显示的颜色,只要简单的笔画就可以打开任何文档。 MuPDF也可用于Windows(和iOS,Android,OSX和Linux)。 (它是由同一个公司给我们带来了Ghostscript)。
MuPDF截图在这里:“正常”视图(左)和“倒置”视图(右)
SumatraPDF:这是一个非常受欢迎的替代PDF阅读器的Windows。 它的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版本 – 也许在Cygwin中)。 它的命令行中有一个启动选项: xpdf -rv -papercolor "#333333" file.pdf
将反转颜色( -rv
是反向视频 , -papercolor
可以让你将背景改成与纯黑色不同的东西倒白会变成])。
当你要求一个API时,我会在组合中再添加一个可能性。 实际上,可以为Adobe Acrobat编写一个插件(对于Adobe Reader也可能,但Reader插件更难),这会干扰显示。
很久以前,我为Enfocus PitStop编写代码,为Adobe Acrobat内部的PDF文件实现线框渲染模式。 点击一个按钮,显示变成线框,再次点击,你有正常的看法。 这是可行的,因为您可以(作为插件)修改由Acrobat绘制的显示列表(对象列表)。
这意味着要绘制您的特殊显示模式,您可以创建一个新的显示列表(或修改现有的显示列表),使其在所需的颜色后面有一个矩形,然后修改显示中所有对象的颜色清单,以满足您的需求。
这是相当复杂的,因为它更复杂的是,如果您不希望更改影响磁盘上的PDF文件,则必须拦截无数的Acrobat通知并撤消更改。 例如,如果用户尝试在显示模式下查看时保存PDF文档,则必须确保已收到警告,并在保存期间撤销更改。 Adobe Acrobat使这成为可能,因为它会在保存过程之前和之后向您发送通知,但确保没有任何事情被搞砸仍然是一项严肃的工作。
但是,这是一个非常酷,非常灵活的方式来实现你以后的事情。 只要确保你有更多的时间来实现它:)