欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

使用阿里云的pdf文檔識(shí)別

阿里云視覺智能平臺(tái)開通文字識(shí)別-PDF識(shí)別

/**
     * 使用AK&SK初始化賬號(hào)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 請(qǐng)參考 https://api.aliyun.com/product/ocr
        $config->endpoint = "ocr.cn-shanghai.aliyuncs.com";
        $model = new Ocr($config);
        return $model;
    }
    /**
     * @param string[] $args
     * @return void
     * 阿里云一次智能識(shí)別5頁pdf,所以需要對(duì)原文件進(jìn)行拆分,分別取請(qǐng)求
     */
    public function getContent($param){
        set_time_limit(0);
        $inputPdf = $param['url'];
        // 計(jì)算需要拆分成多少個(gè)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;
        // 請(qǐng)確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代碼泄露可能會(huì)導(dǎo)致 AccessKey 泄露,并威脅賬號(hào)下所有資源的安全性。以下代碼示例使用環(huán)境變量獲取 AccessKey 的方式進(jìn)行調(diào)用,僅供參考,建議使用更安全的 STS 方式,更多鑒權(quán)訪問方式請(qǐng)參見: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識(shí)別
                $recognizePdfRequest = new RecognizePdfRequest([
                    "fileURL" => $domain.'/'.$del_url
                ]);
                // 復(fù)制代碼運(yùn)行請(qǐng)自行打印 API 的返回值
                $result = $client->recognizePdfWithOptions($recognizePdfRequest, $runtime);
                $content = $result->body->data->wordsInfo;
                //拼接識(shí)別內(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);
            // 錯(cuò)誤 message
//            var_dump($error->message);
//            // 診斷地址
//            var_dump($error->data["Recommend"]);
//            Utils::assertAsString($error->message);
        }
        //識(shí)別成功刪除原文件
        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識(shí)別普通PDF文件的相關(guān)方法,希望對(duì)大家有所幫助

1. 安裝依賴庫

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

首先,通過Composer安裝這兩個(gè)庫:

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)建了一個(gè)Parser對(duì)象,然后使用parseFile方法讀取了PDF文件。最后,我們遍歷了PDF文件的每一頁,并打印出了每一頁的文本內(nèi)容。

3. 編輯PDF文件

除了讀取PDF文件的內(nèi)容,我們還可以使用setasign/Fpdi庫來編輯PDF文件。以下是一個(gè)簡單的示例,展示了如何添加一個(gè)新的頁面到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)建了一個(gè)Fpdi對(duì)象,然后添加了一個(gè)新的頁面。接著,我們?cè)O(shè)置了字體和字號(hào),并添加了一些文本內(nèi)容。最后,我們使用Output方法將PDF文件輸出到了指定的路徑。

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

除了編輯PDF文件,我們還可以使用setasign/Fpdi庫來轉(zhuǎn)換PDF文件。以下是一個(gè)簡單的示例,展示了如何將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)建了一個(gè)Fpdi對(duì)象,然后添加了一個(gè)新的頁面。接著,我們?cè)O(shè)置了輸入和輸出的文件路徑,并使用ExportImage方法將PDF文件轉(zhuǎn)換為圖片。

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

相關(guān)文章

  • PHP查詢大量數(shù)據(jù)內(nèi)存耗盡問題的解決方法

    PHP查詢大量數(shù)據(jù)內(nèi)存耗盡問題的解決方法

    這篇文章主要為大家詳細(xì)介紹了PHP查詢大量數(shù)據(jù)內(nèi)存耗盡問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • PHP基于openssl實(shí)現(xiàn)非對(duì)稱加密代碼實(shí)例

    PHP基于openssl實(shí)現(xiàn)非對(duì)稱加密代碼實(shí)例

    這篇文章主要介紹了PHP基于openssl實(shí)現(xiàn)非對(duì)稱加密代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 設(shè)定php簡寫功能的方法

    設(shè)定php簡寫功能的方法

    在本篇文章里小編給大家整理的是關(guān)于如何設(shè)定php簡寫功能的相關(guān)文章以及知識(shí)點(diǎn),有需要的朋友們可以學(xué)習(xí)下。
    2019-11-11
  • PHP使用數(shù)組實(shí)現(xiàn)矩陣數(shù)學(xué)運(yùn)算的方法示例

    PHP使用數(shù)組實(shí)現(xiàn)矩陣數(shù)學(xué)運(yùn)算的方法示例

    這篇文章主要介紹了PHP使用數(shù)組實(shí)現(xiàn)矩陣數(shù)學(xué)運(yùn)算的方法,結(jié)合具體實(shí)例形式分析了php基于數(shù)組實(shí)現(xiàn)矩陣表示與運(yùn)算的相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • 微信公眾號(hào)用戶與網(wǎng)站用戶的綁定解決方案分析

    微信公眾號(hào)用戶與網(wǎng)站用戶的綁定解決方案分析

    這篇文章主要介紹了微信公眾號(hào)用戶與網(wǎng)站用戶的綁定解決方案,結(jié)合實(shí)例形式分析了微信公眾號(hào)用戶與網(wǎng)站用戶綁定的原理、操作步驟、技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2019-04-04
  • php debug 安裝技巧

    php debug 安裝技巧

    軟件開發(fā)的斷點(diǎn)調(diào)試是必不可少,這里介紹ubuntu10.04中eclipse工具中php的調(diào)試配置。
    2011-04-04
  • 深入PHP magic quotes的詳解

    深入PHP magic quotes的詳解

    本篇文章是對(duì)php中的magic quotes進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP單例模式模擬Java Bean實(shí)現(xiàn)方法示例

    PHP單例模式模擬Java Bean實(shí)現(xiàn)方法示例

    這篇文章主要介紹了PHP單例模式模擬Java Bean實(shí)現(xiàn)方法,涉及php面向?qū)ο蟪绦蛟O(shè)計(jì)相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • php中return的用法實(shí)例分析

    php中return的用法實(shí)例分析

    這篇文章主要介紹了php中return的用法,實(shí)例分析了php中return的功能及常見的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • PHP調(diào)用API接口的方法及實(shí)現(xiàn)過程

    PHP調(diào)用API接口的方法及實(shí)現(xiàn)過程

    隨著互聯(lián)網(wǎng)、云計(jì)算和大數(shù)據(jù)時(shí)代的到來,越來越多的應(yīng)用程序需要調(diào)用第三方的API接口來獲取數(shù)據(jù),本文將給大家介紹PHP調(diào)用API接口的方法及實(shí)現(xiàn)過程,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03

最新評(píng)論