THotPDF.BuildLoadedPageSVG Method
把选定的已加载 PDF 页面构建为独立的 SVG 文档
声明
function BuildLoadedPageSVG(PageIndex: Integer): AnsiString; overload;
function BuildLoadedPageSVG(PageIndex: Integer;
EmbedFonts: boolean): AnsiString; overload;
单元
HPDFDoc
参数
| 名称 | 用途 |
|---|---|
PageIndex | 已加载页面的从零开始索引 |
EmbedFonts | True 把嵌入字体的字形按轮廓写入 SVG,因此这些字体未安装时页面外观也一致;False 以及不带此参数的重载,把文本交给查看器已安装的字体 |
返回值
返回完整的 SVG 文档;页面无法导出时返回空字符串
使用说明
- 路径、解码后的文本、图像 XObject、内联图像和递归的 Form XObject,都通过共享的内容设备解释器输出;Form XObject 以其绘制处生效的颜色开始
- 画布覆盖页面的可见部分,即裁剪到
/MediaBox的/CropBox(参见GetLoadedPageVisibleBox),并按/Rotate旋转;即使盒子不从原点开始,盒子的左下角也映射到画布一角 - 文本以 UTF-8 写出,每个字符一个
x位置并带xml:space="preserve",空格得以保留;连字 glyph 展开为它代表的所有字符,XML 1.0 不允许的码点变成 U+FFFD - 文本摆放遵循完整的 text matrix,包括字符与词间距、水平缩放、rise 和
TJ调整;渲染模式 0 到 2 填充、描边或两者兼做,模式 3 不画任何东西,模式 4 到 7 显示的文本字形还会成为从文本对象结束(ET)到 graphics state 结束的裁剪路径 - 默认情况下文本使用已安装字体:标准 14 个字体族及其 TrueType 对应映射为 Helvetica 或 Arial、Times New Roman 和 Courier New,其他字体按字体族名引用,也在词间加空格的名称(
MyriadPro, Myriad Pro)下引用,后跟取自 font descriptor 标志或名称的通用字体族。粗体和斜体文本从字体名的样式部分(Arial-BoldMT、Helvetica-Oblique、MinionPro-It)以及 font descriptor 的 weight、标志和 italic 角度获得font-weight与font-style EmbedFonts设为True时,TrueType 或 CFF 程序内嵌于 PDF 的字体,其文本从程序的 glyph 轮廓绘制。每个字形在<defs>中定义为一次<path>,出现处用<use>放置,因此重复字符不会重复轮廓;填充与描边模式、线宽和文本裁剪像 SVG 文本一样跟随文本。文本本身保留为轮廓之上的透明 SVG 文本,因此仍可被选择、搜索和辅助技术读取- 未内嵌的字体、Type 1 字体程序(
/FontFile)、竖排 CJK,以及包含内嵌程序中没有的字形的码点序列,即使设置了EmbedFonts也仍是 SVG 文本。轮廓会增大文件,文本密集的页面常达到两三倍 - 任何色彩空间(
DeviceGray、DeviceRGB、DeviceCMYK、ICCBased、calibrated、Lab、Indexed、Separation 和 DeviceN)中设置的填充色和描边色,都按页面渲染器同样的方式转换成 sRGB - 以平铺 pattern 填充的路径,用以 SVG
<pattern>每XStep和YStep重复 pattern 单元并裁剪到其/BBox的方式填充;无色 pattern 用随 pattern 给出的颜色绘制单元。以 shading pattern 填充的路径获得其 shading 的渐变或网格,并按路径裁剪。pattern 矩阵在页面的空间、或使用该 pattern 的窗体的空间中应用。使用 pattern 的描边使用其颜色,有色 pattern 为黑色 - Type 2 轴向渐变和 Type 3 径向渐变使用 SVG 渐变,采样色标数量有界;
Extend未延伸的一端与 PDF 一样保持不绘制 - Type 4 到 Type 7 的 mesh shading 使用有界的透明 PNG data URI,最多 1600 万像素
- 内联图像通过与已加载文档相同的图像路径解码,并嵌入为 PNG data URI
- 图像掩码(包括内联的)变成用当前填充色绘制的 PNG 图像,未绘制的位置透明;
/SMask和/Mask模板掩码为图像加上 alpha 通道,掩码分辨率比图像更细时按掩码分辨率。色键/Mask数组让 Flate、LZW 和无过滤图像中匹配的像素变为透明 W和W*裁剪路径变成 SVG<clipPath>元素,作用域到设置它的 graphics state 结束;Form XObject 被裁剪到自己的/BBox,轴向和径向 shading 也裁剪到各自的范围- Type 3 字体中的文本不再以 SVG 文本绘制,而是用该字体的 glyph 程序、经其
/FontMatrix放置绘制;以d1开头的字形以当前填充色绘制。Type 3 字形不会加入渲染模式 4 到 7 的裁剪路径 - shading 的
Background颜色在 shading 之前填充 shading pattern 的区域,因此出现在 shading 未绘制的任何地方;与 PDF 一样,以sh绘制 shading 时忽略它 - Type 1 函数型 shading 在其
Domain上采样为最多 256 × 256 样本的 PNG data URI,经 shading 的Matrix放置;缩放时由查看器平滑