簡體   English   中英

從pdf文檔獲取X和Y坐標

[英]Getting X and Y coordinates from pdf document

我正在嘗試在單擊事件時從pdf文檔獲取x和y坐標。 Pdf文檔沒有DOM,這就是為什么我將div覆蓋在pdf文檔的頂部以從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);

在此處輸入圖片說明

您正在做出錯誤的不同假設。

在iText官方網站上有一個FAQ,您可以在其中找到有關Stack Overflow之前已回答的問題的信息。

計量單位

您必須閱讀的第一個FAQ條目是: 如何從PDF文件獲取UserUnit?

我引用:

常問問題 PDF文件中的度量單位是什么? PDF中的大多數度量都以用戶空間單位表示。 ISO-32000-1(第8.3.2.3節)告訴我們“默認用戶空間(1/72英寸)中單位尺寸的默認值與打印中廣泛使用的單位(pt)大致相同。行業。 它並不完全相同; 簡而言之,1英寸= 25.4毫米= 72個用戶單位(大約相當於72磅)。

默認情況下,72個用戶單位為1英寸,但是可以通過定義UserUnit來更改此默認值。

坐標系:方向

您必須閱讀的第二個FAQ條目是: 如何解釋PDF中矩形的坐標?

讓我只復制/粘貼圖像:

在此處輸入圖片說明

坐標系:原點

最后,您必須閱讀: PDF頁面的原點(x,y)在哪里?

閱讀上一個問題后,您可能會認為左下角與坐標(0, 0) ,但這並不總是正確的。

為什么您的問題無法回答

您聲稱您將PDF呈現為圖像,並且可以將坐標檢索為像素坐標,例如,所有像素行的第300行中的第80個像素。 但是,如果在將PDF(矢量數據)轉換為光柵圖像時,如果沒人知道PDF呈現的分辨率,則沒人能告訴您用戶單位與像素的關系。 那只是你所知道的。

因此,請仔細閱讀上面列出的問題的答案,您將能夠進行必要的數學運算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM