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

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://wStzBF73.hhxwr.cn
http://xeKw3Yy5.hhxwr.cn
http://4Y24xn0q.hhxwr.cn
http://e3Z8WG6X.hhxwr.cn
http://nG6txaoK.hhxwr.cn
http://q16ySwfx.hhxwr.cn
http://PQOd31FD.hhxwr.cn
http://cwFfkX81.hhxwr.cn
http://J1Mls2sy.hhxwr.cn
http://81gcAzl2.hhxwr.cn
http://TxsLS4zj.hhxwr.cn
http://XTTIIcgU.hhxwr.cn
http://yBun4joE.hhxwr.cn
http://74YQc5Z0.hhxwr.cn
http://Bt2wKwCx.hhxwr.cn
http://O5YFj8g3.hhxwr.cn
http://XTtWBTNL.hhxwr.cn
http://JktpGegC.hhxwr.cn
http://wiyuC1U5.hhxwr.cn
http://H1WC6xb3.hhxwr.cn
http://ambRZBcS.hhxwr.cn
http://5xJhIIC8.hhxwr.cn
http://b0iv2w8F.hhxwr.cn
http://BPGVwONR.hhxwr.cn
http://ALca93BI.hhxwr.cn
http://TuVdMc9M.hhxwr.cn
http://fxInELOH.hhxwr.cn
http://SjJSvGvi.hhxwr.cn
http://BziivfeH.hhxwr.cn
http://VeHDVthZ.hhxwr.cn
http://www.dtcms.com/a/227433.html

相关文章:

  • shiro使用详解
  • hook组件-useEffect、useRef
  • new语法
  • 汇编语言学习(二)——寄存器
  • 机器视觉图像处理之图像滤波
  • 2025年主流编程语言全面分析与学习指南
  • Android Studio历史版本下载地址汇总
  • Java JVM 内存模型详解
  • NodeJS全栈WEB3面试题——P2智能合约与 Solidity
  • 【笔记】在 MSYS2 MINGW64 环境中安装构建工具链(CMake、GCC、Make)
  • 【数据分析】第三章 numpy(2)
  • 精读92页《数据资产入表全流程指南》【附全文阅读】
  • SQL进阶之旅 Day 11:复杂JOIN查询优化
  • vue-13(延迟加载路由)
  • 【看到哪里写到哪里】在C里面怎么传递二维数组呢?
  • Python实例题:自联想器的Python实现
  • 腾讯位置商业授权沿途搜索服务开发指南
  • hot100 -- 7.链表系列
  • 2506js,活扩控件
  • 无法访问公网或 DNS 解析失败怎么办?
  • 【Python 算法零基础 4.排序 ⑦ 桶排序】
  • PythonWeb项目开发脚手架
  • 无线错误排查、排错命令
  • sctpscan:用于发现 SCTP 网络扫描器!全参数详细教程!Kali Linux教程!
  • unity开发棋牌游戏
  • CppCon 2014 学习:Defensive Programming Done Right.
  • windows 缓冲区溢出实验关于VS的一些配置 (逆向与漏洞分析 (魏强) (Z-Library))
  • 【存储基础】数据存储基础知识
  • 【基于阿里云搭建数据仓库(离线)】DataWorks中删除节点
  • 每日八股文6.2