有没有一种样式的谷歌浏览器默认pdf视图样式? 我正在尝试将灰色背景颜色更改为白色,如果可能的话,还可以使滚动条更大一些以适合移动设备。

我试图没有运气瞄准它的CSS

看起来它正在html上创建影子文档,但我找不到任何针对它的方法


无法直接设置Chrome默认的PDF查看器(PDFium)的样式。由于该插件显示和控制当前页面DOM范围之外的内容,因此只能由该插件修改。如此处所示,除非插件还添加了允许页面将消息传递给插件的内容脚本,否则无法对此类插件控制的内容进行修改。该插件还必须进行编程以响应消息并适当地更新内容。换句话说,PDF查看器对页面使用单独的DOM,无法直接访问该页面。相反,您需要访问已实现的API。

在这次讨论中,Mike West(Google / Chromium开发人员)指出,在回答有关Chrome的PDF查看器中的DOM可访问性的问题时:

The functionality available in the PDF viewer is (intentionally) fairly limited ... The APIs you're having trouble finding simply don't exist.

API的基本功能是Adobe在其"打开PDF文件的参数"中指定的功能,并且可以通过URL(例如http://example.org/doc.pdf#page=3&pagemode=thumbs)进行访问。如上所述,它们的功能非常有限,允许用户直接转到设置的页面。如果您知道可用的JavaScript消息,则有可能通过内容脚本消息访问扩展的API。可以从相关的PDFium源中确定可用的JS消息名称的完整列表,从中可以看到该列表。无法实现查看器的高级样式(例如更改颜色)(此问题提供了有关如何实现API的示例)。当然,无法访问PDFium的DOM。

该API故意未作记录;它随时可能随添加或删除而发生变化。因此,尽管将来可能会有一个API可以让您对查看器的某些方面进行样式设置,但几乎没有任何东西会改变背景颜色或修改CSS阴影。而且,如上所述,如果没有API,那么当您无法访问其DOM时,您将无法修改由插件控制的内容。

您可能希望尝试使用PDF.js。这是一个开放源代码的JavaScript库,可使用HTML5 Canvas呈现PDF文件。它也是Firefox的默认PDF查看器,功能强大。

将其作为Web应用程序实现不在此问题的范围内,但是有许多有用的教程可用。随着开发人员可以访问所有组成文件,您当然可以随意设置PDF.js查看器的样式。


只需将其粘贴到浏览器控制台中即可。


更新:Chrome的最新版本似乎已将PDF查看器资源从resources.pak移出到了浏览器二进制文件本身。仍然可以下载Chromium源代码,编辑下面描述的文件,然后重新编译,但这比简单地破解resources.pak要痛苦得多。谢谢,谷歌。

实际上,有一种方法,但是我们必须动手,每次更新Chrome时都必须重复该过程。不过,对我来说,付出的努力是值得的。我喜欢将PDF查看器的背景更改为白色,这样当我在晚上激活颜色反转的Deluminate扩展名时,我会得到一个漂亮的纯黑色背景。与默认背景相比,它在我眼中要容易得多,默认背景在反转时会令人眼花bright乱。

Chrome的源代码树包含数千个HTML,JS和CSS文件,这些文件控制浏览器许多部分(包括PDF查看器)的行为和外观。在构建Chrome时,这些"资源"被捆绑到一个单独的文件resources.pak中,浏览器在启动过程中会将其解压缩到内存中。我们需要做的是在磁盘上解压缩resources.pak,编辑用于设置PDF查看器样式的文件,然后重新打包捆绑包。

我们需要的第一件事是可以解压缩resources.pak的工具。我唯一知道的是ChromePAK-V5。它是用Go语言编写的,因此我们需要用它来构建它。我们还需要安装一个称为go-bindata的构建时依赖项。这是我的处理方法:

现在我们有了二进制文件ChromePAK-V5/ChromePAK-V5,我们可以使用它来解压缩resources.pak。就我而言,在Linux上运行Chromium,该文件位于/usr/lib/chromium/resources.pak,但它可能对您来说还位于其他位置。找到它后,将其复制,备份并解压缩:

此时,我们需要的文件将位于resources目录中的某个位置。现在,在原始的Chrome源代码树中,这些文件都有合理的路径,例如chrome/browser/resources/pdf/pdf_viewer.js。不幸的是,这些原始路径没有记录在resources.pak文件中。 ChromePAK-V5试图通过使用一个将资源文件的SHA1哈希映射到其原始路径的表来变得聪明,但是随着时间的流逝,文件以及它们的哈希都会发生变化,并且ChromePAK-V5不再能够识别它们。如果无法识别文件,ChromePAK-V5会将其解压缩到例如resources/unknown/12345。而且,通常,这些数字从一个Chrome版本更改为另一个版本。因此,要找到我们需要编辑的文件,我们基本上需要为识别它们的"指纹"使用grep。让我们开始吧。

PDF查看器的背景色由文件控制,该文件在Chrome的源代码树中名为chrome / browser / resources / pdf / pdf_viewer.js。要查找文件,请在resources/unknown内的grep中输入字符串PDFViewer.BACKGROUND_COLOR。就我而言,该文件在unknown/10282处解压缩。打开此文件,然后更改设置PDFViewer.BACKGROUND_COLOR的行(在文件末尾处)。我将其更改为0xFFFFFFFF,即白色(在Deluminate下变为黑色)。

更进一步,我们还可以重新设置PDF查看器工具栏的样式。默认情况下,工具栏是深色的,因此在Deluminate下它会令人讨厌地变亮。要解决此问题,我们需要找到chrome / browser / resources / pdf / elements / viewer-pdf-toolbar.html。我通过grepping shadow-elevation-2dpunknown/10307找到了它。我要做的是转到#toolbar块并添加filter: invert(100%);。瞧,晚上不再需要工具栏了。

最后,如果我们真的想一路走,我们可以摆脱加载PDF时原始背景颜色的短暂"闪光"。该颜色由chrome / browser / resources / pdf / index.css控制,我在unknown/10304通过grepping viewer-page-indicator {找到了它。我将bodybackground-color属性更改为white(即Deluminate下为黑色)。

困难的部分已经结束。最后一步是重新打包资源并覆盖系统resources.pak

现在重新启动浏览器,尽情享受吧!