2011-12-15 8 views
10

In quali dimensioni e la direzione è il rettangolo inregione PDFBox PDFTextStripperByArea coordinate

s' PDFTextStripperByArea funzione addRegion(String regionName, Rectangle2D rect).

In altre parole, dove viene rettangolo R inizio e quanto è grande (dimensioni dei valori di origine, dimensioni del rettangolo) e in quale direzione va a finire (direzione delle frecce blu nell'illustrazione), se new Rectangle(10,10,100,100) è indicato come secondo parametro?

PdfBox rectangle

risposta

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

significa che il rettangolo avrà il suo angolo superiore sinistro nella posizione (10, 10), quindi 10 unità lontana da sinistra e la parte superiore del documento PDF. Qui una "unità" è 1 pt = 1/72 di pollice.

Il primo 100 rappresenta la larghezza del rettangolo e il secondo la sua altezza. Per riassumere, l'immagine giusta è la prima.

Ho scritto questo codice per estrarre alcune aree di una pagina dato come argomenti della funzione:

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

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

Quindi, X e Y sono le coordinate assolute del angolo superiore sinistro del rettangolo e poi si specificare la sua larghezza e altezza. pagina è una variabile PDPage fornita come argomento per questa funzione.

+2

Quanto costa un'unità? – ipavlic

+1

L'unità predefinita è il punto (punto), penso. –

+2

Ma come determinare il totale 'width' /' height' di un file PDF? cioè quanto grande 'width' (' height') può essere per un file PDF? –

1

stava cercando a fare qualcosa come questo, quindi ho pensato di passare quello che ho trovato lungo.

Ecco il codice per creare il mio pdf originale usando itext.

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() 
     } 
    } 
} 

Se apri il pdf, vedrai il testo nell'angolo in alto a sinistra. Ecco il test che mostra quello che stai cercando.

@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.") 
} 

La posizione (0, 0) è l'angolo in alto a sinistra del documento. La larghezza e l'altezza si stanno abbassando e verso destra. Sono stato in grado di ridimensionare un po 'il range (35, 52, 120, 3) e comunque far passare il test.

Tutto il codice è scritto in groovy.