使用 iTextSharp 在不同 PDF 中的坐标系和置换文本问题

Posted

技术标签:

【中文标题】使用 iTextSharp 在不同 PDF 中的坐标系和置换文本问题【英文标题】:Problem with coordinate system and displaced Text in different PDFs using iTextSharp 【发布时间】:2009-05-14 12:40:04 【问题描述】:

我正在使用 iTextSharp 和 .NET 3.5 SP1(在 C# 中,您可以猜到)并使用 PdfStamper 类修改一些现有的 PDF。现在我有两个问题:

变换坐标系

在我看来,iTextSharp 使用(后记?)点作为测量单位,但我想将这些坐标转换为毫米。现在,实现这一目标的最佳方法是什么?

查看文档发现了以下方法:

PdfContentByte cb = new PdfContentByte();
System.Drawing.Drawing2D.Matrix scale = new System.Drawing.Drawing2D.Matrix(
    0.352777778, 0, 0.352777778, 0, 0, 0); // 1 point = 0.352777778 mm
cb.Transform(scale);

我希望我得到了正确的转换矩阵。但问题是:没有System.Drawing.Drawing2D大会!这个程序集是被丢弃还是发生了什么?我该怎么做才能将 iTextSharp 的坐标转换为毫米。我是不是走错路了?

PDF 中的文本在使用相同坐标的不同 PDF 中被置换

我注意到,在修改两个不同具有相同内容的PDF文件时,相同的坐标发生了偏移,并且文本没有被放置在完全相同的位置。这是什么原因造成的,我该如何预防?

这是第一个 PDF:

这是第二个 PDF,使用 iTextSharp 中完全相同的坐标创建:

感谢任何帮助。

【问题讨论】:

【参考方案1】:

但问题是:没有 System.Drawing.Drawing2D 组装!曾是 这个程序集掉了或者发生了什么 给它?我能做些什么来改变 iTextSharp 的坐标到 毫米。我是不是走错路了 在这里?

http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.matrix.aspx(在 System.Drawing.dll 中)

【讨论】:

如何使用这个类?我已经插入了“使用 System.Drawing;”声明,但它仍然无法识别 System.Drawing.Drawing2D.Matrix。我不确定“在 System.Drawing.dll 中”是什么意思。我必须以其他方式包含此内容吗? 你必须引用 System.Drawing.Dll。在您的项目中,找到 References 文件夹。右键单击,添加引用,然后五分钟后,在第一个选项卡中搜索 System.Drawing.Dll。现在把我的 2 分还给我! 一旦你引用了它,你就可以像例子中一样使用它。他们正在做矩阵变换,这并不是最容易学习或理解的事情。如果你想做的比示例代码演示的更多,恐怕你必须自己做一些阅读。 很高兴,但您必须先编辑您的帖子,然后我才能投票。最好将您的解释从帖子中的评论中放入,以便其他用户直接看到。谢谢! :) 1)他们可以看到它 2)它的基本 3)我很懒【参考方案2】:

好的,我解决了第二个问题,尽管使用了相同的坐标,但文本被移位。

事实证明,第一个 PDF 包含一些不可见的修剪空间,第二个没有。修剪空间不可见,因为视图空间是使用 PDF 创建器裁剪的,但看起来修剪空间仍然存在并计入坐标。

【讨论】:

以上是关于使用 iTextSharp 在不同 PDF 中的坐标系和置换文本问题的主要内容,如果未能解决你的问题,请参考以下文章

iTextSharp 在 pdf 文件中的单词中插入空格

使用文本框中的值通过 iTextSharp 保存 PDF 文件

iTextSharp Pdf 页面导入内存问题

使用 itextsharp 在现有 pdf 中插入文本

使用itextsharp.dll生成PDF [关闭]

如何在 c# 中的 iTextSharp pdf 中将位图显示为 jpeg 格式