无需写入文件系统即可将 OCR 层添加到现有 PDF
Add OCR layer to existing PDF without the need to write to file system
我正在尝试获取扫描的 PDF 文档并在顶部添加 OCR 图层。我可以获得以下代码来实现此目的:
public void ocrFile(PDDocument pdDocument, File file) throws TesseractException, IOException {
PDFTextStripper pdfStripper = new PDFTextStripper();
String text = pdfStripper.getText(pdDocument);
Tesseract instance = new Tesseract(); // JNA Interface Mapping
File tessDataFolder = LoadLibs.extractTessResources("tessdata");
instance.setDatapath(tessDataFolder.getAbsolutePath());
List<RenderedFormat> list = new ArrayList<RenderedFormat>();
list.add(RenderedFormat.PDF);
String outputFileName = FilenameUtils.removeExtension(file.getAbsolutePath());
instance.createDocuments(file.getAbsolutePath(), outputFileName, list);
}
这会将带有 OCR 层的 PDF 输出到磁盘上的特定位置。我正在尝试更改此设置,以便应用程序不需要将任何文件写入磁盘。我不确定这是否可以完成?
理想情况下,我想用 MultipartFile 更改 ocrFile 的文件输入,并从该方法返回它,从而不需要涉及文件系统。这可以实现吗?
不,这是不可能的。 Tesseract 的 TessResultRenderer
API 输出到物理文件,因此需要 outputbase
输入参数来指定输出文件的名称。
我正在尝试获取扫描的 PDF 文档并在顶部添加 OCR 图层。我可以获得以下代码来实现此目的:
public void ocrFile(PDDocument pdDocument, File file) throws TesseractException, IOException {
PDFTextStripper pdfStripper = new PDFTextStripper();
String text = pdfStripper.getText(pdDocument);
Tesseract instance = new Tesseract(); // JNA Interface Mapping
File tessDataFolder = LoadLibs.extractTessResources("tessdata");
instance.setDatapath(tessDataFolder.getAbsolutePath());
List<RenderedFormat> list = new ArrayList<RenderedFormat>();
list.add(RenderedFormat.PDF);
String outputFileName = FilenameUtils.removeExtension(file.getAbsolutePath());
instance.createDocuments(file.getAbsolutePath(), outputFileName, list);
}
这会将带有 OCR 层的 PDF 输出到磁盘上的特定位置。我正在尝试更改此设置,以便应用程序不需要将任何文件写入磁盘。我不确定这是否可以完成?
理想情况下,我想用 MultipartFile 更改 ocrFile 的文件输入,并从该方法返回它,从而不需要涉及文件系统。这可以实现吗?
不,这是不可能的。 Tesseract 的 TessResultRenderer
API 输出到物理文件,因此需要 outputbase
输入参数来指定输出文件的名称。