0

我有一个现有的 PDF,它作为最后一个矩阵转换:

q 0.70711 0.70711 -0.70711 0.70711 141.73 274.96 cm 1 0 0 1 -141.73 -274.96 cm(即 45 度旋转和一些过渡)

我使用 PdfStamper 将图像插入 OverContent(使用方法 GetOverContent)。问题是,最后一个转换设置了 45 度旋转,所以条形码也被旋转了。而且我无法重置此矩阵。我什至无法获得最后一个转换矩阵。

我已经尝试过 PdfReaderContentParser 来获取所有矩阵并将它们相乘,这样我就可以得到倒置矩阵来使用 ConcatCTM 和这个倒置矩阵来再次生成单位矩阵,但是解析器不会返回所有矩阵。它只获取图像矩阵,而不获取文本矩阵。

我已经花了几个小时尝试不同的解决方案(创建模板、图层……),但没有任何效果,一切都根据最后一个矩阵旋转。

如何将矩阵重置为现有 PDF 中的标识?这样 PdfStamper 插入的条形码不会旋转 45 度。

请不要建议为条形码图像设置 -45 度旋转,它不能解决任何问题,因为 PDF 可以有也可以没有最后有旋转矩阵。

我真的需要将转换矩阵重置为 OverContent 的单位矩阵。

非常感谢你们...

编辑:这是完整的内容:

q 0.70711 0.70711 -0.70711 0.70711 141.73 274.96 厘米 1 0 0 1 -141.73 -274.96 厘米

q BT 141.73 274.96 Td 5 Tr (一些文本) Tj ET

0.57 瓦

BT /F1 20.00 Tf ET

q 1.00000 0.00000 0.00000 1.00000 155.91 246.61 厘米 1 0 0 1 -155.91 -246.61 厘米

q BT 155.91 246.61 Td 5 Tr (一些文本) Tj ET

4

1 回答 1

1

您的 PDF 存在语法问题。我看到了“保存状态”操作符q,但没有看到“恢复状态”操作符Q

代替:

q 0.70711 0.70711 -0.70711 0.70711 141.73 274.96 cm 1 0 0 1 -141.73 -274.96 cm

你应该有:

q 0.70711 0.70711 -0.70711 0.70711 141.73 274.96 cm 1 0 0 1 -141.73 -274.96 cm Q

好吧,实际上,如果您在共享的 PDF 语法之后没有任何其他内容,则应该删除该完整片段,因为引入坐标系转换然后什么也不做是没有意义的。

如果你想为这个特定的 PDF 修复这个问题,你可以这样做:

overContent.SetLiteral(" Q ");

这将恢复图形状态(并按照您的说法“重置矩阵”)。不要对所有的 PDF 执行此操作,仅针对这个有缺陷的 PDF。

更新:

您说代码的语法如下所示:

q 0.70711 0.70711 -0.70711 0.70711 141.73 274.96 cm 1 0 0 1 -141.73 -274.96 cm
q BT 141.73 274.96 Td 5 Tr (some text) Tj ET
Q
0.57 w
BT /F1 20.00 Tf ET
q 1.00000 0.00000 0.00000 1.00000 155.91 246.61 cm 1 0 0 1 -155.91 -246.61 cm
q BT 155.91 246.61 Td 5 Tr (some text) Tj ET
Q

这段代码是错误的。创建此 PDF 的人要么使用了糟糕的工具,要么以非常糟糕的方式使用了好工具。正确的语法是:

q 0.70711 0.70711 -0.70711 0.70711 141.73 274.96 cm 1 0 0 1 -141.73 -274.96 cm
BT 141.73 274.96 Td 5 Tr (some text) Tj ET
Q
q 0.57 w
BT /F1 20.00 Tf ET
q 1.00000 0.00000 0.00000 1.00000 155.91 246.61 cm 1 0 0 1 -155.91 -246.61 cm
BT 155.91 246.61 Td 5 Tr (some text) Tj ET
Q
Q

您可以像这样解决问题:

q 0.70711 0.70711 -0.70711 0.70711 141.73 274.96 cm 1 0 0 1 -141.73 -274.96 cm
q BT 141.73 274.96 Td 5 Tr (some text) Tj ET
Q
0.57 w
BT /F1 20.00 Tf ET
q 1.00000 0.00000 0.00000 1.00000 155.91 246.61 cm 1 0 0 1 -155.91 -246.61 cm
q BT 155.91 246.61 Td 5 Tr (some text) Tj ET
Q
Q
Q

现在q/Q序列是平衡的。我正在添加数字以向您显示哪个q对应于哪个Q

q[1] 0.70711 0.70711 -0.70711 0.70711 141.73 274.96 cm 1 0 0 1 -141.73 -274.96 cm
q[2] BT 141.73 274.96 Td 5 Tr (some text) Tj ET
Q[2]
0.57 w
BT /F1 20.00 Tf ET
q[3] 1.00000 0.00000 0.00000 1.00000 155.91 246.61 cm 1 0 0 1 -155.91 -246.61 cm
q[4] BT 155.91 246.61 Td 5 Tr (some text) Tj ET
Q[4]
Q[3]
Q[1]

这种语法是错误的(显然),但数字显示了为什么Q缺少两个语句。

于 2016-11-15T11:20:54.217 回答