Utilizarea comutatoarelor din linia de comandă pentru a salva un PDF ca text – Se poate face? (Programare, Windows, Pdf, Automatizare)

bryan beverly a intrebat.

Am nevoie să folosesc comutatoare de linie de comandă pentru a executa comanda „Save as Text”. În mod ideal, vreau să:

  1. să folosesc un comutator de linie de comandă pentru a deschide un PDF
  2. să folosesc un comutator de linie de comandă pentru a converti PDF-ul într-un fișier text, imitând comanda „Save as Text”.
  3. să folosesc o linie de comandă pentru a închide PDF-ul.

Este posibil acest lucru? Dacă da, știe cineva cum se poate face acest lucru?

Comentarii

  • Ugh, vă rugăm să acordați mai multă atenție etichetării în viitor. Clasificați-vă întrebarea în categorii. Nu încercați să o rezumați. Fiecare etichetă ar trebui să stea pe cont propriu. –  > Por Joel Coehoorn.
  • Nu știu sigur ce sistem de operare aveți, dar există un instrument numit „pdftotext” care pare să facă ceea ce doriți. Este disponibil în Linux, dar este posibil să existe instrumente comparabile pentru alte sisteme de operare. –  > Por Gerald Senarclens de Grancy.
  • Îmi pare rău, am omis să menționez sistemul de operare. Acesta este Windows. Am auzit de acest instrument; din păcate, cumpărarea unei soluții nu este o opțiune – prin urmare, ne rămâne să construim una. Vă mulțumim totuși! – bryan beverly
  • Nu sunt sigur ce înseamnă „a cumpăra” pentru dvs. pdftotext este gratuit. –  > Por Gerald Senarclens de Grancy.
  • Free-ware este cu siguranță mai bine decât să cumperi, dar în mediul nostru, ar dura câteva săptămâni pentru ca acest lucru să fie aprobat pentru utilizare pe acest site. De aceea, calea liniei de comandă ar fi cea mai bună – fără formulare de completat, fără a aștepta de ce o echipă de testare examinează produsul, etc. – bryan beverly
4 răspunsuri
AutoDoc

Nu folosiți CMD; folosiți AutoIt. Foarte ușor de făcut și durează câteva linii

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

luochen1990

Poate că poți încerca asta: https://github.com/luochen1990/nodejs-easy-pdf-parser

Este un pachet npm și trebuie să instalați nodejs (și npm) pentru a-l folosi.

Poate fi folosit ca un instrument de linie de comandă:

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

Și acest instrument va sorta liniile de text în funcție de coordonatele lor y, așa că funcționează foarte bine în majoritatea cazurilor. Și, de asemenea, funcționează bine cu unicode și pe mai multe platforme.

Gareth Davidson

Nu înțeleg de ce nu ați dori să folosiți software gratuit (nu freeware), pdftotext este soluția ideală. totuși, dacă doriți doar să deschideți și să salvați efectiv PDF-ul într-un mod automatizat folosind interfața grafică Windows, ați putea folosi vbscript și comanda sendkeys.

Folosiți totuși pdftotext, ar fi mult mai fiabil și nu vă va costa o cutie întreagă.

Comentarii

  • Mulțumesc – mă gândeam să fac metoda „SENDKEYS”, dar am vrut să văd dacă există ceva rapid și murdar. Da, mediul nostru impune restricții stricte în ceea ce privește software-ul acceptabil. Utilizarea Python (care este aprobat) poate fi, de asemenea, o opțiune. – bryan beverly
  • +1 – pentru unul ar trebui să folosească întotdeauna google „site:http: //stackoverflow.com” <<wordToFind>> > pentru a economisi câteva 5 minute de reclame de rahat ware, pentru că băieții inteligenți ca tine au postat deja răspunsul … –  > Por Yordan Georgiev.
Acie

Cred că VBscript-ul de mai jos ar trebui să rezolve problema. Acesta va lua toate fișierele .pdf dintr-o locație dată a unui folder și le va salva ca fișiere .txt. Unul mare este că funcționează numai dacă mașina nu este blocată, deoarece utilizează comanda SendKeys. Dacă cineva are o soluție care funcționează în timp ce un computer este blocat, vă rog să mi-o trimiteți!

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