2011-12-15 84 views
10

在什么尺寸和方向是矩形在PDFBox的PDFTextStripperByArea区域坐标

PDFTextStripperByArea的功能addRegion(String regionName, Rectangle2D rect)

换句话说,哪里矩形[R开始,是有多大它(原点值的尺寸,矩形的尺寸)在什么方向?它走的蓝色箭头的(方向在插图中),如果new Rectangle(10,10,100,100)作为第二个参数给出?

PdfBox rectangle

回答

10
new Rectangle(10,10,100,100) 

表示矩形的左上角位于(10,10)位置,因此距离PDF文档的左侧和顶部10个单位。这里“单位”是1磅= 1/72英寸。

第一个100代表矩形的宽度,第二个代表矩形的宽度。总之,正确的图片是第一个。

我写了这个代码以提取参数中所给的功能页面的某些领域:

Rectangle2D region = new Rectangle2D.Double(x, y, width, height); 
String regionName = "region"; 
PDFTextStripperByArea stripper; 

stripper = new PDFTextStripperByArea(); 
stripper.addRegion(regionName, region); 
stripper.extractRegions(page); 

因此,x和y是矩形的左上角的绝对坐标,然后你指定其宽度和高度。页面是一个PDPage变量,作为该函数的参数。

+2

单位多少钱? – ipavlic 2012-07-16 09:23:25

1

正在研究做这样的事情,所以我想我会通过我一起发现的。

下面是使用itext创建我的原始pdf的代码。

import com.lowagie.text.Document 
import com.lowagie.text.Paragraph 
import com.lowagie.text.pdf.PdfWriter 

class SimplePdfCreator { 
    void createFrom(String path) { 
     Document d = new Document() 
     try { 
      PdfWriter writer = PdfWriter.getInstance(d, new FileOutputStream(path)) 
      d.open() 
      d.add(new Paragraph("This is a test.")) 
      d.close() 
     } catch (Exception e) { 
      e.printStackTrace() 
     } 
    } 
} 

如果你打开pdf,你会看到左上角的文字。这是测试,显示你在找什么。

@Test 
void createFrom_using_pdf_box_to_extract_text_targeted_extraction() { 
    new SimplePdfCreator().createFrom("myFileLocation") 
    def doc = PDDocument.load("myFileLocation") 
    Rectangle2D.Double d = new Rectangle2D.Double(0, 0, 120, 100) 
    def stripper = new PDFTextStripperByArea() 
    def pages = doc.getDocumentCatalog().allPages 
    stripper.addRegion("myRegion", d) 
    stripper.extractRegions(pages[0]) 
    assert stripper.getTextForRegion("myRegion").contains("This is a test.") 
} 

位置(0,0)是文档的左上角。宽度和高度向下并向右。我能够将范围缩小到(35,52,120,3),并且仍然通过测试。

所有代码都是用groovy编写的。