Python: 如何替换pdf中的文字

Python: How to replace text in pdf

我有一个 pdf 文件,我想替换 pdf 文件中的一些文本并生成新的 pdf。我怎样才能在 python 中做到这一点? 我试过 reportlab , reportlab 没有任何搜索文本和替换它的功能。我还可以使用什么其他模块?

THIS thread 中查看从 PDF 读取文本的众多方法之一。然后你需要创建一个新的 pdf,据我所知,他们不会为你检索任何格式。

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";,这将安装所需的模块。

此外,我意识到我可能应该使用 stdout 等,但我很着急:-)

此外,您知道 CAM-PDF 输出的格式是什么吗?有文档吗?

您可以尝试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)