PHP实现识别复杂pdf文档的示例代码
发布:smiling 来源: PHP粉丝网 添加日期:2024-03-24 17:59:00 浏览: 评论:0
这篇文章主要为大家详细介绍了如何使用PHP实现识别复杂pdf文档的功能,文中的示例代码讲解详细,感兴趣的徐海波可以跟随小编一起学习一下
PHP识别复杂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,所以需要对原文件进行拆分,分别取请求
- */
- public function getContent($param){
- set_time_limit(0);
- $inputPdf = $param['url'];
- // 计算需要拆分成多少个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;
- // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
- // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见: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 {
- // 使用循环拆分PDF并保存为单独的文件
- $str = '';
- for ($i=0; $i<$numFiles; $i++) {
- $startPage = ($i * 5) + 1;
- $endPage = min(($startPage + 4), intval($totalPages));
- //执行拆分
- exec("pdftk A=$inputPdf cat A$startPage-$endPage output {$param['path']}_{$i}.pdf",$output, $returnVar);
- $del_url = $param['path'].'_'.$i.'.pdf';
- //执行pdf识别
- $recognizePdfRequest = new RecognizePdfRequest([
- "fileURL" => $domain.'/'.$del_url
- ]);
- // 复制代码运行请自行打印 API 的返回值
- $result = $client->recognizePdfWithOptions($recognizePdfRequest, $runtime);
- $content = $result->body->data->wordsInfo;
- //拼接识别内容
- 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;
- }
方法补充
除了上文的方法,小编还为大家整理了PHP识别普通PDF文件的相关方法,希望对大家有所帮助
1. 安装依赖库
在使用PHP处理PDF文件之前,我们需要先安装一些依赖库。对于本教程,我们将使用两个主要的库:smalot/pdfparser和setasign/Fpdi。
首先,通过Composer安装这两个库:
composer require setasign/fpdi
composer require smalot/pdfparser
2. 读取PDF文件
接下来,我们将展示如何使用smalot/pdfparser库来读取PDF文件的内容。
- <?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";
- }
- ?>
在上述代码中,我们首先创建了一个Parser对象,然后使用parseFile方法读取了PDF文件。最后,我们遍历了PDF文件的每一页,并打印出了每一页的文本内容。
3. 编辑PDF文件
除了读取PDF文件的内容,我们还可以使用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');
- ?>
在上述代码中,我们首先创建了一个Fpdi对象,然后添加了一个新的页面。接着,我们设置了字体和字号,并添加了一些文本内容。最后,我们使用Output方法将PDF文件输出到了指定的路径。
4. 转换PDF文件
除了编辑PDF文件,我们还可以使用setasign/Fpdi库来转换PDF文件。以下是一个简单的示例,展示了如何将PDF文件转换为图片:
- <?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();
- ?>
在上述代码中,我们首先创建了一个Fpdi对象,然后添加了一个新的页面。接着,我们设置了输入和输出的文件路径,并使用ExportImage方法将PDF文件转换为图片。
Tags: PHP识别pdf文档
- 上一篇:PHP利用缓存技术提升性能技巧及原理探究
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)