如何阅读PDF文本矩阵

use*_*906 5 pdf text matrix

我正在编写一个程序来直接从我的程序创建PDF文件.我已经使用了PDF参考手册并设法找出除了1件之外的所有东西.文本矩阵 - 它必须是我曾经阅读,搜索,重新阅读,重新搜索和重新阅读的最令人困惑的事情,但仍然没有进行.大约在我认为我承诺它的时候出现了一些东西,我认为我没有.

我遇到的问题是创建一个标准的11 x 8.5尺寸(792 x 612)的横向PDF文件.我可以创建文件,所有内容都在横向上正确显示和显示.

现在,我想删除每个页面上显示的所有常用文本,并将其放入Form XObject,并使用Do将其添加到每个页面.我有这个工作伟大的肖像PDF文件.当我尝试使用Landscape PDF文件时,Form Xobject文本打印的旋转方式与页面的其余部分不同.显然,页面的旋转不关心Form XObject.

我相信这与Text Matrix有关,我试图找到值的简单解释.我理解sin和cosin,但不了解如何指定值的布局.例子:我找到了旋转的解释:为了产生abcdef tm旋转cos0 sin0 -sin0 cos0 0 0逆时针旋转坐标系轴0角...嗯?我理解sin cosin和"逆时针"但是这就是关于它没有简单的例子可以找到我想我需要看一些例子来理解这个

Text Matrix的外观如下:

  • 0轮?
  • 90转?
  • 180转?
  • 270转?

我找到了这个例子,但似乎无法破译它的翻译内容

这个文本矩阵用简单的英语翻译成什么.

示例文本矩阵:0 1 -1 0 07 07 Tm

每个值代表什么?

  • 0 =
  • 1 =
  • -1 =
  • 0 =
  • 07 =
  • 07 =

任何帮助将不胜感激.任何带有简单英语解释的例子都将非常感激任何带有Landscape文件和Form Xobject的PDF文件都会受到赞赏一张图片胜过千言万语所以PDF样本文件我通常可以用记事本打开并找出我不明白的东西(文字矩阵除外)

谢谢理查德

Mik*_*ike 19

PDF中使用的矩阵是仿射变换.

tm 将参数加载到:

| ab 0 |
| cd 0 |
| ef 1 |

哪里:

a is Scale_x
b is Shear_x
c is Shear_y
d is Scale_y
e is offset x
f is offset y
Run Code Online (Sandbox Code Playgroud)

可以在http://docstore.mik.ua/orelly/java-ent/jfc/ch04_11.htm找到一个很好的介绍.

希望这有助于某人.


Pet*_*ber 5

点定义

[x,y,1]

这是一个一维向量(数组),将点放置在坐标 x 和 y 处。1 不需要指定点位置,但它有助于计算不同坐标系中点的位置,例如从设备独立像素到设备相关像素。

平移计算

x_new = a*x + c*y + e;
y_new = b*x + d*y + f;
Run Code Online (Sandbox Code Playgroud)

写成矩阵,计算如下:

翻译矩阵

翻译移动了一个点。

[1, 0, 0, 1, tx, ty]

x_new = 1*x + 0*y + tx;
y_new = 0*x + 1*y + ty;
Run Code Online (Sandbox Code Playgroud)

或者

x_new = x + tx;
y_new = y + ty;
Run Code Online (Sandbox Code Playgroud)

旋转矩阵

在此输入图像描述

[cos(theta), sin(theta), -sin(theta), cos(theta), 0, 0]

x_new = cos(theta)*x - sin(theta)*y + 0;
y_new = sin(theta)*x + cos(theta)*y + 0;
Run Code Online (Sandbox Code Playgroud)

0度旋转,cos(0)=1,sin(0)=0:[1, 0, -0, 1, 0, 0]

x_new = 1*x + 0*y + 0;
y_new = 0*x + 1*y + 0;
Run Code Online (Sandbox Code Playgroud)

或者

x_new = x;
y_new = y;
Run Code Online (Sandbox Code Playgroud)

90度旋转,cos(90)=0,sin(90)=1:[0, 1, -1, 0, 0, 0]

x_new = 0*x + -1*y + 0;
y_new = 1*x + 0*y + 0;
Run Code Online (Sandbox Code Playgroud)

或者

x_new = -y;
y_new = x;
Run Code Online (Sandbox Code Playgroud)

180度旋转,cos(180)=-1,sin(180)=0:[-1, 0, -0, -1, 0, 0]

x_new = -1*x + 0*y + 0;
y_new = 0*x + -1*y + 0;
Run Code Online (Sandbox Code Playgroud)

或者

x_new = -x;
y_new = -y;
Run Code Online (Sandbox Code Playgroud)

270 度旋转,cos(270)=0, sin(270)=-1: [0, -1, 1, 0, 0, 0]

x_new = 0*x + 1*y + 0;
y_new = -1*x + 0*y + 0;
Run Code Online (Sandbox Code Playgroud)

或者

x_new = y;
y_new = -x;
Run Code Online (Sandbox Code Playgroud)

文本矩阵示例

[0 1 -1 0 07 07]

0 1 -1 0:旋转 90 度 07 07:在 x 和 y 方向上平移(偏移)7