Word-Dokumente nach PDF konvertieren

Mit Hilfe von Word Automation Services in SharePoint Server 2010, kann man Word-Dokumente in PDF umwandeln.

Nachfolgend ist der Code, wie das zu realisieren ist:

if (properties.ListItem.Name.Contains(".docx") || properties.ListItem.Name.Contains(".doc"))
{
  ConversionJobSettings jobSettings;
  ConversionJob pdfConversion;
  string wordFile;
  string pdfFile;
  string wordAutomationServiceName = "Word Automation Services NAME";

  /* Initialize the conversion settings. */
  jobSettings = new ConversionJobSettings();
  jobSettings.OutputFormat = SaveFormat.PDF;

  /* Create the conversion job using the settings. */
  pdfConversion = new ConversionJob(wordAutomationServiceName, 
  jobSettings);

  /* Set the credentials to use when running the conversion job. */
  pdfConversion.UserToken = site.SystemAccount.UserToken;

  /* Set the file names to use for the source Word document
   * and the destination PDF document. */
  wordFile = properties.WebUrl + "/" + properties.ListItem.Url;
  if (properties.ListItem.Name.Contains(".docx"))
  {
    pdfFile = wordFile.Replace(".docx", ".pdf");
  }
  else
  {
    pdfFile = wordFile.Replace(".doc", ".pdf");
  }

  /* Add the file conversion to the conversion job. */
  pdfConversion.AddFile(wordFile, pdfFile);

  /* Add the conversion job to the Word Automation Services
   * conversion job queue. The conversion does not occur
   * immediately but is processed during the next run of
   * the document conversion job. */
  pdfConversion.Start();
}

Hier wird zunächst geprüft, ob das Dokument die Endung „docx“ oder „doc“ hat. Mit dem String „wordAutomationServiceName“ gibt man den Servicenamen an. Anschliessend übergibt man die Url der Quelldatei, und die neue Url, bei der durch Replace die Endung geändert wurden, an den Service.

Es empfiehlt sich vor der Umwandlung-Prozedur zu prüfen, ob der Dienst „Word Automation Services“ existiert, so sparen wir uns unnötige Fehler:

foreach (var service in site.WebApplication.Farm.Services)
{
  if (service.TypeName == "Word Automation Services")
  {
    foreach (var jobDefinition in service.JobDefinitions)
    {
      if (jobDefinition.Name == "Word Automation Services")
      {
        // weitere Anweisung
      }
    }
  }
}

Der Word Automation Services lässt sich auch überwachen. Z.B. wie weit der Prozess fortgeschritten ist. Mit diesem Code geht das:

ConversionJobStatus status = new ConversionJobStatus(wordAutomationServiceName, pdfConversion.JobId, null);
while (true)
{
  Thread.Sleep(5000);
  status = new ConversionJobStatus(wordAutomationServiceName, 
  pdfConversion.JobId, null);
  if (status.Count == status.Succeeded + status.Failed)
  {
    Console.WriteLine("Completed, Successful: {0}, Failed: {1}", 
    status.Succeeded, status.Failed);
    break;
  }
  Console.WriteLine("In progress, Successful: {0}, Failed: {1}", 
  status.Succeeded, status.Failed);
}

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.