Ich habe versucht, mit OCR eine PDF-Datei mit Java zu verarbeiten

Am Anfang

Ich habe ein Java-Programm geschrieben, das die OCR-Verarbeitung für die im PDF enthaltene Bilddatei ausführt Zuerst habe ich versucht, es mit Python zu implementieren, aber ich habe die Abhängigkeit der zu verwendenden Bibliothek nicht verstanden, deshalb habe ich beschlossen, es mit dem bekannten Java zu implementieren.

Bibliothek verwendet

Einfallsreichtum usw.

Quelle

Klasse, um Bilder aus PDF zu erhalten

PDFmaker.java


package pdf;

import java.io.File;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

public class PDFMaker {
	public static void main(String args[])throws Exception{
		//PDF-Datei zum Lesen
		PDDocument document = PDDocument.load(new File("C:/python/img/pdf/2017h29a_sc_pm2_qs.pdf"));
		//PDF-Seiten verarbeiten
		Stream<PDPage>stream = StreamSupport.stream(Spliterators.spliteratorUnknownSize(
				document.getDocumentCatalog().getPages().iterator(),
						Spliterator.ORDERED),false);
		
		System.out.println("start");
		Files.write(Paths.get("parse.txt"), 
				stream.map(s->exePDFpage(s)).collect(Collectors.toList()), 
				Charset.forName("MS932"),
				StandardOpenOption.CREATE);
		System.out.println("end");
	}
	
	//PDF-Seite verarbeiten
	public static String exePDFpage(PDPage p){
		Stream<COSName>stream = StreamSupport.stream(Spliterators.spliteratorUnknownSize(
				p.getResources().getXObjectNames().iterator(),Spliterator.ORDERED),false);
		return stream.map(s->exeImage(s,p.getResources()))
		.reduce((s,v)->s+v).get();
	}
	
	//Konvertieren Sie die PDF-Seite in JPG
	public static String exeImage(COSName n,PDResources resources){
		try{
			PDXObject xobject = resources.getXObject(n);
			if(xobject instanceof PDImageXObject){
				PDImageXObject image2 = (PDImageXObject) resources.getXObject(n);
				return PDFtoImg.extractFromPDF(image2.getImage());
			}
			return "";
		}catch(Exception e){
			e.printStackTrace();
			return "";
		}	
	}
}

Verarbeitung zum Lesen der Bilddatei per OCR

PDFtoImg.java


package pdf;

import java.awt.image.BufferedImage;

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;

public class PDFtoImg {
	private static final String  DICTIONARY_PATH ="C:/Users/takayoshi/workspace/PDF/tessdata";
    public static String extractFromPDF(BufferedImage img) {
		ITesseract instance = new Tesseract();
		try {
		    instance.setLanguage("jpn");
		    instance.setDatapath(DICTIONARY_PATH);
		    String result = instance.doOCR(img);
		    return result;
		} catch (TesseractException ex) {
		    ex.printStackTrace();
		    return "";
		}
    }
}

Impressionen

――Das Problem der Prüfung zur Unterstützung der Informationsverarbeitungssicherheit (SC) der Prüfung des Informationsverarbeitungsingenieurs dauert etwa 10 bis 20 Minuten.

Herbst 2017
{D.`
Informationsverarbeitende Frau alle sichern Unterstützerprüfung
Nein
Nachmittag=Problem
Testzeit-4:30 ~-6:30 (2 Stunden)
Vorsichtsmaßnahmen
- ・ Beginn und Ende des Tests,Die Uhr des Vorgesetzten ist der Standard. Befolgen Sie die Anweisungen des Vorgesetzten 〟
2~Bis ein Signal zum Starten des Tests ertönt,Öffnen Sie das Fragenheft nicht und schauen Sie hinein.
3~Eingabe der Prüfungsnummer usw. auf dem Antwortbogen,Bitte starten Sie nach dem Signal, um den Test zu starten.
4_Das Problem ist,Bitte antworten Sie gemäß der Tabelle von Fuki.

In Anbetracht der Tatsache, dass OCR kostenlos ist, denke ich, dass es eine ziemlich gute japanische Zeile ist

Recommended Posts

Ich habe versucht, mit OCR eine PDF-Datei mit Java zu verarbeiten
Ich habe versucht, eine PDF-Datei mit Java part2 zu verarbeiten
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe ein PDF mit Java erstellt.
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, ein wenig mit BottomNavigationView zu spielen ①
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
[iOS] Ich habe versucht, mit Swift eine insta-ähnliche Verarbeitungsanwendung zu erstellen
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Java Ich habe versucht, einen einfachen Block zu brechen
Ich habe versucht, eine Java-Methode von ABCL zu verwenden
Ich habe versucht, Java in einem Mac-Terminal auszuführen
[Java] Ich habe versucht, über den Verbindungspool eine Verbindung mit Servlet (Tomcat) & MySQL & Java herzustellen
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
PDF mit einem eigenständigen Programm (Java / Perl / VBA) exportieren
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Ich möchte eine bestimmte Datei mit WatchService überwachen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich habe versucht, Sterling Sort mit Java Collector zu implementieren
Ich habe versucht, ein Aktienchart mit Java (Jsoup) zu kratzen.
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
[Azure] Ich habe versucht, eine kostenlose Java-App zu erstellen ~ Mit FTP verbinden ~ [Anfänger]
Ich habe DI mit Ruby versucht
Paging PDF mit Java + PDFBox.jar
[Java] Erstellen Sie eine temporäre Datei
Ich habe versucht, Java REPL zu verwenden
Ich habe UPSERT mit PostgreSQL ausprobiert.
Ich habe BIND mit Docker ausprobiert
Ich habe versucht, Metaprogrammierung mit Java
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit spiritueller Technik zu erhöhen
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
Ich habe einen RESAS-API-Client in Java erstellt
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Ich habe versucht, die CameraX-Bibliothek mit Android Java Fragment zu verwenden
Eine Geschichte, die ich mit Java nur schwer herausfordern konnte
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 3/3 (Spring MVC-Steuerung) zu drucken.
Erstellen eines Java-Projekts mit Gradle
Ich habe Tribuo von Oracle ausprobiert. Tribuo - Eine Java-Vorhersagebibliothek (v4.0)
Ich habe versucht, eine Kreditkartenhandelsanwendung mit Corda 1 auszuführen
Ich kann in IntelliJ keine Java-Klasse mit einem bestimmten Namen erstellen
Ich habe eine shopify App @java erstellt
Ich habe versucht, JOOQ mit Gradle zu verwenden
Ich habe eine morphologische Analyse mit MeCab versucht
Ich habe mit Swing eine GUI erstellt
Laden Sie Dateien mit Java HttpURLConnection hoch
Ich habe ein wenig digdags docker.run_options ausprobiert
Eine Person, die C ++ schreibt, hat versucht, Java zu schreiben
Führen Sie eine Batchdatei von Java aus
Ich habe das Java-Framework "Quarkus" ausprobiert.
PDF und TIFF mit Java 8 ausgeben
Ich habe versucht, die Java8 Stream API zu verwenden