从pdf文档中获取X和Y坐标

1 c# math itext

我试图从点击事件的 pdf 文档中获取 x 和 y 坐标。Pdf 文档没有 DOM,这就是为什么我在 pdf 文档顶部覆盖一个 div 以从 div 获取坐标。我正在使用 itextsharp 库并尝试在 pdf 文档中标记一个值。不幸的是,div 的 x 和 y 坐标以像素为单位,我需要将它们与压模中的值相关联。我从 div 单击事件中获得的 X 坐标是:80, 300, 600, 880,我需要在压模中输入的 X 坐标是 10, 205,405,600。我需要应用什么比率来将 div 坐标转换为压模坐标。

 private static void InsertTextToPdf(string sourceFileName, string newFileName)
 {
     using (Stream pdfStream = new FileStream(sourceFileName, FileMode.Open))
     {
         using (Stream newpdfStream = new FileStream(newFileName, FileMode.Create, FileAccess.ReadWrite))
         {
                PdfReader pdfReader = new PdfReader(pdfStream);
                iTextSharp.text.Rectangle pageSize = pdfReader.GetPageSize(1);
                Console.Write(pageSize);

                PdfStamper pdfStamper = new PdfStamper(pdfReader, newpdfStream);
                PdfContentByte pdfContentByte = pdfStamper.GetOverContent(1);
                BaseFont baseFont = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, BaseFont.NOT_EMBEDDED);
                pdfContentByte.SetColorFill(BaseColor.RED);
                pdfContentByte.SetFontAndSize(baseFont, 12);
                pdfContentByte.BeginText();
                pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Test", 10, 190, 0);
                pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Test", 205, 190, 0);
                pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Test", 405, 190, 0);
                pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Test", 600, 190, 0);
                pdfContentByte.EndText();
                pdfStamper.Close();
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

尝试获取 userUnit - 在我的例子中它们为空

                PdfReader pdfReader = new PdfReader(pdfStream);
                iTextSharp.text.Rectangle pageSize = pdfReader.GetPageSize(1);
                Console.Write(pageSize);
                iTextSharp.text.pdf.PdfDictionary pageDict = pdfReader.GetPageN(1);
                iTextSharp.text.pdf.PdfNumber userUnit = pageDict.GetAsNumber(iTextSharp.text.pdf.PdfName.USERUNIT);
                Console.Write("\nPageDict " + pageDict);
                Console.Write("\nUser Unit " + userUnit);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Bru*_*gie 5

您正在做出错误的不同假设。

\n

iText 官方网站上有一个常见问题解答,您可以在其中找到之前在 Stack Overflow 上回答过的问题。

\n

测量单位

\n

您必须阅读的第一个常见问题解答条目是:如何从 PDF 文件中获取 UserUnit?

\n

我引用:

\n
\n

常见问题解答 PDF 文档中的测量单位是什么?PDF 中的大多数测量值都以用户空间单位表示。ISO-32000-1(第 8.3.2.3 节)告诉我们\n\xe2\x80\x9c默认用户空间中单位的默认大小(1/72 英寸)\n大约与点 (pt) 相同,广泛应用于印刷\行业的装置。它并不完全相同;点没有通用的定义。\xe2\x80\x9d\n简而言之,1 英寸 = 25.4 毫米 = 72 个用户单位(大致相当于 72 点)。

\n
\n

默认情况下,72 个用户单位为 1 英寸,但可以通过定义 UserUnit 来更改此默认值。

\n

坐标系:方向

\n

您必须阅读的第二个常见问题解答条目是:我应该如何解释 PDF 中矩形的坐标?

\n

让我复制/粘贴图像:

\n

在此输入图像描述

\n

坐标系:原点

\n

最后,您必须阅读:PDF页面的原点(x,y)在哪里?

\n

阅读完上一个问题后,您可能会假设左下角对应于坐标(0, 0),但这并不总是正确的。

\n

为什么您的问题无法得到解答

\n

您声称您将 PDF 呈现为图像,并且可以将坐标检索为像素坐标,例如所有像素行的第 300 行中的第 80 个像素。但是,如果在将 PDF(矢量数据)转换为光栅图像时没有人知道 PDF 的渲染分辨率,则没有人可以告诉您用户单位与像素的关系。那是只有你才能知道的事情。

\n

因此,请仔细阅读上面列出的问题的答案,您将能够进行必要的数学运算。

\n