gpt4 book ai didi

PDF 规范 - 以点为单位获取字体大小

转载 作者:行者123 更新时间:2023-12-04 21:22:51 34 4
gpt4 key购买 nike

我正在尝试用 C# 编写 PDF 解析器,但我遇到了一个问题,我不确定如何解释规范。

除非另有说明,否则 PDF 文档中的用户空间为 1/72 英寸(即 1pt)。

Tf 运算符提供的比例将字体从标准大小(通常是 1 个用户空间单位/1pt)缩放到正确的显示大小。

我有以下页面内容:

1 0 0 -1 0 792 cm
q
0 0 612 792 re
W* n
q
.75 0 0 .75 0 0 cm
1 1 1 RG 1 1 1 rg
/G0 gs
0 0 816 1056 re
f
0 0 816 1056 re
f
0 0 816 1056 re
f
Q
Q
q
0 0 612 791.25 re
W* n
q
.75 0 0 .75 0 0 cm
1 1 1 RG 1 1 1 rg
/G0 gs
0 0 816 1055 re
f
0 96 816 960 re
f
0 0 0 RG 0 0 0 rg
BT
/F0 21.33 Tf
1 0 0 -1 0 140 Tm
96 0 Td <0037> Tj
13.0280762 0 Td <004B> Tj
11.8616943 0 Td <004C> Tj
4.7384338 0 Td <0056> Tj
ET
BT
/F1 21.33 Tf
1 0 0 -1 0 140 Tm
136.292267 0 Td <0001> Tj
ET
...

我知道示例中定义的 2 个文本操作的字体大小为 16pt,但 Tf 运算符使用的大小为 21.33。为了从这个字体大小转换回点,我打算使用 cm 运算符的比例(y)来制作点大小:

21.33 * 0.75 = 15.9975

但是我在 PDF 规范中找不到任何支持此转换的内容,而且我检查过的所有库(PDFBox、iTextSharp、Spire PDF)都没有将字体大小列为 21.33。

我应该使用 CTM(由 cm 运算符定义)将字体大小缩放回正确的比例,还是这只是纯粹的机会?

pdf 文件在这里:https://github.com/UglyToad/PdfPig/blob/master/src/UglyToad.PdfPig.Tests/Integration/Documents/Single%20Page%20Simple%20-%20from%20google%20drive.pdf

最佳答案

首先,您与其他文本提取器的比较是基于一个误解:

none of the libraries I checked (PDFBox, iTextSharp, Spire PDF) listed the font size as anything but 21.33.

所有这些库返回的“字体大小”参数只是 Tf 指令的大小参数,而不是您在您试图确定的最终文档中观察到的有效字体大小。所以你与其他图书馆的比较没有意义。


现在,关于您的方法:

In order to convert from this font size back to points I was intending to use the scale (y) of the cm operator making the point size:

21.33 * 0.75 = 15.9975

虽然有些图书馆这样调用它,但称第四个 cm 参数为“scale (y)”是一种误导。例如。在文本旋转 90° 的情况下,它通常为空,而图形表示通常减小到零高度。

因此,仅使用“scale(y)”参数是行不通的,您必须考虑整个转换。


最后让我们讨论一下您的实际需求。

只要组合变换矩阵(当前变换矩阵 + 文本矩阵 + 水平缩放)是正交的并且文本行遵循这种正交性,您的字体大小概念的含义就相当明显。

但是一旦那个组合矩阵发生剪切,“字体大小”的含义就不再明显了。

  • 您可能指的是原始垂直线(一个单位高)被转换成的长度。
  • 您可能指的是转换后的线投影到与转换后的字体基线成直角的线上的长度。
  • 或者您可能指的是转换后的线在与观察到的基线成直角的线上的投影长度。

使用简单的线性代数计算前两个数字是微不足道的。第三个数字可能更难,因为您必须确定人类在生成的 PDF 中观察到的基线。在创新使用转换的情况下,这可能很重要

关于PDF 规范 - 以点为单位获取字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48010235/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com