如何阅读PDF文本矩阵

时间:2013-04-24 14:44:21

标签: 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,但不了解如何指定值的布局。 示例:我找到了轮换的解释: 对于b c d e f 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 =

非常感谢任何帮助。 任何以简单英语解释的例子都将非常感激 任何带有横向文件和Form Xobject的示例PDF文件都将受到赞赏 一张图片胜过千言万语所以PDF样本文件我通常可以用记事本打开并弄清楚我不理解的东西(文字矩阵除外)

由于 理查德

3 个答案:

答案 0 :(得分:18)

PDF中使用的矩阵是Affine transforms

tm将参数加载到:

| a b 0 |
| c d 0 |
| e f 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

可在http://docstore.mik.ua/orelly/java-ent/jfc/ch04_11.htm

找到一个好的介绍

希望这有助于某人。

答案 1 :(得分:3)

您也可以参与PDF开发人员参考中的章节 4.2.2常见转换 http://partners.adobe.com/public/developer/en/pdf/PDFReference.pdf

答案 2 :(得分:0)

点定义

[x,y,1]

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

翻译计算

x_new = a*x + c*y + e;
y_new = b*x + d*y + f;

写为matix,计算结果如下:

翻译矩阵

翻译会移动一个点。

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

x_new = 1*x + 0*y + tx;
y_new = 0*x + 1*y + ty;

x_new = x + tx;
y_new = y + ty;

旋转矩阵

enter image description here

[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;

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;

x_new = x;
y_new = y;

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;

x_new = -y;
y_new = x;

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;

x_new = -x;
y_new = -y;

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;

x_new = y;
y_new = -x;

示例文本矩阵

[0 1 -1 0 07 07]

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