当前位置: 首页 > article >正文

PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第一部分)

在填充 PDF 中的图形时(以及许多其他技术中),你可以选择使用 Even-Odd(奇偶) 或 Non-Zero(非零) 填充规则。

对于那些已经在想“你在说啥?”的朋友,别担心,我马上解释。

一个图形有“内部”和“外部”。对于一个简单的图形来说,判断什么是内部、什么是外部非常简单。但如果你在页面上乱涂乱画,路径多次交叉,最后闭合起来——这时候哪个部分是“内部”?哪个是“外部”?如果你还有嵌套的图形,或者多个图形重叠呢?

我们可以通过 Even-Odd 或 Non-Zero 两种规则来解决这个问题。

Even-Odd(奇偶规则):

“此规则通过从画布上的某点向任意方向发射一条射线,并统计该射线与图形路径段的交点数量来判断该点是否在图形内部。如果交点数量是奇数,则该点在图形内部;如果是偶数,则在图形外部。”
—— 摘自 W3C SVG 1.1 规范

举个例子:

EvenOddRule
(参考自 W3C SVG 1.1)

Non-Zero(非零规则):

“此规则通过从画布上的某点向任意方向发射一条射线,并检查图形路径与射线的交点来判断该点是否在图形内部。初始计数为 0,每当路径从左向右穿过射线时加 1,从右向左穿过时减 1。最终的结果如果是 0,该点在图形外部;否则,在图形内部。”
—— 摘自 W3C SVG 1.1 规范

举个例子:

 

NonZeroRule
(参考自 W3C SVG 1.1)

简单来说 —— 使用 Non-Zero 填充规则时,图形绘制的方向会影响填充效果。如果你用 Non-Zero 规则来绘制原本应该使用 Even-Odd 规则的图形,那你就会看到一些本不该被填充的区域被错误地填充了。

而这正是我们在将 PDF 转换为 HTML5 时遇到的问题 —— PDF 支持 Even-Odd 和 Non-Zero 两种规则,而 HTML5(Canvas API)只支持 Non-Zero 规则。

所以我们陷入了一个困境 —— 当我们遇到在 PDF 中使用了 Even-Odd 规则的图形,转换到 HTML5 时该怎么办?

要了解答案,请继续阅读 第二部分 的内容。

 

我们的主页:PDF 转 HTML5、Java 图像库、Java PDF SDK - IDRsolutions

 

http://www.lryc.cn/news/2403365.html

相关文章:

  • C++.OpenGL (5/64)变换(Transformation)
  • 优化电脑的磁盘和驱动器提高电脑性能和延长硬盘寿命?
  • 【八股消消乐】MySQL参数优化大汇总
  • JavaSec-SPEL - 表达式注入
  • 在 Caliper 中执行不同合约的方法
  • CSS 平铺+自动换行效果
  • 微服务网关SpringCloudGateway+SaToken鉴权
  • 永磁同步电机控制算法--模糊PI转速控制器
  • Elasticsearch集群最大分片数设置详解:从问题到解决方案
  • 计算机视觉与深度学习 | 基于MATLAB的图像特征提取与匹配算法总结
  • DVWA全靶场
  • 【反无人机检测】C2FDrone:基于视觉Transformer网络的无人机间由粗到细检测
  • Android 本地存储路径说明
  • Git 推送失败解决教程——error: failed to push some refs to
  • spark 执行 hive sql数据丢失
  • 国产pcie switch 8748+飞腾/龙芯/昇腾高速存储方案设计
  • 【Qt】:设置新建类模板
  • 如何使用插件和子主题添加WordPress自定义CSS(附:常见错误)
  • 开始在本地部署自己的 Gitea 服务器
  • 7.2.1_顺序查找
  • spring重试机制
  • C语言的全称:(25/6/6)
  • 智能制造数字孪生全要素交付一张网:智造中枢,孪生领航,共建智造生态共同体
  • stylus - 新生代CSS预处理框架
  • python八股文算法:三数之和
  • HttpServletRequest常用方法
  • BugKu Web渗透之网站被hei(仅仅是ctf题目名称)
  • 群论在现代密码学中的应用探索与实践 —— 从理论到C语言实现
  • 深入理解MySQL死锁:从原理、案例到解决方案
  • 关于华为仓颉编程语言