HelloWorld_Peng666 2024-04-26 09:35 采纳率: 69.2%
浏览 13
已结题

PDF可选中的表格在word里变成图片了

PDF文件里有表格及数据,用Adobe打开PDF时候表格里的数据可以选中(看起来不是图片),然后想借助用word打开PDF再把word里的数据内容复制到Excel里,现在发现用word打开PDF之后原来PDF里数据可以选中的表格在word文档里变成了图片。
我本来想用VBA调用word打开PDF文件,然后将word里的内容再复制到excel里。
不知道为什么说word文档里的表格变成了图片。

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-26 09:35
    关注

    引自免费微信小程序:皆我百晓生

    要解决这个问题,我们需要分两步走:首先从PDF中提取文本,然后将这些文本粘贴到Excel中。由于Word在处理PDF时可能将表格转换为图片,我们不依赖Word,而是使用一个名为PDFBox的Java库来读取PDF中的文本。这里是一个Python脚本示例,它使用Pyjnius库与Java交互,因为PDFBox是Java库。确保已经安装了pyjniusjupyter-java-talk库:

    !pip install pyjnius jupyter-java-talk
    

    接下来,我们将编写一个函数来执行所需的操作。注意,你需要提供PDF文件的路径,并且需要在本地环境中安装PDFBox库。如果你没有安装,可以在项目的src/main/resources目录下创建一个名为META-INF/services的目录,并在这个目录下创建一个名为org.apache.pdfbox.pdmodel.PDDocumentFactory的文件,内容为net.sf.jasperreports.engine.util.JRApachePdfBoxParser\n。

    import os
    from jnius import autoclass, cast
    from io import StringIO
    
    # 加载必要的Java类
    JString = autoclass('java.lang.String')
    PDDocument = autoclass('org.apache.pdfbox.pdmodel.PDDocument')
    PDFTextStripper = autoclass('org.apache.pdfbox.text.PDFTextStripper')
    
    def extract_text_from_pdf(pdf_path):
        # 打开PDF文件
        document = PDDocument.load(JString(pdf_path))
    
        # 创建PDFTextStripper实例
        pdfStripper = PDFTextStripper()
    
        # 设置一些选项,使文本更易解析
        pdfStripper.setSortByPosition(True)
        pdfStripper.setStartPage(1)
        pdfStripper.setEndPage(document.getNumberOfPages())
    
        # 提取所有文本并将其存储在一个字符串中
        text = pdfStripper.getText(document)
    
        # 关闭PDF文档
        document.close()
    
        return text
    
    def copy_to_excel(extracted_text):
        # 假设你已经有了一个活跃的Excel应用实例 excel_app 和一个工作簿 workbook
        # 例如,你可以使用 win32com.client 来实现这一步
        # excel_app = win32com.client.Dispatch("Excel.Application")
        # workbook = excel_app.Workbooks.Add()
    
        # 将提取的文本分割成行
        lines = extracted_text.split("\n")
    
        # 在工作表的第一列开始写入
        row_num = 1
        col_num = 1
    
        for line in lines:
            # 写入每一行
            workbook.Sheets[1].Cells(row_num, col_num).Value = line
            row_num += 1
    
        # 如果你想自动调整列宽以适应内容
        workbook.Sheets[1].Columns.AutoFit()
    
        # 可选:保存并关闭Excel
        # workbook.SaveAs("output.xlsx")
        # excel_app.Quit()
    
    # 使用提供的PDF路径
    pdf_path = "your_pdf_file_path_here.pdf"
    extracted_text = extract_text_from_pdf(pdf_path)
    copy_to_excel(extracted_text)
    

    这个脚本会从PDF中提取文本,并将其写入新的Excel工作表。请确保替换 your_pdf_file_path_here.pdf 为你的PDF文件的实际路径。为了运行这段代码,你可能需要配置Java环境变量,以便Pyjnius能找到Java。另外,如果使用Windows,还需要安装Microsoft Office和相应的COM接口支持。

    注意:此方法不会保留原始表格的结构,而是简单地将文本按行分开。如果你需要保持表格的结构,你可能需要使用更复杂的方法,比如识别PDF中的表格布局,这通常涉及到OCR技术,这超出了当前问题的范围。在这种情况下,你可能需要查找专门处理PDF表格的第三方库,如tabula-py等。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 8月23日
  • 已采纳回答 8月15日
  • 创建了问题 4月26日

悬赏问题

  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误