美文网首页
PHP与Python程序交互

PHP与Python程序交互

作者: artCoding | 来源:发表于2020-07-17 19:34 被阅读0次

    php程序中与python脚本交互,使用python封装工具方法供php程序调用,数据分类、AI类可用python封装脚本,为php程序赋能

    以pdf转png场景为例,python脚本实现pdf转png功能并返回json格式数据

    1.php中调用示例

    /**
    * 说明:
    * exec有3个参数
    * 第一个是要执行的命令
    * 第二个是参数是一个数组,数组的值是由第一个命令执行后生成的
    * 第三个参数执行的状态,1表示成功,其他都表示失败。
    * 查看具体信息需要使用 2>&1, 命令就会输出shell执行时的错误到$output变量,必须加上。
    * @param $pdfFile
    * @return array
    */
    static function pdfToPngByPy($pdfFile)
    {
        //pdf文件为绝对路径
        $pdfFile = '/Applications/MAMP/htdocs/xxx/'.$pdfFile;
        //python3程序和要执行的python脚本文件均为绝对路径。
        //$pdffile为传入python脚本的参数
        //该命令相当于 python3 [pdftopng.py](http://pdftopng.py/) pdffile
        //2>&1必须要有,不然拿不到返回
        $pythonEx = "/Library/Frameworks/Python.framework/Versions/3.8/bin/python3 /Users/leedev/Documents/python/handlerimg/pdftopng.py {$pdfFile} 2>&1";
        exec($pythonEx, $out, $res);
        $ret = json_decode($out[0], true);
        return $ret;
    }
    

    2.python文件示例

    需先安装PyMuPDF扩展
    python3 -m pip install PyMuPDF

    import sys
    import fitz
    import json
    import time
    import random
    
    rotate = int(0)
    # 生成图片的尺寸:数值越大,图片尺寸越大
    zoom_x = 1.8
    zoom_y = 1.8
    trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
    
    # 获取php程序传递的参数
    open_file_path = sys.argv[1]
    save_file_path = '/Applications/MAMP/htdocs/invoiceFile/'
    
    try:
        pdf = fitz.open(open_file_path)
    
        # 多页pdf转换成多个图片
        # for i in range(pdf.pageCount):
        #   pm = pdf[i].getPixmap(matrix=trans, alpha=False)
        #   pm.writePNG(save_file_path + '/%s.png' % i)
    
        # 单页pdf转png
        pm = pdf[0].getPixmap(matrix=trans, alpha=False)
        file_name = str(int(time.time()) + random.randint(999, 9999)) + '.png'
        pm.writePNG(save_file_path + file_name)
    except IOError:
        returnArr = {"code": 999, 'message': '文件操作异常'}
        print(json.dumps(returnArr))
    except TypeError:
        returnArr = {"code": 500, 'message': '内部错误'}
        print(json.dumps(returnArr))
    except RuntimeError:
        returnArr = {"code": 500, 'message': '内部错误'}
        print(json.dumps(returnArr))
    else:
        returnArr = {"code": 200, "fileName": file_name}
        print(json.dumps(returnArr))
    

    相关文章

      网友评论

          本文标题:PHP与Python程序交互

          本文链接:https://www.haomeiwen.com/subject/fnjnhktx.html