处理PDF
2024年7月10日大约 3 分钟
注意
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.pdf2file
将一个或多个 PDF 文件转换为指定格式的文件。
参数
参数 | 类型 | 是否必须 | 默认值 | 描述 |
---|---|---|---|---|
pdf_file | str 或 list | 是 | - | PDF 文件路径或 PDF 文件路径列表 |
output_path | str | 否 | "./Output" | 输出文件夹路径 |
output_names | list | 否 | None | 输出文件名列表,长度必须与 pdf_file 相同,如果文件名包含文件夹路径,系统将自动创建相应的文件夹结构 |
output_format | str | 否 | "md_dollar" | 输出格式,可选值:"texts" , "md" , "md_dollar" , "latex" , "docx" |
ocr | bool | 否 | True | 是否使用 OCR |
convert | bool | 否 | False | 是否将 [ 转换为 $ ,[[ 转换为 $$ (仅在 output_format 为 "texts" 时有效) |
返回值
返回一个包含三个元素的元组 (list1, list2, status)
,其顺序与输入文件顺序保持一致:
list1
(list
): 成功处理的文件列表- 元素为处理后的文件路径(字符串)
- 处理失败时为空字符串
list2
(list
): 处理失败的文件列表- 元素为字典,包含两个键:
'error'
: 错误信息(字符串)'path'
: 处理失败的文件路径(字符串)
- 处理成功时,两个键的值均为空字符串
- 元素为字典,包含两个键:
status
(bool
): 处理状态True
: 至少有一个文件处理失败False
: 全部文件处理成功
注意事项
list1
和list2
的长度相同- 当
output_format
为"texts"
时,直接返回文本,不会保存到文件 - 您可以使用内置的文件目录获得工具生成某个目录下的文件路径列表
- 默认情况下输出的文件名为请求的UUID名字,如您希望保持处理前后文件结构和文件名相同,请使用get_files函数
- 您可以查看文件处理工具以对转换后的Markdown文件进行后处理,例如将图片上传到远端储存服务(阿里OSS等),为MD文档添加分割符等
示例
注意
请确保您已经参照初始化一节在环境变量中配置好密匙了
将单个pdf转换为latex文件并指定输出文件名
from pdfdeal import Doc2X
client = Doc2X()
filepath, _, _ = client.pdf2file(
"tests/pdf/sample.pdf", output_names=["Folder/Test.zip"], output_format="latex"
)
print(filepath)
当成功时示例输出:
['./Output/Folder/Test.zip']
当处理失败时示例输出:
['']
将一个文件夹中的pdf转换为docx文件,并保持原有文件结构
为了保持原有文件结构,使用内置的目录生成工具生成需要处理的pdf路径:
注意
请注意,get_files
的out
参数必须与本页中转换函数中的output_format
一致!
from pdfdeal import Doc2X
from pdfdeal import get_files
Client = Doc2X()
file_list, rename_list = get_files(
path="./tests/pdf", mode="pdf", out="docx"
)
success, failed, flag = Client.pdf2file(
pdf_file=file_list,
output_path="./Output/newfolder",
output_names=rename_list,
output_format="docx",
)
print(success)
print(failed)
print(flag)
其中./tests/pdf
的文件结构为:
pdf
├── sample_bad.pdf
├── sample.pdf
└── test
└── sampleB.pdf
注意sample_bad.pdf
是一个用于测试异常处理的损坏的文件,处理失败是正常的。
预期输出:
PDF Progress: 2/3 files successfully processed.
-----
Failed deal with ./tests/pdf/sample_bad.pdf with error:
Error Upload file error! 400:{"code":"invalid request","msg":"bad params"}
-----
['./Output/newfolder/sample.docx', '', './Output/newfolder/test/sampleB.docx']
[{'error': '', 'path': ''}, {'error': 'Error Upload file error! 400:{"code":"invalid request","msg":"bad params"}', 'path': './tests/pdf/sample_bad.pdf'}, {'error': '', 'path': ''}]
True
以及处理后的文件结构:
Output
└── newfolder
├── sample.docx
└── test
└── sampleB.docx