处理图片
2024年7月10日大约 4 分钟
注意
0.3.1版本后更新输出为logging
,默认情况下仅会输出Warnings及以上等级的信息。如您希望查看处理过程,请设置logging
等级为INFO:
import logging
httpx_logger = logging.getLogger("httpx")
httpx_logger.setLevel(logging.WARNING)
logging.basicConfig(level=logging.INFO)
为方便演示,以下代码示例中均设置了logging
等级为INFO。
Client.pic2file
将一个或多个图片文件处理为指定格式的输出文件。
参数
参数名 | 类型 | 是否必须 | 默认值 | 描述 |
---|---|---|---|---|
image_file | str 或 list | 是 | - | 单个图片文件路径或图片文件路径列表 |
output_path | str | 否 | "./Output" | 输出文件夹路径 |
output_names | list | 否 | None | 自定义的输出文件名列表,长度必须与image_file 相同,如果文件名包含文件夹路径,系统将自动创建相应的文件夹结构 |
output_format | str | 否 | "md_dollar" | 输出格式,可选值:"texts" , "md" , "md_dollar" , "latex" |
img_correction | bool | 否 | True | 是否进行图片矫正 |
equation | bool | 否 | False | 是否使用纯公式输出模式 |
convert | bool | 否 | False | 是否将[ 转换为$ ,[[ 转换为$$ (仅当output_format 为"texts" 时有效) |
返回值
返回一个包含三个元素的元组 (success_list, fail_list, has_failed)
,其顺序与输入文件顺序保持一致:
success_list
(list): 成功处理的文件列表- 元素为处理后的文件路径(字符串)
- 处理失败时为空字符串
fail_list
(list): 处理失败的文件列表- 元素为字典,包含两个键:
'error'
: 错误信息(字符串)'path'
: 处理失败的文件路径(字符串)
- 处理成功时,两个键的值均为空字符串
- 元素为字典,包含两个键:
has_failed
(bool): 处理状态True
: 至少有一个文件处理失败False
: 全部文件处理成功
注意事项
success_list
和fail_list
的长度相同- 当
output_format
为"texts"
时,直接返回文本,不会保存到文件 - 您可以使用内置的文件目录获得工具生成某个目录下的文件路径列表
- 默认情况下输出的文件名为请求的UUID名字,如您希望保持处理前后文件结构和文件名相同,请使用get_files函数
- 您可以查看文件处理工具以对转换后的Markdown文件进行后处理,例如将图片上传到远端储存服务(阿里OSS等),为MD文档添加分割符等
示例
注意
请确保您已经参照初始化一节在环境变量中配置好密匙了
按照rpm限制处理多个图片
from pdfdeal import Doc2X
client = Doc2X()
file_list = ["tests/image/sample_bad.png", "tests/image/sample.png"]
success, failed, flag = client.pic2file(
image_file=file_list,
output_path="./Output/test/multiple/pdf2file",
output_names=["sample1.docx", "sample2.docx"],
output_format="docx",
)
print(success)
print(failed)
print(flag)
以下示例中sample_bad.png
是一个损坏的图片,因此处理失败是正常的。
当第一个文件处理失败,第二个文件处理成功时,以下是其示例输出,其中深色部分为打印出的success
,failed
,flag
的值:
Get exception Upload file error! 400:{"code":"invalid request","msg":"img locked"}. Retrying in 1 seconds.
Waiting for processing: 0% -- uuid: 8c438409-b409-444b-b6df-b89a00d77445
Get exception Upload file error! 400:{"code":"invalid request","msg":"img locked"}. Retrying in 2 seconds.
Success: 100% -- uuid: 8c438409-b409-444b-b6df-b89a00d77445
Get exception Upload file error! 400:{"code":"invalid request","msg":"img locked"}. Retrying in 4 seconds.
IMG Progress: 1/2 files successfully processed.
-----
Failed deal with tests/image/sample_bad.png with error:
Error Upload file error! 400:{"code":"invalid request","msg":"img locked"}
-----
['', './Output/test/multiple/pdf2file/sample2.docx']
[{'error': 'Error Upload file error! 400:{"code":"invalid request","msg":"img locked"}', 'path': 'tests/image/sample_bad.png'}, {'error': '', 'path': ''}]
True
将一个文件夹中所有图片转换为docx文件,并保持原有文件结构
在处理前有如下文件结构:
image
├── sample_bad.png
├── sample.png
└── test
└── sample1.png
其中sample_bad.pdf
是一个用于测试异常处理的损坏的文件,处理失败是正常的。
为了保持原有文件结构,使用内置的目录生成工具生成需要处理的图片路径:
注意
请注意,get_files
的out
参数必须与本页中转换函数中的output_format
一致!
from pdfdeal import Doc2X
from pdfdeal import get_files
Client = Doc2X()
files, rename = get_files(path="tests/image", mode="img", out="docx")
success, failed, flag = Client.pic2file(
image_file=files, output_names=rename, output_format="docx"
)
print(success)
print(failed)
print(flag)
示例输出如下,其中深色部分为打印出的success
,failed
,flag
的值:
Get exception Upload file error! 400:{"code":"bad_request","msg":"参数错误或无效请求","detail":"img locked"}. Retrying in 1 seconds.
Waiting for processing: 0% -- uuid: b11dc645-d68b-49c3-b222-5c8f6b041332
Waiting for processing: 0% -- uuid: 58630842-3a2c-46ad-a0e5-c15386183d2a
Get exception Upload file error! 400:{"code":"bad_request","msg":"参数错误或无效请求","detail":"img locked"}. Retrying in 2 seconds.
Success: 100% -- uuid: b11dc645-d68b-49c3-b222-5c8f6b041332
Success: 100% -- uuid: 58630842-3a2c-46ad-a0e5-c15386183d2a
Get exception Upload file error! 400:{"code":"bad_request","msg":"参数错误或无效请求","detail":"img locked"}. Retrying in 4 seconds.
IMG Progress: 2/3 files successfully processed.
-----
Failed deal with tests/image/sample_bad.png with error:
Error Upload file error! 400:{"code":"bad_request","msg":"参数错误或无效请求","detail":"img locked"}
-----
['./Output/sample.docx', '', './Output/test/sample1.docx']
[{'error': '', 'path': ''}, {'error': 'Error Upload file error! 400:{"code":"bad_request","msg":"参数错误或无效请求","detail":"img locked"}', 'path': 'tests/image/sample_bad.png'}, {'error': '', 'path': ''}]
True
处理后的文件结构如下:
Output
├── sample.docx
└── test
└── sample1.docx
处理单个图片,在纯公式模式下,获得公式格式为$公式$
形式的内容
from pdfdeal import Doc2X
client = Doc2X()
text, _, _ = client.pic2file(
"tests/image/sample.png", output_format="texts", equation=True, convert=True
)
print(text[0][0])
示例输出如下,其中深色部分为print(text[0][0])
的输出:
Waiting for processing: 0% -- uuid: e631048a-be65-4e0d-b22e-047aebd9baa1
IMG Progress: 1/1 files successfully processed.
$$\text{R}$$