PDFBox PDFTextStripperByArea регион координат - PullRequest
11 голосов
/ 15 декабря 2011

В каких размерах и направлении находится прямоугольник в

PDFTextStripperByArea функция addRegion(String regionName, Rectangle2D rect).

Другими словами, где начинается прямоугольник R и насколько он велик (размеры исходных значений, размеры прямоугольника) и в каком направлении он идет (направление синих стрелок на рисунке), если new Rectangle(10,10,100,100) задано в качестве второго параметра?

PdfBox rectangle

Ответы [ 3 ]

12 голосов
/ 16 июля 2012
new Rectangle(10,10,100,100)

означает, что прямоугольник будет иметь свой левый верхний угол в позиции (10, 10), поэтому на 10 единиц дальше от левого и верхнего края документа PDF. Здесь «единица измерения» составляет 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 - абсолютные координаты верхнего левого угла прямоугольника, а затем вы указываете его ширину и высоту. page - это переменная PDPage, заданная в качестве аргумента этой функции.

1 голос
/ 02 апреля 2012

Занимался чем-то подобным, поэтому я решил передать то, что нашел.

Вот код для создания моего оригинального PDF с использованием 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()
        }
    }
}

Если открыть файл 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.

0 голосов
/ 10 августа 2018
Code in java using PDFBox.

 public String fetchTextByRegion(String path, String filename, int pageNumber) throws IOException {
        File file = new File(path + filename);
        PDDocument document = PDDocument.load(file);
        //Rectangle2D region = new Rectangle2D.Double(x,y,width,height);
        Rectangle2D region = new Rectangle2D.Double(0, 100, 550, 700);
        String regionName = "region";
        PDFTextStripperByArea stripper;
        PDPage page = document.getPage(pageNumber + 1);
        stripper = new PDFTextStripperByArea();
        stripper.addRegion(regionName, region);
        stripper.extractRegions(page);
        String text = stripper.getTextForRegion(regionName);
        return text;
    }
...