【发布时间】:2019-12-17 20:57:57
【问题描述】:
我正在开发一个 PdfParser,我想在坐标平面上打印 pdf 的文本内容。下面是用于呈现文本的文本对象和矩阵。如何隔离缩放、旋转和平移并用于在画布上的精确坐标上打印文本内容?
//Decoded text stream containing text objects
S
Q
q
0.000 0.750 0.750 -0.000 15.000 301.890 cm
0.000 g
/F10 16.000 Tf
0 Tr
0.000 Tc
BT
1 0 0 -1 20.000 13.600 Tm
[<007a>]TJ
ET
Q
q
0.000 0.750 0.750 -0.000 15.000 301.890 cm
1.000 0.416 0.000 rg
/F10 6.667 Tf
0 Tr
0.000 Tc
BT
1 0 0 -1 136.667 13.600 Tm
[<0024>12<0046><0046><0058><0055>6<0048><0003><0032><0058><0057><0053><0058><0057><0003><0036>-4<0052><004f><0058><0057><004c><0052><0051><0003><0026>3<004f><0052><0058><0047><0003><0048><0051>18<0059><004c><0055>6<0052><0051><0050><0048><0051>3<0057>7<000f><0003><0027><0028><0030><0032><0003><0044><0046><0046><0058><0055>6<0048>]TJ
ET
Q
q
0.000 0.750 0.750 -0.000 15.000 301.890 cm
0.000 g
/F10 16.000 Tf
0 Tr
0.000 Tc
BT
1 0 0 -1 603.333 13.600 Tm
[<007a>]TJ
ET
Q
q
【问题讨论】:
-
“隔离缩放、旋转和平移”是什么意思?毕竟他们不是独立的!例如。首先缩放 2 倍然后平移 (1, 0) 显然与首先平移 (1, 0) 然后缩放 2 倍不同。因此,您需要修复您想要的顺序分解变换。此外,您只提到了缩放、旋转和平移,但转换也可能包括倾斜和镜像
-
听起来您不仅在编写 PDFParse,而且还“在画布上的精确坐标上打印文本内容”渲染。您要查找的信息在此处的第 8 节和第 9 节中:adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf
-
如果分解矩阵对您很重要,那么请参阅类似的内容,了解如何将 2D PDF 矩阵分解为缩放、旋转等。stackoverflow.com/q/45159314/3761687 虽然这不是 mkl 的 100% 解决方案指出。
-
@mkl,我想要的是使用 cm,Tm 等运算符在画布上呈现这些文本。我想知道如何提取精确的x,y坐标和旋转角度等细节,但是坐标和旋转角度对我来说是最重要的。
-
Concatenating 表示将参数从左边乘以当前变换矩阵值。如果您计算该产品的方法得出错误的值,您应该展示一个示例以及如何计算该产品。我不确定你为什么要分解,但分解单个 cm 参数根本没有帮助,你需要分解产品。话虽如此,它只是之前所有 cm 参数的串联 if no q ... Q 包含一些 if 。