我试图从点击事件上的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坐标转换为压印坐标,我需要应用什么比率。
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 --在我的例子中,它们是空的
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);
发布于 2017-01-12 03: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是以何种分辨率呈现的,则没有人能够告诉您用户单元与像素的关系。只有你才能知道。
所以请仔细阅读上面列出的问题的答案,这样你就可以做必要的数学了。
https://stackoverflow.com/questions/41612221
复制