How to convert Word, Excel, PowerPoint files to PDF files in C# and .NET
Complete code
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Drawing;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
convDir.DataSource = Enum.GetNames(typeof(SautinSoft.UseOffice.eDirection));
convDir.DataBind();
}
resultMessage.Text = "";
fileMessage.Text = "";
}
protected void convDir_SelectedIndexChanged(object sender, EventArgs e)
{
if (uploadedDocument.PostedFile.FileName.Length == 0)
{
resultMessage.Text = "Please select an input document at first!";
return;
}
}
protected void convert_Click(object sender, EventArgs e)
{
if (uploadedDocument.PostedFile.FileName.Length == 0)
{
resultMessage.Text = "Please select an input document at first!";
return;
}
// 1. Prepare a directory for converting and storing temporary files
// Remove all files in this directory
string workDirectory = @"/converted/";
string workPath = Server.MapPath(".") + workDirectory;
Directory.CreateDirectory(workPath);
string[] allFiles = Directory.GetFiles(workPath, "*.*");
foreach (string file in allFiles)
File.Delete(file);
// 2. Save a document from FileUpload control to a temporary file: "Hour-Min-Sec-MSec.xxx", e.g. "9-34-12-807.doc".
// Because UseOffice .Net can convert only documents as files
string fileName = String.Format("{0: h-m-s-f}", DateTime.Now);
string tempFilePath = Path.Combine(workPath, fileName + Path.GetExtension(uploadedDocument.PostedFile.FileName));
File.WriteAllBytes(tempFilePath, uploadedDocument.FileBytes);
resultMessage.Text = "Converting ...";
// 3. Get a converting direction which user has just choosed
// Get a file extension for a resulting file.
string ext = ".rtf";
//get extension
int pos = convDir.Text.LastIndexOf('_');
pos++;
ext = (convDir.Text.Substring(pos, convDir.Text.Length - pos)).ToLower();
if (ext.CompareTo("text") == 0)
{
ext = "txt";
}
ext = "." + ext;
// 4. Create a path for a resulted file.
string resultPath = Path.Combine(workPath, Path.ChangeExtension(uploadedDocument.FileName, ext));
// 5. Launch UseOffice .Net and start converting
SautinSoft.UseOffice u = new SautinSoft.UseOffice();
//only Word
if (convDir.Text == "DOC_to_RTF" || convDir.Text == "DOCX_to_RTF" || convDir.Text == "DOC_to_HTML" || convDir.Text == "DOCX_to_HTML" || convDir.Text == "DOC_to_Text" || convDir.Text == "HTML_to_DOC" || convDir.Text == "HTML_to_RTF" || convDir.Text == "HTML_to_Text" || convDir.Text == "RTF_to_Text" || convDir.Text == "RTF_to_HTML" || convDir.Text == "RTF_to_DOC" || convDir.Text == "DOC_to_PDF" || convDir.Text == "DOCX_to_PDF" || convDir.Text == "RTF_to_PDF")
{
u.InitWord();
}
//only Excel
if (convDir.Text == "XLS_to_HTML" || convDir.Text == "XLS_to_XML" || convDir.Text == "XLS_to_CSV" || convDir.Text == "XLS_to_Text")
{
u.InitExcel();
}
//Word + Excel
if (convDir.Text == "XLS_to_RTF" || convDir.Text == "XLS_to_PDF" || convDir.Text == "XLSX_to_RTF" || convDir.Text == "XLSX_to_PDF")
{
u.InitWord();
u.InitExcel();
}
//only PowerPoint
if (convDir.Text == "PPT_to_PDF" || convDir.Text == "PPT_to_HTML" || convDir.Text == "PPT_to_RTF" || convDir.Text == "PPTX_to_PDF")
{
u.InitPowerPoint();
}
SautinSoft.UseOffice.eDirection convDirection = (SautinSoft.UseOffice.eDirection)Enum.Parse(typeof(SautinSoft.UseOffice.eDirection), convDir.SelectedValue);
if (File.Exists(resultPath))
{
File.Delete(resultPath);
}
// 6. Convert a temporary file to a desired result
int result = u.ConvertFile(tempFilePath, resultPath, convDirection);
switch (result)
{
// 7. Show a resulted file as a link
case 0: resultMessage.Text = "Converting successfully!";
string href = Request.UrlReferrer.AbsoluteUri;
href = href.Remove(href.LastIndexOf("/"));
href+= workDirectory + Path.GetFileName(resultPath);
fileMessage.NavigateUrl = href;
fileMessage.Target = "_blank";
fileMessage.Text = Path.GetFileName(resultPath);
break;
case 1: resultMessage.Text = "Can't open input file."; break;
case 2: resultMessage.Text = "Can't create output file."; break;
case 3: resultMessage.Text = "Converting error!"; break;
default: break;
}
//u.KillProcesses("WINWORD");
//u.KillProcesses("EXCEL");
//u.KillProcesses("POWERPNT");
u.CloseOffice();
//Remove temporary file
File.Delete(tempFilePath);
}
}
Imports System
Imports System.Data
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls
Imports System.IO
Imports System.Drawing
Partial Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Not IsPostBack Then
convDir.DataSource = System.Enum.GetNames(GetType(SautinSoft.UseOffice.eDirection))
convDir.DataBind()
End If
resultMessage.Text = ""
fileMessage.Text = ""
End Sub
Protected Sub convDir_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
If uploadedDocument.PostedFile.FileName.Length = 0 Then
resultMessage.Text = "Please select an input document at first!"
Return
End If
End Sub
Protected Sub convert_Click(ByVal sender As Object, ByVal e As EventArgs)
If uploadedDocument.PostedFile.FileName.Length = 0 Then
resultMessage.Text = "Please select an input document at first!"
Return
End If
' 1. Prepare a directory for converting and storing temporary files
' Remove all files in this directory
Dim workDirectory As String = "/converted/"
Dim workPath As String = Server.MapPath(".") & workDirectory
Directory.CreateDirectory(workPath)
Dim allFiles() As String = Directory.GetFiles(workPath, "*.*")
For Each file As String In allFiles
System.IO.File.Delete(file)
Next file
' 2. Save a document from FileUpload control to a temporary file: "Hour-Min-Sec-MSec.xxx", e.g. "9-34-12-807.doc".
' Because UseOffice .Net can convert only documents as files
Dim fileName As String = String.Format("{0: h-m-s-f}", DateTime.Now)
Dim tempFilePath As String = Path.Combine(workPath, fileName & Path.GetExtension(uploadedDocument.PostedFile.FileName))
File.WriteAllBytes(tempFilePath, uploadedDocument.FileBytes)
resultMessage.Text = "Converting ..."
' 3. Get a converting direction which user has just choosed
' Get a file extension for a resulting file.
Dim ext As String = ".rtf"
'get extension
Dim pos As Integer = convDir.Text.LastIndexOf("_"c)
pos += 1
ext = (convDir.Text.Substring(pos, convDir.Text.Length - pos)).ToLower()
If ext.CompareTo("text") = 0 Then
ext = "txt"
End If
ext = "." & ext
' 4. Create a path for a resulted file.
Dim resultPath As String = Path.Combine(workPath, Path.ChangeExtension(uploadedDocument.FileName, ext))
' 5. Launch UseOffice .Net and start converting
Dim u As New SautinSoft.UseOffice()
'only Word
If convDir.Text = "DOC_to_RTF" OrElse convDir.Text = "DOCX_to_RTF" OrElse convDir.Text = "DOC_to_HTML" OrElse convDir.Text = "DOCX_to_HTML" OrElse convDir.Text = "DOC_to_Text" OrElse convDir.Text = "HTML_to_DOC" OrElse convDir.Text = "HTML_to_RTF" OrElse convDir.Text = "HTML_to_Text" OrElse convDir.Text = "RTF_to_Text" OrElse convDir.Text = "RTF_to_HTML" OrElse convDir.Text = "RTF_to_DOC" OrElse convDir.Text = "DOC_to_PDF" OrElse convDir.Text = "DOCX_to_PDF" OrElse convDir.Text = "RTF_to_PDF" Then
u.InitWord()
End If
'only Excel
If convDir.Text = "XLS_to_HTML" OrElse convDir.Text = "XLS_to_XML" OrElse convDir.Text = "XLS_to_CSV" OrElse convDir.Text = "XLS_to_Text" Then
u.InitExcel()
End If
'Word + Excel
If convDir.Text = "XLS_to_RTF" OrElse convDir.Text = "XLS_to_PDF" OrElse convDir.Text = "XLSX_to_RTF" OrElse convDir.Text = "XLSX_to_PDF" Then
u.InitWord()
u.InitExcel()
End If
'only PowerPoint
If convDir.Text = "PPT_to_PDF" OrElse convDir.Text = "PPT_to_HTML" OrElse convDir.Text = "PPT_to_RTF" OrElse convDir.Text = "PPTX_to_PDF" Then
u.InitPowerPoint()
End If
Dim convDirection As SautinSoft.UseOffice.eDirection = CType(System.Enum.Parse(GetType(SautinSoft.UseOffice.eDirection), convDir.SelectedValue), SautinSoft.UseOffice.eDirection)
If File.Exists(resultPath) Then
File.Delete(resultPath)
End If
' 6. Convert a temporary file to a desired result
Dim result As Integer = u.ConvertFile(tempFilePath, resultPath, convDirection)
Select Case result
' 7. Show a resulted file as a link
Case 0
resultMessage.Text = "Converting successfully!"
Dim href As String = Request.UrlReferrer.AbsoluteUri
href = href.Remove(href.LastIndexOf("/"))
href &= workDirectory & Path.GetFileName(resultPath)
fileMessage.NavigateUrl = href
fileMessage.Target = "_blank"
fileMessage.Text = Path.GetFileName(resultPath)
Case 1
resultMessage.Text = "Can't open input file."
Case 2
resultMessage.Text = "Can't create output file."
Case 3
resultMessage.Text = "Converting error!"
Case Else
End Select
'u.KillProcesses("WINWORD");
'u.KillProcesses("EXCEL");
'u.KillProcesses("POWERPNT");
u.CloseOffice()
'Remove temporary file
File.Delete(tempFilePath)
End Sub
End Class
If you need a new code example or have a question: email us at support@sautinsoft.com or ask at Online Chat (right-bottom corner of this page) or use the Form below: