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中的文本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NodeJS 替换 PDF 文件中的字符串?

无法使用 R 中 readtext 包中的 readtext() 替换从 PDF 文件中提取的文本中的“\r\n-”

如何替换不在当前循环Python中的文本文件中的一行

如何删除python中的打印文本并将其替换为另一个文本[重复]

用光栅图像替换 PDF 中的矢量图像

如何搜索和替换文件中的文本?