鍍金池/ 問(wèn)答/Java  C++  HTML/ 瀏覽器預(yù)覽圖的坐標(biāo)如何映射到PDF文件中的坐標(biāo)

瀏覽器預(yù)覽圖的坐標(biāo)如何映射到PDF文件中的坐標(biāo)

我現(xiàn)在有一份PDF文件,通過(guò)PDFBox渲染成每頁(yè)一張的圖片

// load pdf and save image
try (PDDocument document = PDDocument.load("some file")) {
    PDFRenderer render = new PDFRenderer(document);
    BufferedImage scaledImage = render.renderImageWithDPI(pageIndex, 326);
    // save image
}

這一步保存的圖片將會(huì)在瀏覽器里面預(yù)覽,用戶可以拖放圖片到這個(gè)預(yù)覽圖中,然后我映射這個(gè)坐標(biāo)到真實(shí)的PDF中,但是總是有一定的誤差,下面是我的映射方式:

  1. 取得預(yù)覽圖在瀏覽器的width,height,取得拖放圖片的在預(yù)覽圖中左上角的x,y
  2. 后端取得PDF實(shí)際的width,height,然后計(jì)算與預(yù)覽圖的寬比例,高比例,最終得出拖放圖片在PDF中的左上角x,y
  3. 因PDF中的坐標(biāo)原點(diǎn)是文檔左下角,所以最終的x,y計(jì)算公式是:

    • x: float targetX = (previewX 1.0F / previewWidth) pdfPageWidth;
    • y: float targetY = pdfPageHeight - (previewY 1.0F / previewHeight) pdfPageHeight - dragImageHeight
  4. 根據(jù)上一步計(jì)算的x,y在這頁(yè)P(yáng)DF中畫出了這個(gè)圖,但是有誤差,而且誤差很明顯,請(qǐng)問(wèn)我該如何做呢?

參考文檔

  1. PDF坐標(biāo)系統(tǒng)
  2. PDF開(kāi)發(fā)+電子簽章
回答
編輯回答
法克魷

困擾了快一周了,問(wèn)題終于解決,算法本身沒(méi)問(wèn)題,只是第三方的系統(tǒng)會(huì)縮放目標(biāo)圖片,計(jì)算時(shí)加上這個(gè)縮放比例定位即準(zhǔn)確。

2018年1月18日 03:29
編輯回答
避風(fēng)港

在么 我想請(qǐng)教下如何實(shí)現(xiàn) 在預(yù)覽圖片的時(shí)候 放置圖片進(jìn)去并拖拽這個(gè)圖片 可以給一個(gè)聯(lián)系方式么 比較著急

2017年2月5日 21:21
編輯回答
孤毒

能問(wèn)下,樓主 如何 確定pdf 的當(dāng)前頁(yè)數(shù)的嗎?

2018年7月17日 11:54