it-swarm.com.de

Wie konvertiere ich Word-Dateien in PDF programmatisch?

Ich habe mehrere Open-Source-/Freeware-Programme gefunden, mit denen Sie .doc-Dateien in .pdf-Dateien konvertieren können, aber sie sind alle in der Anwendungs-/Druckertreiber-Vielfalt, ohne angeschlossenes SDK.

Ich habe mehrere Programme gefunden, die über ein SDK verfügen, mit dem Sie .doc-Dateien in .pdf-Dateien konvertieren können, aber es handelt sich dabei um proprietäre Datentypen, eine Lizenz von 2.000 $ oder mehr.

Kennt jemand eine saubere, kostengünstige (vorzugsweise kostenlose) programmatische Lösung für mein Problem mit C # oder VB.NET?

Vielen Dank!

212
Shaul Behr

Verwenden Sie eine foreach-Schleife anstelle einer for-Schleife - sie hat mein Problem gelöst.

int j = 0;
foreach (Microsoft.Office.Interop.Word.Page p in pane.Pages)
{
    var bits = p.EnhMetaFileBits;
    var target = path1 +j.ToString()+  "_image.doc";
    try
    {
        using (var ms = new MemoryStream((byte[])(bits)))
        {
            var image = System.Drawing.Image.FromStream(ms);
            var pngTarget = Path.ChangeExtension(target, "png");
            image.Save(pngTarget, System.Drawing.Imaging.ImageFormat.Png);
        }
    }
    catch (System.Exception ex)
    {
        MessageBox.Show(ex.Message);  
    }
    j++;
}

Hier ist eine Modifikation eines Programms, das für mich funktioniert hat. Es verwendet Word 2007 mit dem Add-In Speichern unter PDF . Es durchsucht ein Verzeichnis nach .doc-Dateien, öffnet sie in Word und speichert sie als PDF. Beachten Sie, dass Sie der Lösung einen Verweis auf Microsoft.Office.Interop.Word hinzufügen müssen.

using Microsoft.Office.Interop.Word;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

...

// Create a new Microsoft Word application object
Microsoft.Office.Interop.Word.Application Word = new Microsoft.Office.Interop.Word.Application();

// C# doesn't have optional arguments so we'll need a dummy value
object oMissing = System.Reflection.Missing.Value;

// Get list of Word files in specified directory
DirectoryInfo dirInfo = new DirectoryInfo(@"\\server\folder");
FileInfo[] wordFiles = dirInfo.GetFiles("*.doc");

Word.Visible = false;
Word.ScreenUpdating = false;

foreach (FileInfo wordFile in wordFiles)
{
    // Cast as Object for Word Open method
    Object filename = (Object)wordFile.FullName;

    // Use the dummy value as a placeholder for optional arguments
    Document doc = Word.Documents.Open(ref filename, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing);
    doc.Activate();

    object outputFileName = wordFile.FullName.Replace(".doc", ".pdf");
    object fileFormat = WdSaveFormat.wdFormatPDF;

    // Save document into PDF Format
    doc.SaveAs(ref outputFileName,
        ref fileFormat, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
        ref oMissing, ref oMissing, ref oMissing, ref oMissing);

    // Close the Word document, but leave the Word application open.
    // doc has to be cast to type _Document so that it will find the
    // correct Close method.                
    object saveChanges = WdSaveOptions.wdDoNotSaveChanges;
    ((_Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);
    doc = null;
}

// Word has to be cast to type _Application so that it will find
// the correct Quit method.
((_Application)Word).Quit(ref oMissing, ref oMissing, ref oMissing);
Word = null;
193
Eric Ness

Um es für vb.net-Benutzer zusammenzufassen, die kostenlose Option (muss Office installiert haben):

Microsoft-Büroanwendungen herunterladen:

VB.NET-Beispiel:

        Dim Word As Application = New Application()
        Dim doc As Document = Word.Documents.Open("c:\document.docx")
        doc.Activate()
        doc.SaveAs2("c:\document.pdf", WdSaveFormat.wdFormatPDF)
        doc.Close()
32

PDFCreator hat eine COM-Komponente, die von .NET oder VBScript aufgerufen werden kann (Beispiele im Download enthalten). 

Mir scheint, ein Drucker ist genau das, was Sie brauchen - mischen Sie das einfach mit der Automatisierung von Word , und Sie sollten gut damit umgehen können.

14
Mark Brackett

Ich wollte nur hinzufügen, dass ich Microsoft.Interop-Bibliotheken verwendet habe, insbesondere die Funktion ExportAsFixedFormat, die in diesem Thread nicht verwendet wurde.

using Microsoft.Office.Interop.Word;
using System.Runtime.InteropServices;
using System.IO;
using Microsoft.Office.Core;Application app;

public string CreatePDF(string path, string exportDir)
{
    Application app = new Application();
    app.DisplayAlerts = WdAlertLevel.wdAlertsNone;
    app.Visible = true;

    var objPresSet = app.Documents;
    var objPres = objPresSet.Open(path, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse);

    var baseFileName = Path.GetFileNameWithoutExtension(path);
    var pdfFileName = baseFileName + ".pdf";
    var pdfPath = Path.Combine(exportDir, pdfFileName);

    try
    {
        objPres.ExportAsFixedFormat(
            pdfPath,
            WdExportFormat.wdExportFormatPDF,
            false,
            WdExportOptimizeFor.wdExportOptimizeForPrint,
            WdExportRange.wdExportAllDocument
        );
    }
    catch
    {
        pdfPath = null;
    }
    finally
    {
        objPres.Close();
    }
    return pdfPath;
}
7
zeta
7
Todd Gamblin

Ich ging durch das Wort, um PDF zu schmerzen, als mich jemand mit 10000 Word-Dateien für die Konvertierung nach PDF ablegte. Jetzt habe ich es in C # gemacht und Word Interop verwendet, aber es war langsam und stürzte ab, wenn ich versuchte, PC überhaupt zu benutzen ... sehr frustrierend.

Dies führte mich zu der Entdeckung, dass ich Interops und deren Langsamkeit entleeren konnte. Für Excel benutze ich (EPPLUS) und dann entdeckte ich, dass Sie ein kostenloses Tool namens Spire erhalten können, das das Konvertieren in PDF ermöglicht ... mit Einschränkungen! 

http://www.e-iceblue.com/Introduce/free-doc-component.html#.VtAg4PmLRhE

5
Ggalla1779

Ich mache dies als Teil eines Veröffentlichungsprozesses - konvertieren Sie ein Word-Dokument in PDF.

http://www.suodenjoki.dk/us/productions/articles/Word2pdf.htm und http://www.oooforum.org/forum/viewtopic.phtml?t= 3772 & highlight = pdf + formular

nicht exakt programmgesteuert, kann aber helfen.

3
Tim

Als ich auf einige Probleme mit der serverseitigen Office-Automatisierung gestoßen bin, haben wir die beschriebene Methode hier bei Codeprojekt ..__ untersucht. Sie verwendet die portable Version (die über Xcopy bereitgestellt werden kann) von OpenOffice in Kombination mit einem Makro. __: Obwohl wir den Wechsel noch nicht selbst gemacht haben, sieht er sehr vielversprechend aus.

3
Cohen

Ich bin beeindruckt von Gembox ( http://www.gemboxsoftware.com/ ), die eine begrenzte kostenlose Edition der Dokumentenverwaltung (einschließlich PDF-Konvertierung) bereitstellt. Sie betreiben auch Bibliotheken für Tabellenkalkulationen. Die 1 Entwicklerlizenz, wenn Sie deren Grenzen überschreiten (was ich mir vorstellen kann), liegt jedoch bei rund 580 $ ( http://www.gemboxsoftware.com/document/pricelist ). OK, es ist nicht kostenlos (oder meiner Meinung nach relativ günstig), aber es ist viel billiger als 2000 Dollar. Wie ich aus ihrer Preisliste verstehe, gibt es keine Lizenzgebühren für Server-Bereitstellungen. Vielleicht lohnt es sich, auf sie zuzugehen und zu sehen, ob sie einen Deal machen, wenn Sie nicht selbst würfeln möchten.

2
The Senator

Scheint einige relevante Informationen hier zu sein:

Konvertieren von MS Word-Dokumenten in PDF in ASP.NET

Da Office 2007 über eine Funktion zur Veröffentlichung in PDF verfügt, könnten Sie die Office-Automatisierung verwenden, um die * .DOC-Datei in Word 2007 zu öffnen und als PDF speichern. Die Automatisierung von Büros ist mir nicht besonders wichtig, da sie langsam ist und zum Aufhängen neigt.

1
MikeW

Microsoft PDF Add-In für Word scheint momentan die beste Lösung zu sein. Sie sollten jedoch berücksichtigen, dass nicht alle Word-Dokumente korrekt in PDF konvertiert werden. In einigen Fällen werden Sie einen großen Unterschied zwischen Word und Word feststellen Ausgabe pdf. Leider konnte ich keine API finden, die alle Word-Dokumente korrekt konvertierte .. Die einzige Lösung, die ich fand, um sicherzustellen, dass die Konvertierung 100% korrekt war, war das Konvertieren der Dokumente über einen Druckertreiber. Der Nachteil ist, dass Dokumente nacheinander in die Warteschlange gestellt und konvertiert werden, aber Sie können sicher sein, dass das resultierende PDF genau das gleiche ist wie das Word-Dokumentlayout .. Ich persönlich habe es vorgezogen, UDC (Universal Document Converter) zu verwenden und Foxit Reader (kostenlose Version) zu installieren ) auch auf dem Server gedruckt und dann die Dokumente gedruckt, indem ein "Prozess" gestartet und seine Verb-Eigenschaft auf "Drucken" gesetzt wurde. Sie können FileSystemWatcher auch verwenden, um ein Signal festzulegen, wenn die Konvertierung abgeschlossen ist.

1
Arvand

Solange Sie Word 2010 oder höher installiert haben, können Sie DocTor verwenden, das eine Befehlszeilenanwendung enthält.

1
Toby Allen

Ich habe ABCpdf verwendet, was eine programmatische Option ist und nicht zu teuer war, $ 300/Lizenz. Es funktioniert entweder mit OpenOffice oder greift auf Word zurück, wenn OpenOffice nicht verfügbar ist. Das Setup war mit den OpenOffice COM-Berechtigungen etwas kompliziert, aber es lohnt sich definitiv, diesen Teil der App auszulagern.

1
RyanW

Einfacher Code und Lösung mit Microsoft.Office.Interop.Word zum Konvertieren von Word in PDF

using Word = Microsoft.Office.Interop.Word;

private void convertDOCtoPDF()
{

  object misValue = System.Reflection.Missing.Value;
  String  PATH_APP_PDF = @"c:\..\MY_Word_DOCUMENT.pdf"

  var Word = new Word.Application();

  Word.Document doc   = Word.Documents.Open(@"c:\..\MY_Word_DOCUMENT.docx");
  doc.Activate();

  doc.SaveAs2(@PATH_APP_PDF, Word.WdSaveFormat.wdFormatPDF, misValue, misValue, misValue, 
  misValue, misValue, misValue, misValue, misValue, misValue, misValue);

  doc.Close();
  Word.Quit();


  releaseObject(doc);
  releaseObject(Word);

}

Fügen Sie diese Prozedur hinzu, um Speicher freizugeben:

private void releaseObject(object obj)
{
  try
  {
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
      obj = null;
  }
  catch (Exception ex)
  {
      //TODO
  }
  finally
  {
     GC.Collect();
  }
}
0
daniele3004

Für Programmierer, die sich in einer Situation befinden, in der sie Office nicht auf ihrem Server installieren können oder in einer Cloud-Umgebung arbeiten: Eine kostengünstige Alternative zu den anderen Antworten ist Api2Pdf , die die Konvertierung von Word-Dateien in PDF unterstützt wie jede andere MS Office-Datei. Es ist eine Web-API und verwendet LibreOffice unter der Haube.

0
apexdodge