我试图从点击事件的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();
}
}
}
尝试获取userUnit - 在我的情况下,它们是null
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);
答案 0 :(得分:1)
你做出了不同的错误假设。
官方iText网站上有一个FAQ,您可以在其中找到之前在Stack Overflow上回答的问题。
您必须阅读的第一个FAQ条目是:How to get the UserUnit from a PDF file?
我引用:
常见问题 PDF文档中的测量单位是什么?大多数测量 PDF格式以用户空间单位表示。 ISO-32000-1(第8.3.2.3节)告诉我们 “默认用户空间(1/72英寸)中单位大小的默认值为 与点(pt)大致相同,是印刷中广泛使用的单位 行业。它不完全一样;没有普遍定义的观点。“ 简而言之,1英寸= 25.4毫米= 72个用户单位(大致相当于72磅)。
默认情况下,72个用户单位为1英寸,但可以通过定义UserUnit来更改此默认值。
您必须阅读的第二个FAQ条目是:How should I interpret the coordinates of a rectangle in PDF?
让我复制/粘贴图片:
最后,您必须阅读:Where is the origin (x,y) of a PDF page?
阅读上一个问题后,您可能会认为左下角与坐标(0, 0)
一致,但并不总是如此。
您声称您将PDF作为图像呈现,并且您可以将坐标检索为像素坐标,例如所有像素行的第300行中的第80个像素。但是,如果在将PDF(矢量数据)转换为光栅图像时没有人知道PDF的渲染分辨率,则没有人能够告诉您用户单元与像素的关系。只有你才能知道的事情。
因此,请仔细阅读上面列出的问题的答案,并且您将能够完成必要的数学。