Java - извлекать текст из pdf из выделенной области в txt

Идея следующая,

Пользователь выбирает файл PDF, а затем этот файл преобразуется в изображение, и такое изображение отображается в приложении.

На изображении пользователь может выбрать позиции, которые хочет прочитать из файла pdf, и по окончании выбора позиции в фоновой программе считывает исходный файл pdf и текст, сохраненный в файле txt.

Важно, чтобы полученное изображение из pdf файла было того же размера, что и сам pdf файл.

Следующий код конвертировать PDF в изображение. Я использую pdfrenderer-0.9.1.jar

import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import javax.imageio.ImageIO;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;


public class Pdf2Image {

public static void main(String[] args) {

    File file = new File("E:\\invoice-template-1.pdf");
    RandomAccessFile raf;
    try {
        raf = new RandomAccessFile(file, "r");

        FileChannel channel = raf.getChannel();
        ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
        PDFFile pdffile = new PDFFile(buf);
        // draw the first page to an image
        int num=pdffile.getNumPages();
        for(int i=0;i<num;i++)
        {
            PDFPage page = pdffile.getPage(i);

            //get the width and height for the doc at the default zoom              
            int width=(int)page.getBBox().getWidth();
            int height=(int)page.getBBox().getHeight();             

            Rectangle rect = new Rectangle(0,0,width,height);
            int rotation=page.getRotation();
            Rectangle rect1=rect;
            if(rotation==90 || rotation==270)
                rect1=new Rectangle(0,0,rect.height,rect.width);

            //generate the image
            BufferedImage img = (BufferedImage)page.getImage(
                        rect.width, rect.height, //width & height
                        rect1, // clip rect
                        null, // null for the ImageObserver
                        true, // fill background with white
                        true  // block until drawing is done
                );

            ImageIO.write(img, "png", new File("E:/invoice-template-"+i+".png"));
        }
    } 
    catch (FileNotFoundException e1) {
        System.err.println(e1.getLocalizedMessage());
    } catch (IOException e) {
        System.err.println(e.getLocalizedMessage());
    }
}
}

Затем изображение отображается пользователю в приложении JavaFX в компонентах ImageView. Можете ли вы помочь мне получить точное положение мыши, когда мышь выбирает часть изображения, с которой вы хотите прочитать текст в файле PDF?

С помощью этого кода я читаю pdf-файл и получаю текст из заданной позиции, только я должен вручную вводить позицию:( . Я использую pdfbox-1.3.1.jar. Я хотел бы расположить клиент по своему выбору, чтобы сохранить изображение в списке и прочитайте текст из PDF-файла со всеми этими позициями.

    File file = new File("E:/invoice-template-1.pdf");
    PDDocument document = PDDocument.load(file);
    PDFTextStripperByArea stripper = new PDFTextStripperByArea();
    stripper.setSortByPosition(true);
    Rectangle rect1 = new Rectangle(38, 275, 15, 100);
    Rectangle rect2 = new Rectangle(54, 275, 40, 100); 
    stripper.addRegion("row1column1", rect1);
    stripper.addRegion("row1column2", rect2);
    List allPages = document.getDocumentCatalog().getAllPages();
    List<PDPage> pages = document.getDocumentCatalog().getAllPages();
    int j = 0;

    for (PDPage page : pages) {
        stripper.extractRegions(page);
        stripper.setSortByPosition(true);
        List<String> regions = stripper.getRegions();
        for (String region : regions) {
            String text = stripper.getTextForRegion(region);
            System.out.println("Region: " + region + " on Page " + j);
            System.out.println("\tText: \n" + text);
        }

Например, в следующем счете-фактуре я хочу выбрать 4 позиции для экспорта текста, а когда вы выбираете картинку, размеры сохраняются в списке, затем переходите по списку и из этих позиций экспортируйте текст из файла PDF.

0 ответов

Другие вопросы по тегам