Какой самый простой способ извлечь данные из PDF? - PullRequest
9 голосов
/ 26 июля 2011

Мне нужно извлечь данные из некоторых документов PDF (используя Java).Мне нужно знать, что было бы самым простым способом сделать это.

Я попробовал iText.Это довольно сложно для моих нужд.Кроме того, я думаю, что это не доступно бесплатно для коммерческих проектов.Так что это не вариант.Я также попробовал PDFBox и столкнулся с различными NoClassDefFoundError ошибками.

Я гуглил и наткнулся на несколько других опций, таких как PDF Clown, jPod, но у меня нет времени экспериментировать со всеми этими библиотеками.Я полагаюсь на опыт сообщества в чтении PDF через Java.

Обратите внимание, что мне не нужно создавать PDF-документы или манипулировать ими.Мне просто нужно извлечь текстовые данные из документов PDF с умеренной сложностью макета.

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

Ответы [ 5 ]

4 голосов
/ 26 июля 2011

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

Преимущества Tika (помимо бесплатности) заключаются в том, что он является подпроектом Apache Lucene, который является очень надежной поисковой системой с открытым исходным кодом. Tika включает в себя встроенный анализатор PDF, который использует обработчик содержимого SAX для передачи данных PDF в ваше приложение. Он также может извлекать данные из зашифрованных PDF-файлов и позволяет создавать или создавать подклассы существующего анализатора для настройки поведения.

Код прост. Чтобы извлечь данные из PDF, все, что вам нужно сделать, это создать класс Parser, который реализует интерфейс Parser и определить метод parse ():

public void parse(
   InputStream stream, ContentHandler handler,
   Metadata metadata, ParseContext context)
   throws IOException, SAXException, TikaException {

   metadata.set(Metadata.CONTENT_TYPE, HELLO_MIME_TYPE);
   metadata.set("Hello", "World");

   XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata);
   xhtml.startDocument();
   xhtml.endDocument();
}

Затем, чтобы запустить парсер, вы можете сделать что-то вроде этого:

InputStream input = new FileInputStream(new File(resourceLocation));
ContentHandler textHandler = new BodyContentHandler();
Metadata metadata = new Metadata();
PDFParser parser = new PDFParser();
parser.parse(input, textHandler, metadata);
input.close();
out.println("Title: " + metadata.get("title"));
out.println("Author: " + metadata.get("Author"));
out.println("content: " + textHandler.toString());
2 голосов
/ 26 июля 2011

Я использовал PDFBox для извлечения текста для индексации Lucene без особых проблем. Запись ошибок / предупреждений довольно многословна, если я правильно помню - что послужило причиной тех ошибок, которые вы получили?

2 голосов
/ 26 июля 2011

Я использую JPedal , и я действительно доволен результатами.Это не бесплатно, но это высокое качество, и вывод для генерации изображений из PDF или извлечения текста действительно хорош.

И как платная библиотека, поддержка всегда есть, чтобы ответить.

0 голосов
/ 11 февраля 2019

Импортируйте классы и добавьте файлы Jar 1.- pdfbox-app- 2.0.

   import org.openqa.selenium.WebDriver;
   import org.openqa.selenium.WebElement;
   import org.openqa.selenium.support.FindBy;
   import org.testng.Assert;
   import org.testng.annotations.Test;

   import java.io.File;
   import java.io.IOException;
   import java.text.ParseException;
   import java.util.List;

   import org.apache.log4j.Logger;
   import org.apache.log4j.PropertyConfigurator;
   import org.apache.pdfbox.pdmodel.PDDocument;
   import org.apache.pdfbox.text.PDFTextStripper;
   import org.openqa.selenium.By;
   import org.openqa.selenium.chrome.ChromeDriver;


   import com.coencorp.selenium.framework.BasePage;
   import com.coencorp.selenium.framework.ExcelReadWrite;
   import com.relevantcodes.extentreports.LogStatus;

Добавьте этот код в класс.

   public void showList() throws InterruptedException, IOException {

   showInspectionsLink.click();
   waitForElement(hideInspectionsLink);
   printButton.click();
   Thread.sleep(10000);
   String downloadPath = "C:\\Users\\Updoer\\Downloads";
   File getLatestFile = getLatestFilefromDir(downloadPath);
   String fileName = getLatestFile.getName();
   Assert.assertTrue(fileName.equals("Inspections.pdf"), "Downloaded file name is not 
   matching with expected file name");
   Thread.sleep(10000);
   //testVerifyPDFInURL();
   PDDocument pd;
   pd= PDDocument.load(new File("C:\\Users\\Updoer\\Downloads\\Inspections.pdf"));
   System.out.println("Total Pages:"+ pd.getNumberOfPages());
   PDFTextStripper pdf=new PDFTextStripper();
   System.out.println(pdf.getText(pd));

Добавьте этот метод в тот же класс.

   public void testVerifyPDFInURL() {
   WebDriver driver = new ChromeDriver();
   driver.get("C:\\Users\\Updoer\\Downloads\\Inspections.pdf");
   driver.findElement(By.linkText("Adeeb Khan")).click();
   String getURL = driver.getCurrentUrl();
   Assert.assertTrue(getURL.contains(".pdf"));
   }

   private File getLatestFilefromDir(String dirPath){
   File dir = new File(dirPath);
   File[] files = dir.listFiles();
   if (files == null || files.length == 0) {
        return null;
   }

   File lastModifiedFile = files[0];
   for (int i = 1; i < files.length; i++) {
   if (lastModifiedFile.lastModified() < files[i].lastModified()) {
   lastModifiedFile = files[i];
   }
   }
   return lastModifiedFile;
   }
0 голосов
/ 16 октября 2014

Я понимаю, что этот пост довольно старый, но я бы порекомендовал использовать itext отсюда: http://sourceforge.net/projects/itext/ Если вы используете maven, вы можете вытащить банки из центрального центра: http://mvnrepository.com/artifact/com.itextpdf/itextpdf

Iне могу понять, как это может быть сложно:

    PdfReader pdf = new PdfReader("path to your pdf file");
    PdfTextExtractor parser = new PdfTextExtractor();
    String output = parser.getTextFromPage(pdf, pageNumber);
    assert output.contains("whatever you want to validate on that page");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...