Pdf.js: SVG 路径被错误地分成 2 个节点

创建于 2019-02-06  ·  4评论  ·  资料来源: mozilla/pdf.js

在此处附加(推荐)或链接到 PDF 文件:
测试4.pdf

配置:

  • 网络浏览器及其版本:Chrome 56.0.2924.76
  • 操作系统及其版本:Linux Mint 18.3
  • PDF.js 版本:提交 c0d6e46e392b327996eb0964b7932cb5bdde1727
  • 是否为浏览器扩展:否

重现问题的步骤:

  1. 运行“节点 pdf2svg.js test4.pdf”
  2. 将输出 test4.1.svg 加载到 Chrome
  3. 检查控制台错误日志。 你会看到这个:
    chrome_console_error

什么是预期行为? (添加截图)
没有错误。

什么地方出了错? (添加截图)
输出中的一条路径被分成两部分。
最初的“M”在一个节点中,后面的“L”在下一个节点中。
这些应该在同一个节点中。
bad_svg_node

链接到查看器(如果托管在 mozilla.github.io/pdf.js 或作为 Firefox/Chrome 扩展程序以外的站点上):

4-svg

最有用的评论

我不太熟悉OperatorList的工作原理,但看起来操作符列表被分成大约 1000 个操作符的块。

正确的; 这是为了允许在整个OperatorList (即页面)被解析之前开始呈现,从而减少从页面加载到完全呈现所需的总时间。

这听起来有道理吗?

是的,它应该很容易验证(只需增加很多值,有效地禁用这种分块)。

svg.js 应该被修复,而不是修改OperatorList和它的常量CHUNK_SIZE

同意,修改常量绝对不是一个可以接受的解决方案。 首先,它只会将错误移到别处。 其次,更重要的是,更改它可能会对画布后端的一般渲染性能产生深远的影响。

可能是这样的:如果没有中间路径绘制操作符,连续的OPS.constructPath操作符应该组合成一个<svg:path>节点......

再一次,这听起来完全合理。

所有4条评论

这可能与错误 #9167 有关。

我认为罪魁祸首在这里:
https://github.com/mozilla/pdf.js/blob/a045a00af34b764edda5991d2bcd18541ed60536/src/core/operator_list.js#L533 -L534
我不太熟悉OperatorList的工作原理,但看起来操作符列表被分成大约 1000 个操作符的块。 有时,块边界位于 PDF 路径定义的中间。 这会产生两个OPS.constructPath运算符,而后者不是以moveTo开头。

这听起来有道理吗?

svg.js 应该被修复,而不是修改OperatorList和它的常量CHUNK_SIZE 。 可能是这样的:如果没有中间路径绘制操作符,连续的OPS.constructPath操作符应该组合成一个<svg:path>节点......

我不太熟悉OperatorList的工作原理,但看起来操作符列表被分成大约 1000 个操作符的块。

正确的; 这是为了允许在整个OperatorList (即页面)被解析之前开始呈现,从而减少从页面加载到完全呈现所需的总时间。

这听起来有道理吗?

是的,它应该很容易验证(只需增加很多值,有效地禁用这种分块)。

svg.js 应该被修复,而不是修改OperatorList和它的常量CHUNK_SIZE

同意,修改常量绝对不是一个可以接受的解决方案。 首先,它只会将错误移到别处。 其次,更重要的是,更改它可能会对画布后端的一般渲染性能产生深远的影响。

可能是这样的:如果没有中间路径绘制操作符,连续的OPS.constructPath操作符应该组合成一个<svg:path>节点......

再一次,这听起来完全合理。

我可以确认,如果我将 CHUNK_SIZE 增加到 10000000,那么问题就会消失。
(我同意这不是一个正确的解决方案)
谢谢你的帮助。

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

相关问题

liuzhen2008 picture liuzhen2008  ·  4评论

dmisdm picture dmisdm  ·  3评论

smit-modi picture smit-modi  ·  3评论

THausherr picture THausherr  ·  3评论

patelsumit5192 picture patelsumit5192  ·  3评论