php - LibreOffice 将 PDF 转换为 Word 作为文本框而不是普通文档

标签 php pdf ms-word libreoffice

我想使用 LibreOffice 6.1.3.2 10(Build:2)(实际上我使用 PHP 执行 LibreOffice)从 Ubuntu 18 终端将 PDF 转换为 Microsoft Word(doc、docx)。但是我得到的全是文本框文档,而不是普通的 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

文件创建成功,但所有内容都转换为文本框,而不是正常文档。然后我尝试了几个 PDF 到 Word 转换器,比如 ilovepdf.com,我得到了 expected.doc

您可以通过在上面的链接中下载我的文件或查看下面的图片来查看不同之处

我的输出:

enter image description here

ilovepdf 输出:

enter image description here

我尝试了几个过滤器,包括 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 cloudadobe cloud这样的付费软件,但我不认为像ilovepdf这样的网站会使用付费服务来提供免费服务。我的问题是,我是否遗漏了 LibreOffice 依赖项中的某些内容以便能够将 PDF 转换为普通的 word 文档?

最佳答案

您的问题出在用于创建 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

请注意,宏是否正确定位输出取决于文本框的锚定位置;如果 anchor 位置与文本框位置无关,你最终会吃到一顿狗早餐。您可能还会将每一行作为自己的段落结束。要清理此类内容,请参阅 http://www.msofficeforums.com/word/29880-cleaning-up-text-pasted-websites-e-mails.html

关于php - LibreOffice 将 PDF 转换为 Word 作为文本框而不是普通文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53763301/

相关文章:

php - Chartjs 的 mysql 求和查询

PHPDocumentor 损坏的链接

php - Swift - 如何读取使用 json_encode 生成的二维数组?

pdf - 在 Vaadin View 中显示 PDF

java - 在 PDF 中突出显示单词

css - 使用 MS Word 打开 html/css 文件 - 元素表 - 不应用文本换行

python - 删除Python列中同一单元格中的重复单词

php - 使用属性定位xml节点,然后使用simpleXML返回不同属性的值

安卓 : how to open pdf file from server in android

hyperlink - 查询字符串已从超链接 URL 中删除(互操作)