Click here to Skip to main content
11,702,396 members (70,797 online)
Click here to Skip to main content

Convert Word-Documents to PDF on an ASP.NET Server

, 28 Jul 2012 CPOL 121K 6.1K 103
Rate this:
Please Sign up or sign in to vote.
Convert Word-Documents to PDF-Files using Word 2007 on a Server

Introduction

This PDFConverter converts Microsoft Word documents (*.doc) into PDF-files on a Webserver. There is a simple Webform, where you can upload your Word-Document, which will be converted and sent back as a PDF-File.

Prerequisites

Background

There are a lot of people trying to do this Word => PDF conversion using Com Interop directly from their ASP.NET code. As Microsoft reports, Word or any other Office products are not recommended to be automated on a server. The Office products are optimized for running as client applications using a Desktop for interaction. This is why, if you want to use an Office-product in any kind on a server, there must be a User logged in. But then, there is the next problem: Using COM Interop directly from ASP.NET means, the call is made by the ASP.NET-User which is not allowed to interact with Word. Even if this setting is changed in the DCOM-configuration, there will still remain a lot of access rights-related problems with this solution. That's why I considered the following way to do it:

PDFConverter

Explanation

The PDFConverter.exe is an executable containing RemotableObjects running all the time on the server. To do this, a User must be logged in. When starting the PDFConverter.exe, it will be checked if Word 2007 is available or not. I configured that Word should be Visible for this check, so you can see if Microsoft Word quickly opens and closes again, everything works fine.

Then there is the normal website with fileupload. Store the uploaded file somewhere (don't forget to give the appropriate rights to the ASP.NET and IIS User on this folder, in order to be able to save the uploaded file there).

When the file is saved, you call the convert()-method of the PDFConverter.RemoteConverter Instance which you get using Remoting (see code). The whole conversion thing is then called from the PDFConverter.exe which runs on a "Desktop" with the appropriate rights to interact with Microsoft Word.

When the conversion is finished, you can do whatever you want with the pdf-file. In the example, it will be streamed back as filedownload to the client. 

Using the Code

Remoting

Serverside PDFConverter.exe (app.config):

<configuration>
  <system.runtime.remoting>
    <application>
      <service>
        <wellknown objecturi="RemoteConverter" 
	type="PDFConverter.RemoteConverter, RemoteConverter" mode="Singleton">
      </wellknown>
      <channels>
        <channel port="8989" ref="http">
      </channel>
    </channels>
  </service>
</application>
</system.runtime.remoting></configuration>

Serverside PDFConverter.exe (Form1.cs):

...
//initialize remoting
RemotingConfiguration.Configure("PDFConverter.exe.config",false);
RemotingConfiguration.RegisterWellKnownServiceType(new RemoteConverter().GetType(), 
	"RemoteConverter",WellKnownObjectMode.Singleton);
...

Serverside ASP.NET:

Add a Reference to the PDFConverter and then use this code to create instance: Default.aspx.cs:

...
converter=(PDFConverter.RemoteConverter)Activator.GetObject
	(typeof(PDFConverter.RemoteConverter),"http://localhost:8989/RemoteConverter");
...

Don't forget to set your correct storefolder in the Default.aspx.cs.

Converting

Serverside PDFConverter.exe:

I copied the important part of code for the PDF-Conversion using Word 2007 from a MSDN-Article. See here: Saving Word 2007 Documents to PDF and XPS Formats.

Serverside ASP.NET:

...
//Save original file
FileUpload1.SaveAs(sourcefile);                    
                  
//call the converter method
converter.convert(sourcefile, outputfile);

//delete the original file
if (System.IO.File.Exists(sourcefile))
   System.IO.File.Delete(sourcefile);

//Send back a downloadable File
System.IO.FileInfo downloadFile = new System.IO.FileInfo(outputfile);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("Content-Disposition",
                                       string.Format("attachment; filename={0}",
                                       downloadFile.Name));
HttpContext.Current.Response.AddHeader("Content-Length", downloadFile.Length.ToString());
HttpContext.Current.Response.WriteFile(downloadFile.FullName);
HttpContext.Current.Response.End();
HttpContext.Current.Response.Close();
...

Conclusion

As you see, it's not too much code. The whole conversion-code is copied from MSDN, so it's more just the idea doing this with Remoting. I am not a Remoting-expert, so there might be easier/nicer/better ways to do this, so please tell me if you have any considerations. Anyway, I think this solution is much better than trying to use Word directly from the ASP.NET-code.

History

  • July 30th, 2009: Initial version

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

pottwalblog
Switzerland Switzerland
No Biography provided

You may also be interested in...

Comments and Discussions

 
GeneralMy vote of 5 Pin
Danny Hulmston5-Aug-13 5:30
memberDanny Hulmston5-Aug-13 5:30 
AnswerDOWNLOAD LOCATION FOR THIS ARTICLE SOURCE CODE Pin
BonCoder27-Jul-12 11:13
memberBonCoder27-Jul-12 11:13 
Questioncan we use it for ppt to pdf conversion also? Pin
Member 84911544-Jul-12 18:44
memberMember 84911544-Jul-12 18:44 
AnswerRe: can we use it for ppt to pdf conversion also? Pin
pottwalblog5-Jul-12 3:37
memberpottwalblog5-Jul-12 3:37 
GeneralRe: can we use it for ppt to pdf conversion also? Pin
Beatrice Monk6-Nov-14 21:33
memberBeatrice Monk6-Nov-14 21:33 
QuestionSay what now? Pin
Member 285817521-Feb-12 10:31
memberMember 285817521-Feb-12 10:31 
AnswerRe: Say what now? Pin
pottwalblog21-Feb-12 12:24
memberpottwalblog21-Feb-12 12:24 
GeneralI could not download <<Download PDFConverter - 18.94 KB >> Pin
steven_wsoa27-May-11 9:42
membersteven_wsoa27-May-11 9:42 
GeneralRe: I could not download > Pin
BonCoder27-Jul-12 11:12
memberBonCoder27-Jul-12 11:12 
QuestionNice article.But I have a qn? Pin
Wonde Tadesse16-Dec-10 10:37
memberWonde Tadesse16-Dec-10 10:37 
AnswerRe: Nice article.But I have a qn? Pin
pottwalblog16-Dec-10 20:18
memberpottwalblog16-Dec-10 20:18 
QuestionDoes it work on Ms word 2003 documents? Pin
Member 147888031-Aug-09 5:04
memberMember 147888031-Aug-09 5:04 
AnswerRe: Does it work on Ms word 2003 documents? Pin
pottwalblog31-Aug-09 6:19
memberpottwalblog31-Aug-09 6:19 
GeneralRe: Does it work on Ms word 2003 documents? Pin
Member 14788801-Sep-09 3:27
memberMember 14788801-Sep-09 3:27 
AnswerRe: Does it work on Ms word 2003 documents? Pin
pottwalblog1-Sep-09 19:52
memberpottwalblog1-Sep-09 19:52 
GeneralRe: Does it work on Ms word 2003 documents? Pin
Member 14788803-Sep-09 5:22
memberMember 14788803-Sep-09 5:22 
AnswerRe: Does it work on Ms word 2003 documents? Pin
pottwalblog6-Sep-09 20:36
memberpottwalblog6-Sep-09 20:36 
GeneralMy vote of 2 Pin
ptmcomp4-Aug-09 7:10
memberptmcomp4-Aug-09 7:10 
Generalnice artice but... Pin
ChiliBeanie31-Jul-09 2:19
memberChiliBeanie31-Jul-09 2:19 
GeneralRe: nice artice but... Pin
pottwalblog31-Jul-09 2:47
memberpottwalblog31-Jul-09 2:47 
GeneralRe: nice artice but... Pin
skjpatel4-Aug-09 4:43
memberskjpatel4-Aug-09 4:43 
AnswerRe: Using Open Office Pin
pottwalblog4-Aug-09 4:55
memberpottwalblog4-Aug-09 4:55 
GeneralRe: nice artice but... Pin
Master.Man19803-Jul-11 18:25
memberMaster.Man19803-Jul-11 18:25 
Generalanother way Pin
tmjunk30-Jul-09 4:10
membertmjunk30-Jul-09 4:10 
GeneralRe: another way Pin
pottwalblog30-Jul-09 4:20
memberpottwalblog30-Jul-09 4:20 
GeneralRe: another way Pin
Remy Blaettler13-Aug-09 23:38
memberRemy Blaettler13-Aug-09 23:38 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.150819.1 | Last Updated 28 Jul 2012
Article Copyright 2009 by pottwalblog
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid