.doc zu pdf mit python

Ich bin damit beauftragt, Tonnen von .doc-Dateien in .pdf zu konvertieren. Und die einzige Art, wie mein Vorgesetzter will, dass ich das mache, ist durch MSWord 2010. Ich weiß, dass ich in der Lage sein werde, dies mit der Python-COM-Automatisierung zu automatisieren. Nur Problem ist, ich weiß nicht, wie und wo ich anfangen soll. Ich habe versucht, nach einigen Tutorials zu suchen, aber war nicht in der Lage, irgendwelche zu finden (vielleicht könnte ich haben, aber ich weiß nicht was ich suche).

Im Moment lese ich das durch. Weiß nicht, wie nützlich das sein wird.

8 Solutions collect form web for “.doc zu pdf mit python”

Ein einfaches Beispiel mit comtypes , das Konvertieren einer einzelnen Datei, Eingabe und Ausgabe Dateinamen als Kommandozeilen-Argumente gegeben:

import sys import os import comtypes.client wdFormatPDF = 17 in_file = os.path.abspath(sys.argv[1]) out_file = os.path.abspath(sys.argv[2]) word = comtypes.client.CreateObject('Word.Application') doc = word.Documents.Open(in_file) doc.SaveAs(out_file, FileFormat=wdFormatPDF) doc.Close() word.Quit() 

Du könntest auch pywin32 benutzen, das wäre gleich

 import win32com.client 

und dann:

 word = win32com.client.Dispatch('Word.Application') 

Wenn es Ihnen nichts ausmacht, mit PowerShell einen Blick auf diese Hey, Scripting Guy! Artikel Der angegebene Code könnte übernommen werden, um den wdFormatPDF Enumerationswert von WdSaveFormat (siehe hier ). Dieser Blog-Artikel präsentiert eine andere Implementierung der gleichen Idee.

Es ist bemerkenswert, dass Stevens Antwort funktioniert, aber stellen Sie sicher, wenn Sie eine for-Schleife verwenden, um mehrere Dateien zu exportieren, um die ClientObject- oder Dispatch-Anweisungen vor der Schleife zu platzieren – es muss nur einmal erstellt werden – siehe mein Problem: Python win32com.client.Dispatch looping Durch Word-Dokumente und Export in PDF; Schlägt fehl, wenn die nächste Schleife auftritt

Unoconv (geschrieben in python) und openoffice läuft als headless daemon. http://dag.wiee.rs/home-made/unoconv/

Arbeitet sehr gut für doc, docx, ppt, pptx, xls, xlsx. Sehr nützlich, wenn Sie Docs konvertieren oder in bestimmte Formate auf einem Server speichern / konvertieren müssen

Ich habe an diesem Problem für einen halben Tag gearbeitet, also denke ich, dass ich einige meiner Erfahrungen in dieser Angelegenheit teilen sollte. Stevens Antwort ist richtig, aber es wird auf meinem Computer scheitern. Es gibt zwei wichtige Punkte, um es hier zu beheben:

(1). Das erste Mal, wenn ich das 'Word.Application' Objekt erstellt habe, sollte ich es machen (das Wort App) sichtbar vor dem Öffnen von Dokumenten. (Eigentlich kann ich selbst nicht erklären, warum das funktioniert. Wenn ich das nicht auf meinem Computer mache, wird das Programm abstürzen, wenn ich versuche, ein Dokument im unsichtbaren Modell zu öffnen, dann wird das Objekt 'Word.Application' gelöscht OS.)

(2). Nach dem Tun (1) wird das Programm manchmal gut funktionieren, kann aber oft ausfallen. Der Crash-Fehler "COMError: (-2147418111, 'Call was rejected by callee.', (None, None, None, 0, None))" bedeutet, dass der COM Server möglicherweise nicht so schnell reagieren kann. Also füge ich eine Verzögerung hinzu, bevor ich versucht habe, ein Dokument zu öffnen.

Nachdem wir diese beiden Schritte gemacht haben, wird das Programm einwandfrei funktionieren. Der Demo-Code ist wie unten. Wenn Sie die gleichen Probleme gefunden haben, versuchen Sie, diese beiden Schritte zu folgen. Ich hoffe es hilft.

  import os import comtypes.client import time wdFormatPDF = 17 # absolute path is needed # be careful about the slash '\', use '\\' or '/' or raw string r"..." in_file=r'absolute path of input docx file 1' out_file=r'absolute path of output pdf file 1' in_file2=r'absolute path of input docx file 2' out_file2=r'absolute path of outputpdf file 2' # print out filenames print in_file print out_file print in_file2 print out_file2 # create COM object word = comtypes.client.CreateObject('Word.Application') # key point 1: make word visible before open a new document word.Visible = True # key point 2: wait for the COM Server to prepare well. time.sleep(3) # convert docx file 1 to pdf file 1 doc=word.Documents.Open(in_file) # open docx file 1 doc.SaveAs(out_file, FileFormat=wdFormatPDF) # conversion doc.Close() # close docx file 1 word.Visible = False # convert docx file 2 to pdf file 2 doc = word.Documents.Open(in_file2) # open docx file 2 doc.SaveAs(out_file2, FileFormat=wdFormatPDF) # conversion doc.Close() # close docx file 2 word.Quit() # close Word Application 

Ich habe die akzeptierte Antwort ausprobiert, war aber nicht besonders scharf auf die aufgeblähten PDFs, die Word produzierte, was in der Regel eine Größenordnung größer war als erwartet. Nach dem Ausschalten der Dialoge bei der Verwendung eines virtuellen PDF-Druckers stieß ich auf Bullzip PDF Printer und ich war sehr beeindruckt von seinen Funktionen. Es ist jetzt ersetzt die anderen virtuellen Drucker, die ich früher verwendet habe. Sie finden auf ihrer Download-Seite eine "freie Community Edition".

Die COM-API finden Sie hier und eine Liste der nutzbaren Einstellungen finden Sie hier . Die Einstellungen werden in eine "Runonce" -Datei geschrieben, die nur für einen Druckauftrag verwendet wird und dann automatisch entfernt wird. Beim Drucken mehrerer PDFs müssen wir sicherstellen, dass ein Druckauftrag abgeschlossen ist, bevor ein anderer gestartet wird, um sicherzustellen, dass die Einstellungen für jede Datei korrekt verwendet werden.

 import os, re, time, datetime, win32com.client def print_to_Bullzip(file): util = win32com.client.Dispatch("Bullzip.PDFUtil") settings = win32com.client.Dispatch("Bullzip.PDFSettings") settings.PrinterName = util.DefaultPrinterName # make sure we're controlling the right PDF printer outputFile = re.sub("\.[^.]+$", ".pdf", file) statusFile = re.sub("\.[^.]+$", ".status", file) settings.SetValue("Output", outputFile) settings.SetValue("ConfirmOverwrite", "no") settings.SetValue("ShowSaveAS", "never") settings.SetValue("ShowSettings", "never") settings.SetValue("ShowPDF", "no") settings.SetValue("ShowProgress", "no") settings.SetValue("ShowProgressFinished", "no") # disable balloon tip settings.SetValue("StatusFile", statusFile) # created after print job settings.WriteSettings(True) # write settings to the runonce.ini util.PrintFile(file, util.DefaultPrinterName) # send to Bullzip virtual printer # wait until print job completes before continuing # otherwise settings for the next job may not be used timestamp = datetime.datetime.now() while( (datetime.datetime.now() - timestamp).seconds < 10): if os.path.exists(statusFile) and os.path.isfile(statusFile): error = util.ReadIniString(statusFile, "Status", "Errors", '') if error != "0": raise IOError("PDF was created with errors") os.remove(statusFile) return time.sleep(0.1) raise IOError("PDF creation timed out") 

Sie sollten von der Untersuchung so genannter virtueller PDF-Druckertreiber beginnen. Sobald Sie einen finden, sollten Sie in der Lage sein, Batch-Datei zu schreiben, die Ihre DOC-Dateien in PDF-Dateien druckt. Wahrscheinlich können Sie dies auch in Python tun (Setup-Druckertreiber-Ausgabe und Ausgabe Dokument / Druck Befehl in MSWord, später kann mit Befehlszeile AFAIR getan werden).

Ich würde vorschlagen, ignorieren Sie Ihre Vorgesetzten und verwenden Sie OpenOffice, die eine Python-API hat. OpenOffice hat Unterstützung für Python gebaut und jemand hat dafür eine Bibliothek erstellt ( PyODConverter ).

Wenn er nicht mit der Ausgabe zufrieden ist, sag ihm, dass es dir Wochen dauern kann, um es mit Worten zu tun.

  • Setzen Sie den Fokus auf das Fenster basierend auf ID mit der AppActivate von win32com.client
  • Wie benutzt man win32com.client.constants mit MS Word?
  • Fehler "Das aufgerufene Objekt hat sich von seinen Clients getrennt" - automatisieren Sie IE 8 mit python und win32com
  • Win32com + Excel + Django + Apache = Problem
  • MS Word r / w in Python, Python-docx Problem und win32com Referenzen?
  • Zugriff auf Daten in Excel - Reuter von python
  • Kopieren von Informationen aus einer Arbeitsmappe in eine andere Arbeitsmappe mit win32com
  • Kann nicht VBA-Makros von Python iterieren
  • Python - Win32com - Öffnen Sie Arbeitsmappe und erstellen Sie eine neue Excel-Datei für jede Registerkarte
  • Konvertieren von .XLSX zu .XLS in Python mit win32com.client Modul
  • Wie kann ich die Attribute von ausgelieferten Objekten mit win32com vertrauensvoll einstellen?
  • Python ist die beste Programmiersprache der Welt.