首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从pdf文档中获取X和Y坐标

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

Stack Overflow用户
提问于 2017-01-12 11:35:56
回答 1查看 6.5K关注 0票数 0

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

代码语言:javascript
运行
复制
 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();
         }
     }
 }

试图获取userUnit --在我的例子中,它们是空的

代码语言:javascript
运行
复制
                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);

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 11:54:00

你在做不同的假设是错误的。

在官方的iText网站上有一个常见问题,您可以在这里找到以前在堆栈溢出上回答过的问题。

测量单元

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

我引述如下:

FAQ在PDF文档中的度量单元是什么?PDF中的大多数测量以用户空间单元表示。ISO-32000-1 (第8.3.2.3节)告诉我们,“默认用户空间(1/72英寸)中的单位大小与印刷工业中广泛使用的单位点(pt)大致相同。这是不完全相同的,没有关于某一点的普遍定义。“简而言之,是1英寸。= 25.4毫米=72个用户单位(大致相当于72 pt)。

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

坐标系统:方位

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

让我复制/粘贴图片:

坐标系:原点

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

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

为什么你的问题不能回答

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

所以请仔细阅读上面列出的问题的答案,这样你就可以做必要的数学了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41612221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档