【问题标题】:Python: How to replace text in pdfPython:如何替换pdf中的文本
【发布时间】:2015-10-20 14:04:57
【问题描述】:

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

【问题讨论】:

  • 请说明您尝试过的内容
  • 嗨@Dax!欢迎来到堆栈溢出。正如@adao7000 所提到的 - 你能给我们举一个你试过的例子吗?请在此处查看有关创建“最小、封闭、可验证”示例的指南:stackoverflow.com/help/mcve
  • 我是支持者。注意以前的 cmets:@Dax 不是要代码,而是要 python 模块。请注意,stackoverflow.com/help/on-topic 明确指出“但如果您的问题通常涵盖……软件开发独有的实际、可回答的问题……那么您来对地方提出问题了!”我只是来这里寻找同样的东西。如果有人为我们指明正确的方向,那就足够了。
  • 您链接到的页面还包含以下内容:“要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说是题外话,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。”

标签: python pdf reportlab pypdf


【解决方案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 输出的格式是什么吗?有相关文档吗?

    【讨论】:

    【解决方案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!
    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    相关资源
    最近更新 更多