我想使用LibreOffice 6.1.3.2 10(Build:2)从Ubuntu 18终端将PDF转换为Microsoft Word(doc,docx)(实际上我使用PHP执行LibreOffice)。但是我到处都是文本框文档,而不是普通的Word文档。
首先要了解我的问题,我建议在以下位置下载文件:https://nofile.io/f/DKvQYFRdYZg/pdf2word.rar
我有4个文件:
1.original.doc
2.original-to-pdf.pdf
3.pdf-to-word.doc
4.expected.doc
首先我将original.pdf
转换为original-to-pdf.pdf
,然后尝试使用以下命令转换回Word:
soffice --infilter="writer_pdf_import" --convert-to docx a.pdf
文件创建成功,但是所有内容都转换为文本框,而不是普通文档。然后,我尝试了几个ilovepdf.com之类的PDF至Word转换器,得到了expected.doc
您可以通过在上面的链接中下载我的文件或在下面的图片中看到不同的内容
我的输出:
ilovepdf输出:
我尝试了几个过滤器,包括将pdf转换为odt,然后将odt转换为word,但是下面的所有命令都没有给我预期的结果
soffice --infilter="writer_pdf_import" --convert-to docx a.pdf
soffice --infilter="writer_pdf_import" --convert-to docx:"Microsoft Word 2007/2010/2013 XML" a.pdf
soffice --infilter="writer_pdf_import" --convert-to doc:"MS 2003 XML" a.pdf
soffice --infilter="writer_pdf_import" --convert-to doc a.pdf
soffice --infilter="writer_pdf_import" --convert-to odf:"writer8" a.pdf
soffice --infilter="writer8" --convert-to doc a.odf
soffice --infilter="writer_pdf_import" --convert-to doc:"MS Word 95" a.pdf
soffice --infilter="writer_pdf_import" --convert-to doc:"MS Word 97" a.pdf
soffice --infilter="writer_pdf_import" --convert-to doc:"StarOffice XML (Writer)" a.pdf
soffice --infilter="writer_pdf_import" --convert-to doc:"MS Word 2003 XML" a.pdf
soffice --infilter="writer_pdf_import" --convert-to docx:"MS Word 2003 XML" a.pdf
soffice --infilter="writer_pdf_import" --convert-to doc:"MS Word 2007 XML" a.pdf
soffice --infilter="writer_pdf_import" --convert-to doc:"MS Word 2003 XML" a.pdf
soffice --infilter="writer_pdf_import" --convert-to docx:"MS Word 2007 XML Template" a.pdf
soffice --infilter="writer_pdf_import" --convert-to docx:"MS Word 2007 XML" a.pdf
soffice --infilter="Microsoft Word 2007/2010/2013 XML" --convert-to doc a.pdf
我了解诸如abbyy cloud
或adobe cloud
之类的高级软件,但是我认为ilovepdf之类的网站不会使用付费服务来提供免费服务。我的问题是,我是否错过了LibreOffice依赖项中的某些功能,以便能够将PDF转换为普通的Word文档?
答案 0 :(得分:1)
您的问题在于创建PDF的软件; PDF中文本框形式的输出是某些低端PDF创建软件的特征。在导入过程中,Word对此无能为力。您将需要随后对其进行清理。
您可以用于清理的Word宏是:
Sub EraseTextBoxes()
Dim RngDoc As Range, RngShp As Range, i As Long
With ActiveDocument
For i = .Shapes.Count To 1 Step -1
With .Shapes(i)
If .Type = msoTextBox Then
Set RngShp = .TextFrame.TextRange
RngShp.End = RngShp.End - 1
Set RngDoc = .Anchor
RngDoc.Collapse wdCollapseEnd
RngDoc.FormattedText = RngShp.FormattedText
.Delete
End If
End With
Next
End With
End Sub
请注意,宏是否正确放置输出取决于文本框的锚定位置;如果锚点位置与文本框位置无关,那么您将得到一条狗的早餐。您可能仍将每一行作为自己的段落结尾。要清理此类内容,请参见http://www.msofficeforums.com/word/29880-cleaning-up-text-pasted-websites-e-mails.html