Wie kann ich programmatisch Word-Dateien in das PDF-Format konvertieren? [geschlossen]

StackOverflow https://stackoverflow.com/questions/607669

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe mehr Open-Source / Freeware-Programme gefunden, die Sie .doc-Dateien in PDF-Dateien umwandeln lassen, aber sie sind alle der Anmeldung / Druckertreiber Vielfalt, ohne SDK beigefügt.

Ich habe mehrere Programme gefunden, die ein SDK zu tun haben mit dem Sie .doc-Dateien in PDF-Dateien, aber sie sind alle von der proprietären Art, $ 2.000 eine Lizenz oder so.

konvertieren

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

Danke!

War es hilfreich?

Lösung

Verwenden Sie eine foreach-Schleife statt einer for-Schleife -. Es 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 gearbeitet. Es verwendet Word 2007 mit dem Als PDF speichern Add-in installiert . Es sucht ein Verzeichnis für DOC-Dateien, öffnet sie in Word und dann speichert sie als PDF. Beachten Sie, dass Sie benötigen einen Verweis auf Microsoft.Office.Interop.Word zur Lösung hinzuzufügen.

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;

Andere Tipps

Um es für vb.net Benutzer zusammenzufassen, die kostenlose Option (muss Büro installiert ist):

Microsoft Office-assembies 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()

PDFCreator eine COM-Komponente hat, aufrufbar von .NET oder VBScript (Proben enthalten im Download) .

Aber, so scheint es mir, dass ein Drucker ist genau das, was Sie brauchen - nur, dass mischen mit Word Automation , und Sie sollten gut zu gehen.

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

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 pdfFileName = Path.ChangeExtension(path, ".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;
}

Ich ging durch die Word to PDF Schmerz, wenn mich jemand mit 10000 Word-Dateien abgeladen zu PDF konvertieren. Jetzt habe ich es in C # und verwenden Word-Interop, aber es war langsam und stürzte ab, wenn ich versuche, PC zu verwenden überhaupt .. sehr frustrierend.

Dies führt mich zu entdecken, ich Interops und ihre Langsamkeit ..... für Excel-Dump konnte ich verwenden (EPPLUS) und dann entdeckte ich, dass Sie ein kostenloses Tool namens Spire erhalten können, die zu PDF ermöglicht die Umwandlung ... mit Einschränkungen !

http: //www.e-iceblue. com / Einführung / Frei-doc-component.html # .VtAg4PmLRhE

Es scheint einige relevent Informationen hier zu sein:

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

Auch mit Office 2007 PDF-Funktionalität veröffentlichen zu müssen, ich denke, Sie Office Automation die * .doc-Datei in Word 2007 und speichern als PDF öffnen nutzen könnten. Ich bin nicht so scharf auf Büroautomatisierung, wie es zu hängen langsam und anfällig ist, sondern nur, dass es Haufen zu werfen ...

Microsoft PDF-Add-in für Wort scheint jetzt die beste Lösung zu sein, aber man sollte berücksichtigen, dass es nicht alle Word-Dokumente in PDF korrekt konvertiert und in einigen Fällen werden Sie großen Unterschied zwischen dem Wort und dem Ausgang sehen pdf. Leider konnte ich keine api finden, die alle Word-Dokumente korrekt umwandeln würde. Die einzige Lösung, die ich durch die Umwandlung der Dokumente durch einen Druckertreiber betrug der Umsatz 100% richtig war, um sicherzustellen, gefunden. Der Nachteil ist, dass Dokumente in der Warteschlange sind und konvertierten nacheinander, aber man kann die Folge pdf ist genau die gleiche wie Word-Dokument-Layout sicher sein. Ich persönlich bevorzugt zu verwenden UDC (Universal Document Converter) und installiert Foxit Reader (kostenlose Version) auf dem Server dann die Dokumente gedruckt, indem ein „Prozess“ beginnt und seine Verb-Eigenschaft auf „Drucken“. Sie können auch Filesystemwatcher verwenden, um ein Signal zu setzen, wenn die Konvertierung abgeschlossen ist.

Einfacher Code und Lösung Microsoft.Office.Interop.Word mit EXCEL als PDF converd

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 Speicher freizugeben:

private void releaseObject(object obj)
{
  try
  {
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
      obj = null;
  }
  catch (Exception ex)
  {
      //TODO
  }
  finally
  {
     GC.Collect();
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top