Java中调用Python脚本,读取PDF文件内容

本文介绍了如何在Java中使用Runtime.getRuntime().exec()方法执行Python代码,以处理PDF文档为例,同时提到使用fitz库和国内pip镜像源的安装优化。作者分享了PdfReaderDemo2.py脚本,展示了如何读取PDF内容并提供交流平台。
摘要由CSDN通过智能技术生成

 jdk版本1.8,python版本3.11

1、通过Runtime.getRuntime().exec()执行python代码,文件路径作为参数,返回python输出文件流

 Java代码:

import java.io.*;

public class JavaPython {
    //通过Runtime实现
    public static void main(String[] args) throws IOException,InterruptedException {
        BufferedReader reader=null;
        BufferedReader error=null;
        StringBuilder sbrs = null;
        StringBuilder sberror = null;
        try {
    //        python命令,或者解释器所处的绝对路径
            String exe = "python";
    //        python代码文件绝对地址
            String command = "D:\\codes\\web\\PdfReaderDemo2.py";
            //pdf文件路径,参数
            String path = "C:\\Users\\hp\\Desktop\\bionioaio.pdf";
            String[] cmdArr = new String[] {exe,command,path};
            //执行python命令,python D:\\codes\\web\\PdfReaderDemo2.py C:\\Users\\hp\\Desktop\\bionioaio.pdf
            Process process = Runtime.getRuntime().exec(cmdArr);
            //获取python中print的数据
            reader = new BufferedReader(new InputStreamReader(process.getInputStream(),"gbk"));//获取字符输入流对象
            error = new BufferedReader(new InputStreamReader(process.getErrorStream(), "utf-8"));//获取错误信息的字符输入流对象
            sbrs = new StringBuilder();
            sberror = new StringBuilder();

            String line;
            StringBuilder finalSbrs = sbrs;
            //记录信息 while 循环获取不到数据,使用forEach
            //while ((line = reader.readLine()) != null) {
            //     sbrs.append(line);
            //}
            reader.lines().forEach(e->{
                finalSbrs.append(e+"\n");
//                System.out.println(e);
            });

            //记录错误信息
            while ((line = error.readLine()) != null) {
                sberror.append(line);
            }
            // 等待进程完成
            int exitCode = process.waitFor();
            System.out.println("Exited with sbrs " + sbrs);
            System.out.println("Exited with sberror " + sberror);
            System.out.println("Exited with error code " + exitCode);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(reader!=null){
                reader.close();
            }
            if(error!=null){
                error.close();
            }
        }
    }

}

2、fitz 是 PyMuPDF 库中的一个模块,用于处理 PDF 文档,安装后可以通过 import 导入fitz 读取pdf文件,pip工具来下载和安装第三方库,有时候很慢,可以更换国内的pip镜像源。

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

pip install PyMuPDF 

pip install fitz 

确定\Python\Lib\site-packages目录下,已成功安装模块

PdfReaderDemo2.py脚本代码
# coding=utf-8
import fitz
import sys
# sys.argv获取python命令后参数,sys.argv[0] 得到的是得到的是python脚本名称
path = sys.argv[1]
#使用 fitz读取文件
pdf_document = fitz.open(path)

# 保存PDF文档的内容
text = ""
# pdf文档内容过长,java获取数据可能报错,可一次获取一页内容
for page_num in range(len(pdf_document)):
    page = pdf_document.load_page(page_num)
    text += page.get_text()
# 返回指定页面文档内容
# text = pdf_document.load_page(2).get_text()
# 关闭PDF文档
pdf_document.close()

# 打印文档内容
print(text)

本地测试可以读取pdf内容,如有问题,欢迎交流评论!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值