使用Python

时间:2018-04-22 12:21:27

标签: python pdf docx libreoffice doc

我正在努力寻找通过Python 来强制将PDF文件转换为.docx文件的方法。

我看过其他与此相关的帖子,但在我的情况下,它们似乎都没有正常工作。

我正在使用

import os
import subprocess

for top, dirs, files in os.walk('/my/pdf/folder'):
    for filename in files:
        if filename.endswith('.pdf'):
            abspath = os.path.join(top, filename)
            subprocess.call('lowriter --invisible --convert-to doc "{}"'
                            .format(abspath), shell=True)

这给了我输出[1],但是,我在我的文件夹中找不到任何.docx文件。

我安装了LibreOffice 5.3。

关于它的任何线索?

提前谢谢!

6 个答案:

答案 0 :(得分:1)

我不知道使用libreoffice将pdf文件转换为Word文件的方法。
但是,您可以从pdf转换为html,然后将html转换为docx。 首先,在命令行上运行命令。 (以下是在Linux上。所以你可能必须填写soffice二进制文件的路径名并在操作系统上使用输入文件的完整路径)

soffice --convert-to html ./my_pdf_file.pdf

然后

soffice --convert-to docx:'MS Word 2007 XML' ./my_pdf_file.html

你最终应该:

my_pdf_file.pdf
my_pdf_file.html
my_pdf_file.docx

现在将命令包装在subprocess代码

答案 1 :(得分:0)

这应该可以解决您的问题。

import os
import subprocess
path = '/my/pdf/folder'
for files in os.listdir(path):
    for filename in files:
        flipfilename = filename[::-1]
        ext,trash = flipfilename.split('.',1)
        if ext = 'pdf':
           abspath = os.path.join(path, filename)
           subprocess.call('lowriter --invisible --convert-to doc "{}"'
                            .format(abspath), shell=True)

也许尝试subprocess.Popen吗?

答案 2 :(得分:0)

下面的代码对我有用。

import win32com.client
word = win32com.client.Dispatch("Word.Application")
word.visible = 1
pdfdoc = 'NewDoc.pdf'
todocx = 'NewDoc.docx'
wb1 = word.Documents.Open(pdfdoc)
wb1.SaveAs(todocx, FileFormat=16)  # file format for docx
wb1.Close()
word.Quit()

答案 3 :(得分:0)

我的方法没有遵循使用子系统的相同方法。但是,这是通过阅读PDF文档的所有页面并将它们移至docx文件的工作。注意:仅适用于文本;图片和其他对象通常会被忽略。

#Description: This python script will allow you to fetch text information from a pdf file

#import libraries

import PyPDF2
import os
import docx

mydoc = docx.Document() # document type
pdfFileObj = open('pdf/filename.pdf', 'rb') # pdffile loction
pdfReader = PyPDF2.PdfFileReader(pdfFileObj) # define pdf reader object

# Loop through all the pages

for pageNum in range(1, pdfReader.numPages):
        pageObj = pdfReader.getPage(pageNum)
        pdfContent = pageObj.extractText()  #extracts the content from the page. 
        print(pdfContent) # print statement to test output in the terminal. codeline optional.
        mydoc.add_paragraph(pdfContent) # this adds the content to the word document
        
mydoc.save("pdf/filename.docx") # Give a name to your output file. 

答案 4 :(得分:0)

我将它用于多个文件

####
from pdf2docx import Converter
import os

# # # dir_path for input reading and output files & a for loop # # #

path_input = '/pdftodocx/input/'
path_output = '/pdftodocx/output/'

for file in os.listdir(path_input):
    cv = Converter(path_input+file)
    cv.convert(path_output+file+'.docx', start=0, end=None)
    cv.close()
    print(file)

答案 5 :(得分:0)

我已经用 pdf2docx 成功做到了:

UPDATE users AS u
JOIN (
    SELECT identifier, JSON_OBJECTAGG(name, money) AS accounts
    FROM user_accounts
    GROUP BY identifier
) AS a ON u.identifier = a.identifier
SET u.accounts = a.accounts