Im trying to create a lot of PDF's from several word documents. Unfortuntately Im not able to close/clean up (Garbage Collection). Therefore memory consumption rices a lot, and eventually the program dumps.
Here is my code. I hope that you clever guys can guide me to a solution.
//**************************************************************
// Please notice:
//
// this.Files is an array with filepath and filenames e.g.:
// {"x:\doc\doc1.doc", "x:\doc\doc2.doc",...,"x:\doc\docn.doc"}.
//
// Please notice:
//**************************************************************
public void wordToPDF() {
string LS_fileName = "";
string LS_fileExtension = "";
string LS_PDF = ".pdf";
try
{
foreach (string Filename in this.Files)
{
LS_fileName = Path.GetFileName( Filename );
if (Path.GetExtension( Filename ) == ".doc" || Path.GetExtension( Filename ) == ".docx")
{
// Convert to PDF:
Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application();
wordDocument = appWord.Documents.Open(GlobalVar.TempFiles + LS_fileName);
LS_fileExtension = Path.GetExtension(Filename);
LS_fileName = LS_fileName.Replace( LS_fileExtension, LS_PDF ); int i = 0;
foreach (string value in this.Files)
{
if (value == Filename)
{
this.Files[i] = this.Files[i].Replace(LS_fileExtension, LS_PDF);
break;
}
i++;
}
wordDocument.ExportAsFixedFormat(GlobalVar.TempFiles + LS_fileName, MSWORD.WdExportFormat.wdExportFormatPDF);
System.Runtime.InteropServices.Marshal.ReleaseComObject(appWord);
}
}
}
catch (Exception ex)
{
Console.WriteLine("getFiles Hello I must be going.");
}
}
}
//UPDATE #1:
public void wordToPDF() {
string LS_fileName = "";
string LS_fileExtension = "";
string LS_PDF = ".pdf";
int i = 0;
MSWORD.Application appWord = new MSWORD.Application();
try
{
foreach (string Filename in this.Files)
{
LS_fileName = Path.GetFileName( Filename );
if (Path.GetExtension( Filename ) == ".doc" || Path.GetExtension( Filename ) == ".docx")
{
// Convert to PDF:
wordDocument = appWord.Documents.Open(GlobalVar.TempFiles + LS_fileName);
LS_fileExtension = Path.GetExtension(Filename);
LS_fileName = LS_fileName.Replace( LS_fileExtension, LS_PDF );
i = 0;
foreach (string value in this.Files)
{
if (value == Filename)
{
this.Files[i] = this.Files[i].Replace(LS_fileExtension, LS_PDF);
break;
}
i++;
}
wordDocument.ExportAsFixedFormat(GlobalVar.TempFiles + LS_fileName, MSWORD.WdExportFormat.wdExportFormatPDF);
}
}
}
catch (Exception ex)
{
Console.WriteLine("getFiles Hello I must be going.");
System.Runtime.InteropServices.Marshal.ReleaseComObject(appWord);
wordDocument.Close();
if (appWord != null)
{
appWord.Quit();
appWord = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(appWord);
wordDocument.Close();
if (appWord != null)
{
appWord.Quit();
appWord = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
//UPDATE #2:
public void wordToPDF()
{
string LS_fileName = "";
string LS_fileExtension = "";
string LS_PDF = ".pdf";
object missingType = Type.Missing;
object SaveChanges = Type.Missing;
object OriginalFormat = Type.Missing;
object RouteDocument = Type.Missing;
MSWORD.Application appWord = new MSWORD.Application();
try
{
foreach (string Filename in this.Files)
{
LS_fileName = Path.GetFileName( Filename );
if (Path.GetExtension( Filename ) == ".doc" || Path.GetExtension( Filename ) == ".docx")
{
// Convert to PDF:
wordDocument = appWord.Documents.Open(GlobalVar.TempFiles + LS_fileName);
LS_fileExtension = Path.GetExtension(Filename);
LS_fileName = LS_fileName.Replace( LS_fileExtension, LS_PDF );
int i = 0;
foreach (string value in this.Files)
{
if (value == Filename)
{
this.Files[i] = this.Files[i].Replace(LS_fileExtension, LS_PDF);
break;
}
i++;
}
wordDocument.ExportAsFixedFormat(GlobalVar.TempFiles + LS_fileName, MSWORD.WdExportFormat.wdExportFormatPDF);
wordDocument.Close();
}
}
}
catch (Exception ex)
{
Console.WriteLine("getFiles Hello I must be going.");
System.Runtime.InteropServices.Marshal.ReleaseComObject(appWord);
if (appWord != null)
{
appWord.Quit();
appWord = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(appWord);
appWord.Quit(ref object SaveChanges = Type.Missing, ref object OriginalFormat);
if (appWord != null)
{
appWord = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
}