Pdf.js: 打印模糊/模糊

创建于 2013-02-20  ·  38评论  ·  资料来源: mozilla/pdf.js

如果我使用 FF19 和新的 pdf 功能打印 pdf,则打印模糊。

如果我用 acrobat 打印,字体很清晰。

左=杂技演员
右 = ff pdf

你有什么想法吗?

https://plus.google.com/105533044232180103026/posts/dYL855pBkSM

3-upstream 4-printing

最有用的评论

由于https://github.com/mozilla/pdf.js/commit/c09f634bb6c713f6dc36628145788c88e60448e0现在renderPage函数在web/viewer.js ,打印分辨率在那里被硬编码为 150 DPI。

function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {
  var scratchCanvas = activeService.scratchCanvas;
  var PRINT_RESOLUTION = 150;
  var PRINT_UNITS = PRINT_RESOLUTION / 72.0;

要将打印分辨率更改为 300 DPI,只需更改下面的行。

var PRINT_RESOLUTION = 300;

根据发布标签,从 1.7.x 到 1.10.x 的所有 PDF.js 版本现在都应该具有该功能。 我很惊讶这在任何地方都没有记录。

理想情况下,应该能够从查询参数更改打印分辨率,而不是修改web/viewer.js

有关更多详细信息,请参阅如何使用 PDF.js 查看器提高 PDF 文件的打印质量

所有38条评论

我猜这是因为 pdf.js 输出是一个画布(准确地说,每页一个画布),它可能与打印机分辨率 100% 不匹配。

这也发生在我身上。

DSCF8966

  • 顶部 = Firefox 内置 PDF.js
  • 底部 = Adob​​e Acrobat

打印质量简直无法接受。
此外,内置的 PDF.js 会在右侧和底部生成黑色边框,就像复印较小尺寸的纸张一样。

有什么解决办法吗? 我在热线电话中,有 200 名用户遇到了这个问题。

@BadFriend@musiphil ,您或您的用户使用什么操作系统?

在 WinXP 到 PostScript 打印机的 FFox 19 上存在同样的问题。 精细的水平线抖动,而垂直线精细。 页眉和页脚也很好。

我在 Windows 7 上运行 Firefox 19.0,并将这些文档打印到带有 PCL6 的 HP Color LaserJet CP4525 打印机。

FF19 + Win7 64bit + OKI561 通过 WSD 端口上的 PCL6 或 Adob​​e PDF (Adobe Acrobat 9.2.0)

IMG_20130222_074757

左:Chrome插件
中:Adobe Reader
右:Firefox pdf.js

下载 PDF -> http://www.file-upload.net/download-7241349/offers-36.pdf.html

另见#2771。 引用@brendandahl

https://bugzilla.mozilla.org/show_bug.cgi?id=811002正在跟踪低质量。

上游错误已得到修复。 这仍然是最新版本的 Firefox 和 PDF.js 的问题吗?

上游错误已得到修复。 这仍然是最新版本的 Firefox 和 PDF.js 的问题吗?

我认为它仅适用于 Windows。 有一个针对 OSX 的新错误(错误 932313),但我不相信它是有效的(请参阅我在 https://bugzilla.mozilla.org/show_bug.cgi?id=932313#c2 上的评论)。

在 Linux 上未解决此问题之前,我投票支持保持此错误打开状态。

是固定的吗?
这个演示页面从 firefox 打印正常
http://mozilla.github.io/pdf.js/web/viewer.html
https://dl.dropboxusercontent.com/u/1383480/work/printing/2015-02-16%2011.29.52.jpg

来自 Chrome 和 Chromium 的打印结果太模糊了,我找不到词来形容它
https://dl.dropboxusercontent.com/u/1383480/work/printing/2015-02-16%2011.29.58.jpg
我尝试将打印机的 dpi 和 PRINT_SCALE RATIO 设置为 1、3、4、8 - 无效
我尝试了来自 github (8614c17) 的最新版本 - 相同
(环境:Chrome、Chromium、Windows 7)

我错过了什么吗?
您能否查看此内容并建议快速解决方法?

@jonny64感谢您报告此事! 不幸的是,我想这里对 Chrome/Chromium 无能为力。 通过使用在 Firefox 中可用但在 Chrome 中不可用的特殊 API 进行打印,可以在 Firefox 中获得更好的打印质量。 早在我提出 API 作为标准的那些日子里,但没有太多兴趣,因此它仍然只在 Firefox 中可用。

:) @jviereck ,好吧,我应该忍受它
我试过 Chrome 内部查看器
它打印正常,但它的“保存”破坏了自助服务终端模式
(我们需要在自助服务终端全屏模式下从 Chrome 预览打印)

幸运的是,我前段时间对 C 有一些背景
https://pdfium.googlesource.com/pdfium.git
它是 Chrome 内部查看器的正确来源吗?
从 Chrome 设置中或在设置 --kiosk 命令行时隐藏“保存”是否更好?
你有什么高层次的想法,我可以在哪里以及如何实现它?

据我所知,至少在某些情况下,这仍然是 OS X 和最新的 Firefox Dev Edition 上的错误。

如何在没有打印机的情况下复制:

  • 在 PDF.js 查看器中单击“打印”。
  • 单击“PDF”按钮。
  • 选择“另存为 PostScript...”(而不是“另存为 PDF...”)
  • 在 Preview.app 中打开保存的.ps文件。

文本是不可选择的,放大后,文本非常像素化。 如果您选择“另存为 PDF...”,文本看起来很棒

我尝试增加默认分辨率
web/app.js::beforePrint
<< var pageSize = this.pdfViewer.getPageView(0).pdfPage.getViewport(1);

var pageSize = this.pdfViewer.getPageView(0).pdfPage.getViewport(2);

和 web/pdf_page_view.js::beforePrint
<< var viewport = pdfPage.getViewport(1);

var viewport = pdfPage.getViewport(2);

打印速度较慢,但​​质量有所提高

#7677 之后的一些改进

在过去的 4 个月内,此问题是否有任何更新? 这在最新版本的 pdf.js 上仍然很明显。 我最近推出了一个使用 pdf.js 的部署,现在可以打印带有模糊字母的文档,这对于 Chrome 的原生 PDF 阅读器来说不是问题。

您可以通过从 Mozilla自己的演示页面打印来重现此问题。 我知道这不是驱动程序问题,因为当您打印到 PDF 时也会发生这种情况。

看起来有些人在生产中使用 pdf.js 不得不完全绕过 pdf.js 来解决这个问题(示例)。

目前,如果不大大增加内存使用量,就不可能获得更高质量的打印,大多数浏览器都不会接受。 画布后端无法提供此类功能。 有一个开放的项目 (https://github.com/mozilla/pdf.js/projects) 用于研究使用原型 SVG 后端进行高质量打印。

我发现 PDF.js 具有可接受的打印质量和模糊的打印质量,具体取决于安装的 Firefox 版本,因此想看看我能够打印的版本之间发生了什么变化。 我有https://imgur.com/7Beh7MO ,它是从 Firefox 52、47.0.2 和 42 的从左到右直接打印的输出,前两个至少是新的更新。 如图所示,在 FF 47.0.2 和 FF 52 版本之间的 PDF.js 中发生了一些变化,这似乎降低了质量,所以如果有人有关于这些版本的 Firefox 开始时要查看哪些书签的信息,我不会不介意看看开始。

查看 PDF.js 的 Firefox 存储库版本,我看到 47.0.2 是版本 1.4.121,它对应于提交 51f6aba(可能是之后的提交,即 be1e12d)并且 Firefox 52 随附 PDF.js 1.6。 315,大致是commit c23f124。 我目前正在研究区分这些提交,但它们之间的差异可能是 400 次提交,任何有关打印位置的信息都会非常有帮助。

如图所示,在 FF 47.0.2 和 FF 52 版本之间的 PDF.js 中发生了一些变化,这似乎降低了质量,

虽然 PDF.js 中的更改肯定是有可能的,但我不会(至少在最初)完全排除该问题可能与 Firefox 其他部分中的图形/打印代码等相关的可能性。
使用http://mozilla.github.io/mozregression/尝试找到回归范围可能会有所帮助,甚至可能更快。

PDF.js 中的打印按钮是否甚至使用 Firefox 进行打印? 我的
基于插件在其他浏览器中可用这一事实的假设
是不会有任何与底层浏览器如何相关的问题
处理打印。 打印处理对话框也支持这一点
列出 PDF.js 渲染作为将数据发送到打印机的任务。 我会
做一些额外的测试并尝试运行 PDF.js 作为插件和测试
可能的不同版本,看看是否有任何改变。

2017 年 3 月 14 日上午 9:58,“Jonas Jenwald”通知@github.com 写道:

如图所示,在 FF 47.0.2 和 FF 52 版本之间的 PDF.js 中发生了一些变化
这似乎降低了质量,

虽然 PDF.js 中的更改肯定是有可能的,但我
不会(至少在最初)完全不考虑
问题可能与例如其他部分的图形/打印代码有关
火狐。
使用它可能会有所帮助,甚至可能更快
http://mozilla.github.io/mozregression/尝试找到回归
范围。


您收到此消息是因为您发表了评论。
直接回复本邮件,在GitHub上查看
https://github.com/mozilla/pdf.js/issues/2750#issuecomment-286428765
或静音线程
https://github.com/notifications/unsubscribe-auth/AOZHcyFJnLjI8MhAXspe-SIikmMA7YWOks5rlpzwgaJpZM4AcblL
.

——
请点击阅读注意事项:
http://www.mediweightlossclinics.com/sig/保密通信
http://www.mediweightlossclinics.com/sig/教育目的免责声明
http://www.mediweightlossclinics.com/sig/特许经营披露声明

以前,如果支持,我们会在任何可能的情况下使用 Mozilla 特定的mozPrintCallback ,即在 Firefox 浏览器的附加和非附加版本中,因为它大概允许我们以更少的内存进行打印消费和质量更高。 然而,我们试图减少它的使用,因为它是 Firefox 特定的,有时有问题,所以现在我们只在 Firefox 附加组件中使用它 (https://github.com/mozilla/pdf.js/blob/master/ web/firefox_print_service.js)。

一般来说,我们现在渲染画布并使用常规浏览器定义的打印逻辑打印它们,所以我认为问题可能在于更改的画布缩放/字体渲染代码或浏览器错误。

有关大部分更改,请参阅https://github.com/mozilla/pdf.js/commit/c09f634bb6c713f6dc36628145788c88e60448e0 。 您可能想检查 Firefox 是否有附加组件的打印质量差异。

由于https://github.com/mozilla/pdf.js/commit/c09f634bb6c713f6dc36628145788c88e60448e0现在renderPage函数在web/viewer.js ,打印分辨率在那里被硬编码为 150 DPI。

function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {
  var scratchCanvas = activeService.scratchCanvas;
  var PRINT_RESOLUTION = 150;
  var PRINT_UNITS = PRINT_RESOLUTION / 72.0;

要将打印分辨率更改为 300 DPI,只需更改下面的行。

var PRINT_RESOLUTION = 300;

根据发布标签,从 1.7.x 到 1.10.x 的所有 PDF.js 版本现在都应该具有该功能。 我很惊讶这在任何地方都没有记录。

理想情况下,应该能够从查询参数更改打印分辨率,而不是修改web/viewer.js

有关更多详细信息,请参阅如何使用 PDF.js 查看器提高 PDF 文件的打印质量

如果@mpryvkin的修复是合法的,这绝对应该作为about:config 中的一个选项公开

这可以参数化吗?

我尝试增加默认分辨率
web/app.js::beforePrint
<< var pageSize = this.pdfViewer.getPageView(0).pdfPage.getViewport(1);

var pageSize = this.pdfViewer.getPageView(0).pdfPage.getViewport(2);

和 web/pdf_page_view.js::beforePrint
<< var viewport = pdfPage.getViewport(1);

var viewport = pdfPage.getViewport(2);

打印速度较慢,但​​质量有所提高

有用!

由于#10854,通用查看器现在公开了printResolution应用程序选项,因此无需再为此修改预构建的查看器。 请注意,提高打印分辨率,同时提高打印质量,可能会使打印速度变慢和/或浏览器响应速度变慢,但现在这是查看器用户可以自己做出的权衡。

@timvandermeij感谢您的更新! 澄清一下,您是指“pdf.js 库的用户”还是“Firefox 的用户”中的“用户”? 我属于后一类(并且我相信这个错误与 Firefox 的用户有关),并且我试图弄清楚这些 AppOptions 是否以任何方式暴露在 Firefox 中。

更新:我相信@timvandermeij指的是“pdf.js 库的用户”。 我也相信 AppOptions 是通过about:config在 Firefox 中公开的,但不是自动公开的(即,有人可能必须修改 firefox 代码才能启用它),因为大多数但并非所有 AppOptions 都存在于那里。 pdfjs.cursorToolOnLoadabout:config 中,但不在defaultUrldisableHistory ,大概是因为这些在 Firefox 上下文中没有意义。

@raztus是的,我的意思是图书馆的用户。 Firefox 构建被排除在该范围之外(https://github.com/mozilla/pdf.js/pull/10854#discussion_r287325125),因为如果增加此值,则很难判断浏览器响应性和内存使用情况会发生什么. 如果我们就此获得更多反馈,我不反对考虑将偏好设置也适用于 Firefox (mozcentral) 版本。

@timvandermeij感谢您和@kleins05的改进。 我已经更新有关此功能的

假设可以使用以下代码设置此更新打印分辨率,我是否正确?

document.addEventListener('webviewerloaded', function() { PDFViewerApplicationOptions.set('printResolution', 300); });

是的,我认为你是对的。 webviewerloaded事件确实是用于设置应用程序选项的正确事件; 看:
https://github.com/mozilla/pdf.js/blob/c91f437eaaff79b660805e020f4fa9d4a2a7fe65/web/viewer.js#L208 -L210
在那之后PDFViewerApplicationOptions应该始终可用。 我还没有尝试过这个特定的代码段,但从检查来看它看起来不错,您可以通过查看最新的master分支代码,添加该代码段并检查打印质量是否提高来尝试一下。

@raztus是的,我的意思是图书馆的用户。 Firefox 构建被排除在该范围之外( #10854(评论) ),因为如果增加此值,则不容易判断浏览器响应性和内存使用情况会发生什么。 如果我们就此获得更多反馈,我不反对考虑将偏好设置也适用于 Firefox (mozcentral) 版本。

@timvandermeij我很乐意帮助提供一些反馈。 毕竟,about:config 已经是一个保修无效区域 ;) 我该如何贡献? 我是否需要从头开始构建 Firefox 来更改printResolution

您可以通过打开默认查看器(https://mozilla.github.io/pdf.js/web/viewer.html 始终运行最新的master分支代码或自定义结帐)来对此进行试验,打开 Web 控制台并输入PDFViewerApplicationOptions.set('printResolution', 300); 。 这会将打印分辨率设置为 300 DPI,而不是默认的 150 DPI。 如果您然后单击打印按钮,您会注意到打印质量的差异,但也需要时间来呈现页面和内存消耗(我只是自己尝试过以确保这些步骤有效)。 主要问题是 DPI 中的打印分辨率如何与各种类型的 PDF 文件的内存使用/渲染时间相关,例如小/中/大尺寸以及纯文本或图像量大的文档。 如果我们更多地了解它在各种现实生活场景中的行为,我们也许也可以引入 Firefox 构建的设置和/或更新默认值。

我试过上面的方法,但我得到了未定义。
这是 Chrome Canary 版本 77.0.3818.0 (Official Build) canary (64-bit)

是的,运行它会得到undefined因为设置一个选项没有返回值,但是如果您再次打印,您将提高打印输出质量。

谢谢。
为什么这不能作为用户可设置的选项而只能作为可通过编程设置的选项?

这在上面的评论中有解释,特别是https://github.com/mozilla/pdf.js/issues/2750#issuecomment -496697032。 在让它更容易访问之前,我们首先想对它进行试验。 请注意,就在一天前合并 PR #10879 应该有助于解决内存使用问题,现在这至少可以通过编程设置,我们可以更轻松地对其进行试验并包括改进。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

THausherr picture THausherr  ·  3评论

liuzhen2008 picture liuzhen2008  ·  4评论

BrennanDuffey picture BrennanDuffey  ·  3评论

brandonros picture brandonros  ·  3评论

hp011235 picture hp011235  ·  4评论