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.
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 "";
}
}
}
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 "";
}
}
}
――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