Python:如何替换pdf中的文本
Posted
技术标签:
【中文标题】Python:如何替换pdf中的文本【英文标题】:Python: How to replace text in pdf 【发布时间】:2015-10-20 14:04:57 【问题描述】:我有一个 pdf 文件,我想替换 pdf 文件中的一些文本并生成新的 pdf。我怎么能在python中做到这一点? 我试过 reportlab ,reportlab 没有任何搜索文本和替换它的功能。我还可以使用什么其他模块?
【问题讨论】:
请说明您尝试过的内容 嗨@Dax!欢迎来到堆栈溢出。正如@adao7000 所提到的 - 你能给我们举一个你试过的例子吗?请在此处查看有关创建“最小、封闭、可验证”示例的指南:***.com/help/mcve。 我是支持者。注意以前的 cmets:@Dax 不是要代码,而是要 python 模块。请注意,***.com/help/on-topic 明确指出“但如果您的问题通常涵盖……软件开发独有的实际、可回答的问题……那么您来对地方提出问题了!”我只是来这里寻找同样的东西。如果有人为我们指明正确的方向,那就足够了。 您链接到的页面还包含以下内容:“要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说是题外话,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。” 【参考方案1】:查看THIS thread,了解从 PDF 中读取文本的众多方法之一。然后你需要创建一个新的 pdf,据我所知,他们不会为你检索任何格式。
【讨论】:
【参考方案2】:CAM::PDF Perl Library 可以输出不是太难以解析的文本(它似乎相当随机地分割文本行)。我懒得学太多 Perl,所以我写了这些非常基本的 Perl 命令行脚本,一个将单页 pdf 读取到文本文件 perl read.pl pdfIn.pdf textOut.txt
和一个写入文本(您可以在同时)到pdf perl write.pl pdfIn.pdf textIn.txt pdfOut.pdf
。
#!/usr/bin/perl
use Module::Load;
load "CAM::PDF";
$pdfIn = $ARGV[0];
$textOut = $ARGV[1];
$pdf = CAM::PDF->new($pdfIn);
$page = $pdf->getPageContent(1);
open(my $fh, '>', $textOut);
print $fh $page;
close $fh;
exit;
和
#!/usr/bin/perl
use Module::Load;
load "CAM::PDF";
$pdfIn = $ARGV[0];
$textIn = $ARGV[1];
$pdfOut = $ARGV[2];
$pdf = CAM::PDF->new($pdfIn);
my $page;
open(my $fh, '<', $textIn) or die "cannot open file $filename";
local $/;
$page = <$fh>;
close($fh);
$pdf->setPageContent(1, $page);
$pdf->cleanoutput($pdfOut);
exit;
你可以call这些用python在输出的文本文件上做一些正则表达式等东西。
如果您是 Perl 的新手(就像我一样),您需要确保已安装 Perl 和 CPAN,然后运行 sudo cpan
,然后在提示符 install "CAM::PDF";
中,这将安装所需的模块。
另外,我意识到我可能应该使用标准输出等,但我很着急:-)
另外,您知道 CAM-PDF 输出的格式是什么吗?有相关文档吗?
【讨论】:
这里有一些更有用的文档search.cpan.org/dist/CAM-PDF/lib/CAM/PDF.pm 如果我能找到它,我可能会写一些 Python 包装器【参考方案3】:您可以尝试Aspose.PDF Cloud SDK for Python,Aspose.PDF Cloud 是一个 REST API PDF 处理解决方案。它是付费 API,其免费套餐计划提供每月 50 积分。
我是 Aspose 的开发布道者。
import os
import asposepdfcloud
from asposepdfcloud.apis.pdf_api import PdfApi
# Get App key and App SID from https://cloud.aspose.com
pdf_api_client = asposepdfcloud.api_client.ApiClient(
app_key='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
app_sid='xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx')
pdf_api = PdfApi(pdf_api_client)
filename = '02_pages.pdf'
remote_name = '02_pages.pdf'
copied_file= '02_pages_new.pdf'
#upload PDF file to storage
pdf_api.upload_file(remote_name,filename)
#upload PDF file to storage
pdf_api.copy_file(remote_name,copied_file)
#Replace Text
text_replace = asposepdfcloud.models.TextReplace(old_value='origami',new_value='polygami',regex='true')
text_replace_list = asposepdfcloud.models.TextReplaceListRequest(text_replaces=[text_replace])
response = pdf_api.post_document_text_replace(copied_file, text_replace_list)
print(response)
【讨论】:
唯一对我有用的选项,tks!以上是关于Python:如何替换pdf中的文本的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 R 中 readtext 包中的 readtext() 替换从 PDF 文件中提取的文本中的“\r\n-”