【问题标题】:Using Command Line Switches to Save a PDF as Text - Can it be done?使用命令行开关将 PDF 保存为文本 - 可以吗?
【发布时间】:2010-11-14 19:59:23
【问题描述】:

我需要使用命令行开关来执行“另存为文本”命令。理想情况下,我想:

  1. 使用命令行开关打开 PDF
  2. 通过模仿“另存为文本”命令,使用命令行开关将 PDF 转换为文本文件。
  3. 使用命令行关闭 PDF。

这可能吗?如果是这样,那么有人知道该怎么做吗?

【问题讨论】:

  • 呃,以后请多注意你的标签。对您的问题进行分类。 不要试图总结它。每个标签都应该独立存在。
  • 不确定您正在运行哪个操作系统,但有一个名为“pdftotext”的工具似乎可以满足您的需求。它在 Linux 中可用,但可能有适用于其他操作系统的类似工具。
  • 对不起,我忽略了操作系统。这是 Windows。我听说过这个工具;不幸的是,购买解决方案不是一种选择——因此我们只能构建一个。不过谢谢!
  • 不确定“购买”对您意味着什么。 pdftotext 是免费的。
  • 免费软件肯定比购买好,但在我们的环境中,这需要几周时间才能被批准在此站点使用。这就是为什么命令行路线是最好的 - 无需填写表格,无需等待测试团队检查产品等。

标签: windows pdf automation


【解决方案1】:

也许你可以试试这个:https://github.com/luochen1990/nodejs-easy-pdf-parser

它是一个 npm 包,你需要安装 nodejs(和 npm)才能使用它。

可以作为命令行工具使用:

npm install -g easy-pdf-parser
pdf2text test.pdf > test.txt

而且这个工具会根据它们的 y 坐标对文本行进行排序,所以它在大多数情况下都很好用。它也适用于 unicode 和跨平台。

【讨论】:

    【解决方案2】:

    不要使用 CMD;使用 AutoIt。很容易做,只需要几行代码

    Run("file.pdf")
    winwait("Adobe")
    send(?);; whatever commands necessary to save as text
    send("{enter}")
    send("!{F4}")
    

    【讨论】:

      【解决方案3】:

      我不明白您为什么不想使用免费软件(不是免费软件),pdftotext 是理想的解决方案。 但是,如果您只想使用 Windows GUI 以自动方式实际打开和保存 PDF,您可以使用 vbscript 和 sendkeys 命令。

      尽管使用 pdftotext,它会更可靠,而且不会花费你一整盒。

      【讨论】:

      • 谢谢 - 我正在考虑使用 'SENDKEYS' 方法,但想看看是否有一些快速而肮脏的东西。是的,我们的环境对可接受的软件有严格的限制。也可以选择使用 Python(已获批准)。
      • +1 - 因为像你这样聪明的人有已经发布了答案...
      【解决方案4】:

      我认为下面的 VBscript 应该可以解决问题。它将获取给定文件夹位置中的所有 .pdf 文件并将它们保存为 .txt 文件。一个主要令人不快的是,它仅在您的机器未锁定时才有效,因为它使用了 SendKeys 命令。如果有人有在计算机锁定时有效的解决方案,请发送给我!

      Set objFSO = CreateObject("Scripting.FileSystemObject")
      objStartFolder = "PATH_OF_ALL_PDFS_YOU_WANT_TO_CONVERT_HERE"
      Set objFolder = objFSO.GetFolder(objStartFolder)
      
      Set colFiles = objFolder.Files
      For Each objFile In colFiles
        extension = Mid(objFile.Name, Len(objFile.Name) - 3, 4)
        file = Mid(objFile.Name, 1, Len(objFile.Name) - 4)
        fullname = objFSO.BuildPath(objStartFolder, objFile.Name)
        fullname_txt = objFSO.BuildPath(objStartFolder, file + ".txt")
      
        Set objFSO = CreateObject("Scripting.FileSystemObject")
      
        If extension = ".pdf" And Not objFSO.FileExists(fullname_txt) Then
            WScript.Echo fullname
          Set WshShell = WScript.CreateObject("WScript.Shell")
          WshShell.Run """" + fullname + """"
          WScript.Sleep 1000
          WshShell.SendKeys "%"
          WScript.Sleep 100
          WshShell.SendKeys "f"
          WScript.Sleep 100
          WshShell.SendKeys "h"
          WScript.Sleep 100
          WshShell.SendKeys "x"
          WScript.Sleep 300
          WshShell.SendKeys "{ENTER}"
      
          count = 0
          'this little step prevents the loop from moving on to the next .pdf before the conversion to .txt is complete
          Do While i = 0 And count < 100
            On Error Resume Next
            Set fso = CreateObject("Scripting.FileSystemObject")
            Set MyFile = fso.OpenTextFile(fullname_txt, 8)
            If Err.Number = 0 Then
              i = 1
            End If
            count = count + 1
            WScript.Sleep 20000
          Loop
        End If
      Next
      

      【讨论】:

        猜你喜欢
        • 2013-02-17
        • 2019-11-17
        • 1970-01-01
        • 2013-03-03
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多