iTextSharp PdfStamper 根据最新的矩阵将条码放入现有的 PDF 中
iTextSharp PdfStamper puts barcode into an existing PDF according to the latest matrix
我有一个现有的 PDF,将其作为最后一个矩阵转换:
q 0.70711 0.70711 -0.70711 0.70711 141.73 274.96 厘米 1 0 0 1 -141.73 -274.96 厘米
(这是 45 度旋转和一些过渡)
我使用 PdfStamper 将图像插入 OverContent(使用方法 GetOverContent)。问题是,最后一个转换设置了 45 度旋转,所以条形码也旋转了。而且我无法重置此矩阵。我什至无法获得最后一个转换矩阵。
我已经尝试过 PdfReaderContentParser 获取所有矩阵并将它们相乘,这样我就可以得到倒矩阵来使用 ConcatCTM 和这个倒矩阵再次生成单位矩阵,但是解析器没有 return 所有矩阵。只取图片矩阵,不取文字矩阵
我已经花了几个小时尝试不同的解决方案(创建模板、层等),none 工作,一切都根据最后一个矩阵旋转。
如何将矩阵重置回现有 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
Q
0.57w
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
Q
您的 PDF 有语法问题。我看到 "save state" 运算符 q
,但没有看到 "restore state" 运算符 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 ");
这将恢复图形状态(和您所说的 "reset the matrix")。不要对所有 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
语句。
我有一个现有的 PDF,将其作为最后一个矩阵转换:
q 0.70711 0.70711 -0.70711 0.70711 141.73 274.96 厘米 1 0 0 1 -141.73 -274.96 厘米 (这是 45 度旋转和一些过渡)
我使用 PdfStamper 将图像插入 OverContent(使用方法 GetOverContent)。问题是,最后一个转换设置了 45 度旋转,所以条形码也旋转了。而且我无法重置此矩阵。我什至无法获得最后一个转换矩阵。
我已经尝试过 PdfReaderContentParser 获取所有矩阵并将它们相乘,这样我就可以得到倒矩阵来使用 ConcatCTM 和这个倒矩阵再次生成单位矩阵,但是解析器没有 return 所有矩阵。只取图片矩阵,不取文字矩阵
我已经花了几个小时尝试不同的解决方案(创建模板、层等),none 工作,一切都根据最后一个矩阵旋转。
如何将矩阵重置回现有 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
Q
0.57w
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
Q
您的 PDF 有语法问题。我看到 "save state" 运算符 q
,但没有看到 "restore state" 运算符 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 ");
这将恢复图形状态(和您所说的 "reset the matrix")。不要对所有 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
语句。