2017-02-27 28 views
0

我嘗試使用modesty/pdf2json和輸出是非常有用的,但我嘗試計算圖書館使用的度量單位。他們稱之爲「頁面單位」,根據pdf規格,這不等於1/72(點),因爲整個頁面有高度爲51的頁面單位pdf2json頁面單位:這是什麼?

任何人都知道這是什麼頁面單位?我在哪裏可以找到關於這種測量的信息?

非常感謝提前。

回答

3

無論pdf2json產生不相關的PDF.js(PDF.js使用標準的PDF 空間單元作爲鹼)

因此,基於https://github.com/modesty/pdf2json/blob/3fe724db05659ad12c2c0f1b019530c906ad23de/lib/pdfunit.js

  • pdf2json從PDF獲取數據在96DPI單位
  • 尺度每個單元的.js 1/4

所以頁面單位等於(96PX /英寸* 1英寸/ 4)= 24px

在您的例子高度等於51 * 24像素= 1,224px,或51 * 0.25英寸= 12.72inch

+0

你知道爲什麼在334行的pdffont.js中,它從x和-0.75中減去-0.25? – SPlatten

0

TL; DR 理解,重要的是,x,y和元件的寬度/高度是相與頁面寬度/高度相關的單位可以通過除以現有單位並乘以所需單位轉換爲任何目標比率。

這裏是無聊的細節:

PDF的沒有一個標準的「大小」 - 你可以打印任何你喜歡的PDF其中可能包括橫向或縱向,不同的頁面大小(標準,A0〜 A5,Legal,Tabloid,Custom)等。PDF的大小以英寸爲單位,因此像素(包括pdf2json)的轉換不是像@ async5的答案中所示的固定的「24px」。

以編程方式獲取所需結果的關鍵是利用解析的PDF信息(頁面寬度和頁面高度)以及如何渲染它(像素數量因顯示分辨率密度而異,但「英寸」爲總是一個「英寸」),以及如何轉換爲您的目標分辨率。

由於同一物理設備通常支持多種分辨率(更改邏輯DPI) - 原始像素密度和用戶設置的合成密度之間可能存在差異,因此是從PDF單位轉換爲本地顯示將成爲由PDF文件與其物理渲染版本的目標dpi之間的差異組成的縮放因子。這個想法適用於PDF解析庫,它可能使用與PDF文件本身的原生「72dpi」不同的DPI。

儘管96dpi是Microsoft標準尺寸(72dpi是Apple的標準尺寸),但選擇哪一個都不會給您一個正確的像素偏移b/c pdf2json或pdf.js不知道關於最終用戶顯示器的任何信息。對於pdf2json座標(x/y),它們只是平面上某個位置(由寬度/高度定義)之間的相對測量值。如此標準化爲8。 - 或者坦白地說,你選擇使用任何其它PDF解析庫

pdfRect.x = pdfRect.x * ((8.5 * 72)/parsedPdf.formImage.Width); pdfRect.y = pdfRect.y * ((11 * 72)/parsedPdf.formImage.Pages[0].Height);

這種公式將工作無論pdf2json內部的DPI是什麼:以72dpi的5「X11」的位置將如下進行。這是因爲它可以通過劃分取消這些單位,並使用任何你需要的單位進行乘法。即使今天pdf2json內部使用96dpi,縮小比例爲1/4,然後更改爲72dpi,縮小1/2,上述數學轉換爲像素偏移量和dpi將獨立於代碼更改。

希望這是有幫助的。當我處理這個問題時,似乎互聯網錯過了這個的拼寫版本。許多人解決具體的具體來源/目的地解決問題(包括特定於圖書館)或抽象地談論它,但不能很清楚地解釋關係。