2015-01-13 87 views
-2

我試圖從PDF的特定部分刪除文本。如果我知道該區域的X,Y座標,我可以刪除文本。但是我無法從PDF中獲得所選區域的座標。請幫助我。使用itext從pdf獲取所選區域的座標

+0

問題並不清楚,因爲它說「我無法獲得所選區域的座標」,但它沒有告訴我們有關選擇標準的任何信息。選擇是手動完成的嗎?選擇是基於註釋的位置嗎?選擇是基於某些特定內容的發生嗎?這個問題需要澄清。它可能是一個重複的http://stackoverflow.com/questions/13632541/get-the-exact-stringposition-in-pdf –

回答

0

這個問題是你的前一個問題的後續:Remove text occurrences contained in a specified area with iText

在這個問題上,你問從特定區域刪除內容。現在您正在詢問如何確定這個特定區域,但您的問題並不完整:您沒有告訴我們選擇該區域的任何標準。

看來你正在嘗試做一些被稱爲編校的事情。這在StackOverflow問題中有解釋:How to create and apply redactions?

在對這個問題的回答中,我解釋瞭如何以編程方式創建編校註釋。然而,新版本通常是手工完成,使用Adobe Acrobat:

Redaction in Acrobat

的箭頭顯示您需要的功能:工具>保護>標記爲密文

如果您只需要座標,並沒有新版本註解,你可以引入另一個註解,允許你手動標記一個矩形,然後使用iText來提取座標。例如:如果矩形是一個表單域,那麼獲取座標真的很容易。如果您要刪除的內容是表單字段的值,那麼刪除該內容甚至更容易:您只需刪除該字段。

如果沒有辦法手動檢索這些座標,那麼您可能面臨的是不可能的事情:例如:如果您不知道要刪除的區域的內容,你要教一個程序它需要刪除什麼?

如果您確實知道要查找哪些內容,則必須解析該內容。這個問題已經被問和回答之前:Get the exact Stringposition in PDF

更新:

在評論,你解釋你的PDF頁面轉換爲圖像,你渲染圖像在Java Swing應用程序,以便用戶可以選擇一個矩形。這個矩形存儲爲java.awt.Image

由於Java中的座標系與PDF中的座標系不同,導致以下潛在問題。

  1. Y軸是不同的:在PDF,網頁的大小,我們稱之爲頁邊界矩形描述。最重要的頁面邊界是MediaBox(強制)和CropBox(可選)。 MediaBox包含定義頁面的矩形的左下角和右上角的座標。在座標系中,Y軸向上指向。左下角的Y座標低於右上角的Y座標。在Java中,反過來:對象頂部的Y座標爲0,Y軸向下指向:Y值越高,此Y值處的對象越低。
  2. 可能存在偏移:在大多數情況下,MediaBox的左下角的座標爲X = 0,Y = 0。但情況並非總是如此。可能有必要考慮抵消。
  3. 分辨率可以不同:默認用戶單位對應一個點。例如:一個A4頁面通過842個用戶單位測量595個。每英寸有72點。當你創建一個圖片時,你不一定要用點來衡量。也許你測量像素。也許你創建一個每英寸300像素(300 dpi)的圖像。

所有這些原因都可能導致您從Swing應用獲得的矩形與您在PDF中需要使用的座標不同。你需要把所有這些都考慮進去,否則,你會繼續面對你「這不行」的問題。這不是一個iText問題,這是一個數學問題。

+0

我紅色的pdf到特定區域的jframe和繪製的矩形,無論我想要使用鼠標事件刪除並得到了矩形座標。基於這個座標我刪除了實際的pdf文本,但其內容沒有刪除,請給我建議我誤解了。 – amar

+0

如何將PDF讀入JFrame(哪個工具?)以及座標的性質(使用哪個座標系)?如果您使用這些座標在PDF上繪製矩形,您會看到那個矩形?否則,您的座標是錯誤的,因爲它們不是PDF座標系中的座標。你最大的錯誤是你提出的問題不具體。 –

+0

我將pdf頁面轉換爲圖像,並將該圖像添加到jframe中,並使用paint方法從該jframe中選擇區域,然後獲取java.awt.Rectangle。 – amar