最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP實(shí)現(xiàn)識別復(fù)雜pdf文檔的示例代碼

 更新時間:2024年01月28日 10:44:28   作者:青天紫魂  
這篇文章主要為大家詳細(xì)介紹了如何使用PHP實(shí)現(xiàn)識別復(fù)雜pdf文檔的功能,文中的示例代碼講解詳細(xì),感興趣的徐海波可以跟隨小編一起學(xué)習(xí)一下

PHP識別復(fù)雜pdf文檔

使用阿里云的pdf文檔識別

阿里云視覺智能平臺開通文字識別-PDF識別

/**
     * 使用AK&SK初始化賬號Client
     * @param string $accessKeyId
     * @param string $accessKeySecret
     * @return Ocrapi Client
     */
    public function createClient($accessKeyId, $accessKeySecret){
        $config = new Config([
            // 必填,您的 AccessKey ID
            "accessKeyId" => 'AccessKey ID',
            // 必填,您的 AccessKey Secret
            "accessKeySecret" => 'AccessKey Secret'
        ]);
        // Endpoint 請參考 https://api.aliyun.com/product/ocr
        $config->endpoint = "ocr.cn-shanghai.aliyuncs.com";
        $model = new Ocr($config);
        return $model;
    }
    /**
     * @param string[] $args
     * @return void
     * 阿里云一次智能識別5頁pdf,所以需要對原文件進(jìn)行拆分,分別取請求
     */
    public function getContent($param){
        set_time_limit(0);
        $inputPdf = $param['url'];
        // 計(jì)算需要拆分成多少個PDF文件
        $totalPages = intval(shell_exec("pdftk $inputPdf dump_data | grep NumberOfPages | awk '{print $2}'"));
        $numFiles = intval(ceil($totalPages / 5));
        $domain = request()->domain();
        $param['is_delete'] = $param['is_delete'] ?? 0;
        // 請確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代碼泄露可能會導(dǎo)致 AccessKey 泄露,并威脅賬號下所有資源的安全性。以下代碼示例使用環(huán)境變量獲取 AccessKey 的方式進(jìn)行調(diào)用,僅供參考,建議使用更安全的 STS 方式,更多鑒權(quán)訪問方式請參見:https://help.aliyun.com/document_detail/311677.html
        $client = self::createClient(getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'));
        $runtime = new RuntimeOptions([]);
        try {
            // 使用循環(huán)拆分PDF并保存為單獨(dú)的文件
            $str = '';
            for ($i=0; $i<$numFiles; $i++) {
                $startPage = ($i * 5) + 1;
                $endPage = min(($startPage + 4), intval($totalPages));
                //執(zhí)行拆分
                exec("pdftk A=$inputPdf cat A$startPage-$endPage output {$param['path']}_{$i}.pdf",$output, $returnVar);
                $del_url = $param['path'].'_'.$i.'.pdf';
                //執(zhí)行pdf識別
                $recognizePdfRequest = new RecognizePdfRequest([
                    "fileURL" => $domain.'/'.$del_url
                ]);
                // 復(fù)制代碼運(yùn)行請自行打印 API 的返回值
                $result = $client->recognizePdfWithOptions($recognizePdfRequest, $runtime);
                $content = $result->body->data->wordsInfo;
                //拼接識別內(nèi)容
                foreach ($content as &$vv){
                    $word = get_object_vars($vv);
                    if(substr($word['word'],0,1) == '>' || substr($word['word'],0,1) == '<'){
                        $word['word'] = substr($word['word'],1);
                    }
                    $str .= $word['word']."\n ";
                }
            }
            $data['code'] = 200;
            $data['content'] = $str;
        }
        catch (Exception $error) {
            if (!($error instanceof TeaError)) {
                $error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
            }
            $data['code'] = 400;
            $data['content'] = $error->message;
            //unset($del_url);
            // 錯誤 message
//            var_dump($error->message);
//            // 診斷地址
//            var_dump($error->data["Recommend"]);
//            Utils::assertAsString($error->message);
        }
        //識別成功刪除原文件
        if($param['is_delete']){
            unlink($param['url']);
        }
        //刪除生成的文件
        for ($i=0; $i<$numFiles; $i++) {
            $del_url = $param['path'].'_'.$i.'.pdf';
            if (file_exists($del_url)) {
                unlink($del_url);
            }
        }
        return $data;
    }

方法補(bǔ)充

除了上文的方法,小編還為大家整理了PHP識別普通PDF文件的相關(guān)方法,希望對大家有所幫助

1. 安裝依賴庫

在使用PHP處理PDF文件之前,我們需要先安裝一些依賴庫。對于本教程,我們將使用兩個主要的庫:smalot/pdfparser和setasign/Fpdi。

首先,通過Composer安裝這兩個庫:

composer require setasign/fpdi
composer require smalot/pdfparser

2. 讀取PDF文件

接下來,我們將展示如何使用smalot/pdfparser庫來讀取PDF文件的內(nèi)容。

<?php
require 'vendor/autoload.php';

use Smalot\PdfParser\Parser;

$parser = new Parser();
$pdf = $parser->parseFile('path_to_your_pdf_file.pdf');

foreach ($pdf->getPages() as $page) {
    echo $page['text']."\n";
}
?>

在上述代碼中,我們首先創(chuàng)建了一個Parser對象,然后使用parseFile方法讀取了PDF文件。最后,我們遍歷了PDF文件的每一頁,并打印出了每一頁的文本內(nèi)容。

3. 編輯PDF文件

除了讀取PDF文件的內(nèi)容,我們還可以使用setasign/Fpdi庫來編輯PDF文件。以下是一個簡單的示例,展示了如何添加一個新的頁面到PDF文件中:

<?php
require 'vendor/autoload.php';

use Setasign\Fpdi\Fpdi;

$fpdi = new Fpdi();
$fpdi->AddPage();
$fpdi->SetFont('Arial', '', 12);
$fpdi->Cell(40, 10, 'Hello World!', 1, 0, 'C');
$fpdi->Output('path_to_output_pdf_file.pdf', 'I');
?>

在上述代碼中,我們首先創(chuàng)建了一個Fpdi對象,然后添加了一個新的頁面。接著,我們設(shè)置了字體和字號,并添加了一些文本內(nèi)容。最后,我們使用Output方法將PDF文件輸出到了指定的路徑。

4. 轉(zhuǎn)換PDF文件

除了編輯PDF文件,我們還可以使用setasign/Fpdi庫來轉(zhuǎn)換PDF文件。以下是一個簡單的示例,展示了如何將PDF文件轉(zhuǎn)換為圖片:

<?php
require 'vendor/autoload.php';

use Setasign\Fpdi\Fpdi;

$fpdi = new Fpdi();
$fpdi->AddPage();
$fpdi->SetSourceFile('path_to_input_pdf_file.pdf');
$fpdi->SetTargetFile('path_to_output_image_file.png');
$fpdi->ExportImage();
?>

在上述代碼中,我們首先創(chuàng)建了一個Fpdi對象,然后添加了一個新的頁面。接著,我們設(shè)置了輸入和輸出的文件路徑,并使用ExportImage方法將PDF文件轉(zhuǎn)換為圖片。

到此這篇關(guān)于PHP實(shí)現(xiàn)識別復(fù)雜pdf文檔的示例代碼的文章就介紹到這了,更多相關(guān)PHP識別pdf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PHP進(jìn)階學(xué)習(xí)之反射基本概念與用法分析

    PHP進(jìn)階學(xué)習(xí)之反射基本概念與用法分析

    這篇文章主要介紹了PHP進(jìn)階學(xué)習(xí)之反射基本概念與用法,結(jié)合實(shí)例形式分析了php反射的概念、原理基本用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-06-06
  • php自定義urlencode,urldecode函數(shù)實(shí)例

    php自定義urlencode,urldecode函數(shù)實(shí)例

    這篇文章主要介紹了php自定義urlencode,urldecode函數(shù),實(shí)例分析了php字符串轉(zhuǎn)碼的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • PHP使用pear自帶的mail類庫發(fā)郵件的方法

    PHP使用pear自帶的mail類庫發(fā)郵件的方法

    這篇文章主要介紹了PHP使用pear自帶的mail類庫發(fā)郵件的方法,實(shí)例分析了pear的安裝及mail類發(fā)送郵件的實(shí)現(xiàn)技巧,非常簡單實(shí)用,需要的朋友可以參考下
    2015-07-07
  • php無限級評論嵌套實(shí)現(xiàn)代碼

    php無限級評論嵌套實(shí)現(xiàn)代碼

    本文講的是php無限級評論嵌套實(shí)例介紹, 我在設(shè)計(jì)BB的過程中,也一直在思考是否可以不通過遞歸來實(shí)現(xiàn)無限級分類的結(jié)構(gòu)展現(xiàn)和父子結(jié)構(gòu)查找,因?yàn)槿绻粚@里的算法進(jìn)行優(yōu)化后果可能是致命的
    2018-04-04
  • PHP關(guān)于foreach復(fù)制知識點(diǎn)總結(jié)

    PHP關(guān)于foreach復(fù)制知識點(diǎn)總結(jié)

    在本篇文章里小編給大家分享了關(guān)于PHP關(guān)于foreach復(fù)制知識點(diǎn)總結(jié),有興趣的朋友們學(xué)習(xí)下。
    2019-01-01
  • PHP操作MySQL的mysql_fetch_* 函數(shù)的常見用法教程

    PHP操作MySQL的mysql_fetch_* 函數(shù)的常見用法教程

    這篇文章主要介紹了PHP中操作MySQL的mysql_fetch函數(shù)的常見用法教程,文中提到了其下fetch_array和mysql_fetch_row以及mysql_fetch_object函數(shù)的使用,需要的朋友可以參考下
    2015-12-12
  • PHP的消息通信機(jī)制測試實(shí)例

    PHP的消息通信機(jī)制測試實(shí)例

    這篇文章主要介紹了PHP的消息通信機(jī)制,結(jié)合實(shí)例形式分析了php消息通信的信息發(fā)送與獲取相關(guān)操作技巧,需要的朋友可以參考下
    2016-11-11
  • php數(shù)據(jù)訪問之增刪改查操作

    php數(shù)據(jù)訪問之增刪改查操作

    這篇文章主要為大家詳細(xì)介紹了php數(shù)據(jù)訪問之增刪改查操作的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • PHP可變函數(shù)的使用詳解

    PHP可變函數(shù)的使用詳解

    本篇文章是對PHP中可變函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP實(shí)現(xiàn)PDO的mysql數(shù)據(jù)庫操作類

    PHP實(shí)現(xiàn)PDO的mysql數(shù)據(jù)庫操作類

    這篇文章主要介紹了PHP實(shí)現(xiàn)PDO的mysql數(shù)據(jù)庫操作類,其中dbconfig類負(fù)責(zé)配置數(shù)據(jù)庫訪問信息,dbtemplate類集合了對數(shù)據(jù)庫的訪問操作,非常具有實(shí)用價值,需要的朋友可以參考下
    2014-12-12

最新評論

葵青区| 佛教| 高唐县| 苏州市| 安义县| 宁乡县| 泸溪县| 拉孜县| 平凉市| 新田县| 页游| 泽州县| 长葛市| 安义县| 视频| 甘谷县| 鄂州市| 潞城市| 德钦县| 鸡东县| 洞头县| 罗江县| 类乌齐县| 沾化县| 新干县| 芦山县| 嘉峪关市| 岳西县| 长治县| 锦屏县| 无棣县| 安远县| 凯里市| 乌兰察布市| 马关县| 平泉县| 漳浦县| 松溪县| 大英县| 大同县| 博兴县|