將office檔和tif檔轉化為pdf檔(C#代碼)
来源:互联网 发布:网络借贷管理暂行办法 编辑:程序博客网 时间:2024/06/11 15:29
參考網址:
Microsoft.Office.Interop.PowerPoint Namespace
http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.aspx
Microsoft.Office.Interop.Word Namespace
http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.aspx
Microsoft.Office.Interop.Excel Namespace
http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.aspx
首先需要引用word、excel、powerpoint的dll以及office.dll
using Word = Microsoft.Office.Interop.Word;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Excel = Microsoft.Office.Interop.Excel;
安裝Bullzip PDF Printer(將office轉化為pdf)和ImageMagick(將tif轉化為pdf)
主要代碼
#region doc、xls、ppt、tiff格式转换函数
private string ConvertPpt2Pdf(string sourceFile)
{
if (!File.Exists(sourceFile))
{
throw new Exception(string.Format("File not found:{0}", sourceFile));
}
string strDir = Path.GetDirectoryName(sourceFile);
string currentTime = DateTime.Now.ToString("yyyyMMddHHmmssfff");
string psFileName = string.Format("{0}//{1}.ps", strDir, currentTime);
string pdfFileName = string.Format("{0}//{1}.pdf", strDir, currentTime);
string FileNameWithoutExtension = Path.GetFileNameWithoutExtension(sourceFile);
string resultPdfFileName = string.Format("{0}//{1}.pdf", strDir, FileNameWithoutExtension);
PowerPoint.ApplicationClass powerpoint = null;
powerpoint.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
PowerPoint.Presentation ppt = null;
string pageNum = null;
try
{
powerpoint = new PowerPoint.ApplicationClass();
ppt = powerpoint.Presentations.Open(sourceFile,
Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoTrue,
Microsoft.Office.Core.MsoTriState.msoFalse);
string oldPrinter = ppt.PrintOptions.ActivePrinter;
ppt.PrintOptions.ActivePrinter = "Bullzip PDF Printer";
pageNum = ppt.Slides.Count.ToString();
Response.Write("The number of pages in ppt is {0} " + pageNum);
ppt.PrintOut(-1, -1, psFileName, 1, Microsoft.Office.Core.MsoTriState.msoTrue);
ppt.PrintOptions.ActivePrinter = oldPrinter;
int t = 5;
while (!File.Exists(psFileName) && t > 0)
{
System.Threading.Thread.Sleep(100);
t--;
}
int i = 3;
long currentLength = 0;
string length = null;
while (i > 0)
{
currentLength = new FileInfo(psFileName).Length;
if (currentLength == 0)
continue;
if (length == currentLength.ToString())
{
i--;
}
else
{
length = currentLength.ToString();
}
System.Threading.Thread.Sleep(200);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
finally
{
if (ppt != null)
{
ppt.Close();
ppt = null;
}
if (powerpoint != null)
{
powerpoint.Quit();
powerpoint = null;
}
}
try
{
if (File.Exists(psFileName))
{
ConvertPs2Pdf(psFileName);
}
System.Threading.Thread.Sleep(1000);
if (File.Exists(psFileName))
{
while (IsFileInUse(psFileName))
{
System.Threading.Thread.Sleep(100);
}
File.Delete(psFileName);
}
if (File.Exists(pdfFileName))
{
while (IsFileInUse(pdfFileName))
{
System.Threading.Thread.Sleep(100);
}
File.Move(pdfFileName, resultPdfFileName);
}
}
catch (Exception ex)
{
}
finally
{
if (!File.Exists(resultPdfFileName))
{
int n = 20;
while (!File.Exists(pdfFileName) && n > 0)
{
System.Threading.Thread.Sleep(100);
n--;
}
if (File.Exists(pdfFileName))
{
while (IsFileInUse(pdfFileName))
{
System.Threading.Thread.Sleep(100);
}
File.Delete(pdfFileName);
}
}
}
return resultPdfFileName;
}
private string ConvertXls2Pdf(string sourceFile)
{
if (!File.Exists(sourceFile))
throw new Exception(string.Format("File not found:{0}", sourceFile));
string strDir = Path.GetDirectoryName(sourceFile);
string currentTime = DateTime.Now.ToString("yyyyMMddHHmmssfff");
string psFileName = string.Format("{0}//{1}.ps", strDir, currentTime);
string pdfFileName = string.Format("{0}//{1}.pdf", strDir, currentTime);
string FileNameWithoutExtension = Path.GetFileNameWithoutExtension(sourceFile);
string resultPdfFileName = string.Format("{0}//{1}.pdf", strDir, FileNameWithoutExtension);
object UpdateLinks = new object[] { 2 };
object;
object Format = System.Reflection.Missing.Value;
object Password = System.Reflection.Missing.Value;
object WriteResPassword = System.Reflection.Missing.Value;
object IgnoreReadOnlyRecommended = false;
object Origin = Excel.XlPlatform.xlWindows;
object Delimiter = System.Reflection.Missing.Value;
object Editable = false;
object Notify = true;
object Converter = System.Reflection.Missing.Value;
object AddToMru = System.Reflection.Missing.Value;
object Local = System.Reflection.Missing.Value;
object CorruptLoad = System.Reflection.Missing.Value;
object From = System.Reflection.Missing.Value;
object To = System.Reflection.Missing.Value;
object Copies = System.Reflection.Missing.Value;
object Preview = System.Reflection.Missing.Value;
object ActivePrinter = "Bullzip PDF Printer";
object PrintToFile = true;
object Collate = true;
object PrToFileName = psFileName;
object SaveChanges = false;
// string pageNum = null;
Excel.Application excel = null;
Excel.Workbook xls = null;
try
{
excel = new Excel.Application();
xls = excel.Workbooks.Open(sourceFile, UpdateLinks, ReadOnly, Format, Password,
WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable,
Notify, Converter, AddToMru, Local, CorruptLoad);
//MessageBox.Show("count: " + xls.Worksheets.Count.ToString());
// pageNum = xls.Application.ExecuteExcel4Macro("Get.Document(50)").ToString();
// Response.Write("The number of pages in xls is {0} " + pageNum);
//MessageBox.Show("VPageBreaks count: " + xls.Worksheets.VPageBreaks.get_Item(1).);
//xls.Worksheets.HPageBreaks.Add(Excel.Range);
// MessageBox.Show("HPageBreaks count: " + xls.Worksheets.HPageBreaks.Count.ToString());
// xls.Worksheets.VPageBreaks.Add(Excel.Range);
// MessageBox.Show("VPageBreaks count: " + xls.Worksheets.VPageBreaks.Count.ToString());
xls.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName);
int t = 5;
while (!File.Exists(psFileName) && t > 0)
{
System.Threading.Thread.Sleep(100);
t--;
}
int i = 3;
long currentLength = 0;
string length = null;
while (i > 0)
{
currentLength = new FileInfo(psFileName).Length;
if (currentLength == 0)
continue;
if (length == currentLength.ToString())
{
i--;
}
else
{
length = currentLength.ToString();
}
System.Threading.Thread.Sleep(200);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
finally
{
if (xls != null)
{
xls.Close(SaveChanges, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
xls = null;
}
if (excel != null)
{
excel.Quit();
excel = null;
}
}
try
{
if (File.Exists(psFileName))
{
ConvertPs2Pdf(psFileName);
}
System.Threading.Thread.Sleep(1000);
if (File.Exists(psFileName))
{
while (IsFileInUse(psFileName))
{
System.Threading.Thread.Sleep(100);
}
File.Delete(psFileName);
}
if (File.Exists(pdfFileName))
{
while (IsFileInUse(pdfFileName))
{
System.Threading.Thread.Sleep(100);
}
File.Move(pdfFileName, resultPdfFileName);
}
}
catch (Exception ex)
{
}
finally
{
if (!File.Exists(resultPdfFileName))
{
int n = 20;
while (!File.Exists(pdfFileName) && n > 0)
{
System.Threading.Thread.Sleep(100);
n--;
}
if (File.Exists(pdfFileName))
{
while (IsFileInUse(pdfFileName))
{
System.Threading.Thread.Sleep(100);
}
File.Delete(pdfFileName);
}
}
}
return resultPdfFileName;
}
private string ConvertDoc2Pdf(string sourceFile)
{
if (!File.Exists(sourceFile))
throw new Exception(string.Format("File not found:{0}", sourceFile));
string strDir = Path.GetDirectoryName(sourceFile);
string currentTime = DateTime.Now.ToString("yyyyMMddHHmmssfff");
string psFileName = string.Format("{0}//{1}.ps", strDir, currentTime);
string pdfFileName = string.Format("{0}//{1}.pdf", strDir, currentTime);
string FileNameWithoutExtension = Path.GetFileNameWithoutExtension(sourceFile);
string resultPdfFileName = string.Format("{0}//{1}.pdf", strDir, FileNameWithoutExtension);
object objPsFile = (object)psFileName;
object background = false;
object PageType = Word.WdPrintOutPages.wdPrintAllPages;
object printToFile = true;
object collate = true;
object append = false;
object copies = false;
object range = Word.WdPrintOutRange.wdPrintAllDocument;
object missing = System.Reflection.Missing.Value;
Word._Application word = null;
object fileName = sourceFile;
object SaveChanges = false;
Word.Document doc = null;
//int pageNum = 0;
try
{
// 打开Word文档
word = new Word.Application();
doc = word.Documents.Open(ref fileName,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing);
string oldPrinter = doc.Application.ActivePrinter;
doc.Application.ActivePrinter = "Bullzip PDF Printer";
//Word.WdStatistic stat = Word.WdStatistic.wdStatisticPages;
// pageNum = doc.ComputeStatistics(stat, ref missing);
// Response.Write("The number of pages in doc is {0} " + pageNum.ToString());
// Word文档打印到Ps文件
doc.PrintOut(ref background, ref append, ref range, ref objPsFile, ref missing, ref missing,
ref missing, ref missing, ref missing, ref PageType, ref printToFile, ref collate, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing);
doc.Application.ActivePrinter = oldPrinter;
int t = 5;
while (!File.Exists(psFileName) && t > 0)
{
System.Threading.Thread.Sleep(100);
t--;
}
int i = 3;
long currentLength = 0;
string length = null;
while (i > 0)
{
currentLength = new FileInfo(psFileName).Length;
if (currentLength == 0)
continue;
if (length == currentLength.ToString())
{
i--;
}
else
{
length = currentLength.ToString();
}
System.Threading.Thread.Sleep(200);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
finally
{
if (doc != null)
{
doc.Close(ref SaveChanges, ref missing, ref missing);
doc = null;
}
if (word != null)
{
word.Quit(ref SaveChanges, ref missing, ref missing);
word = null;
}
}
try
{
if (File.Exists(psFileName))
{
ConvertPs2Pdf(psFileName);
}
System.Threading.Thread.Sleep(1000);
if (File.Exists(psFileName))
{
while (IsFileInUse(psFileName))
{
System.Threading.Thread.Sleep(100);
}
File.Delete(psFileName);
}
if (File.Exists(pdfFileName))
{
while (IsFileInUse(pdfFileName))
{
System.Threading.Thread.Sleep(200);
}
File.Move(pdfFileName, resultPdfFileName);
}
}
catch (Exception ex)
{
}
finally
{
/*if (File.Exists(psFileName))
{
int t = 10;
while (IsFileInUse(psFileName) && t > 0)
{
System.Threading.Thread.Sleep(100);
t--;
}
File.Delete(psFileName);
}*/
if (!File.Exists(resultPdfFileName))
{
int n = 20;
while(!File.Exists(pdfFileName) && n > 0)
{
System.Threading.Thread.Sleep(100);
n--;
}
if (File.Exists(pdfFileName))
{
while (IsFileInUse(pdfFileName))
{
System.Threading.Thread.Sleep(100);
}
File.Delete(pdfFileName);
}
}
}
return resultPdfFileName;
}
// Ps转PDF
public void ConvertPs2Pdf(string psFile)
{
Process objProcess = new Process();
objProcess.StartInfo.CreateNoWindow = true;
objProcess.StartInfo.UseShellExecute = true;
objProcess.StartInfo.FileName = "ps2pdf14";
objProcess.StartInfo.Arguments = psFile;
objProcess.Start();
// objProcess.WaitForExit();
}
// tiff转PDF
public string ConvertTif2Pdf(string sourceFile)
{
string strDir = Path.GetDirectoryName(sourceFile);
string FileNameWithoutExtension = Path.GetFileNameWithoutExtension(sourceFile);
string currentTime = DateTime.Now.ToString("yyyyMMddHHmmssfff");
string SourceFileNameToChange = string.Format("{0}//{1}.tif", strDir, currentTime);
string pdfFileName = string.Format("{0}//{1}.pdf", strDir, currentTime);
if (File.Exists(sourceFile))
{
File.Move(sourceFile, SourceFileNameToChange);
}
string resultPdfFileName = string.Format("{0}//{1}.pdf", strDir, FileNameWithoutExtension);
Process objProcess = new Process();
objProcess.StartInfo.CreateNoWindow = true;
objProcess.StartInfo.UseShellExecute = true;
objProcess.StartInfo.FileName = "/"C://Program Files//ImageMagick-6.5.7-Q16//convert/""; //需要先安裝ImageMagick
objProcess.StartInfo.Arguments = Path.GetFileName(SourceFileNameToChange) + " " + Path.GetFileName(pdfFileName);
objProcess.StartInfo.WorkingDirectory = strDir;
objProcess.Start();
objProcess.WaitForExit();
if (File.Exists(pdfFileName))
{
File.Move(pdfFileName, resultPdfFileName);
}
if (File.Exists(SourceFileNameToChange))
{
File.Move(SourceFileNameToChange, sourceFile);
}
return resultPdfFileName;
}
public bool IsFileInUse(string fileName)
{
bool inUse = true;
if (File.Exists(fileName))
{
FileStream fs = null;
try
{
fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None);
inUse = false;
}
catch (Exception e)
{
Console.WriteLine(e.Message.ToString());
}
finally
{
if (fs != null)
{
fs.Close();
}
}
return inUse; //true表示正在使用,false没有使用
}
else
{
return false; //文件不存在则一定没有被使用
}
}
#endregion
- 將office檔和tif檔轉化為pdf檔(C#代碼)
- 將office檔和tif檔轉化為pdf檔(C#代碼)
- 用BullzipPDFPrinter和GhostScript將office檔轉化為pdf檔
- C# Office 在线转PDF
- jpg和tif转pdf遇到的问题和解决方法
- 转换pdf-->tif
- pdf to tif
- C#调用OFFICE 2007 转换PDF
- C# office 文档转换成pdf
- C#调用OFFICE 2007 转换PDF
- tif 转pdf 通过iTextSharp
- C#使用指定打印机打印Word,Excel等Office文件和打印PDF文件的代码
- C#将Word转换成PDF方法总结(基于Office和WPS两种方案)
- C#简单实现office转pdf、pdf转图片
- C#简单实现office转pdf、pdf转图片
- c#读写tif文件,分割tif文件
- wince6.0 支持office和pdf
- java操作office和pdf文件
- 想法---关于梦
- Linux和Windows双系统:先装Ubuntu后装Windows的引导问题
- 路由器DSCP target
- ubuntu 开机启动命令行模式
- 爱普生EPSON打印机 ME1+ (ME1)清零软件及方法
- 將office檔和tif檔轉化為pdf檔(C#代碼)
- android之动画(一)通过AnimationDrawable控制逐帧动画
- MAXScript101_2.5 Expressions
- 爱普生EPSON打印机 ME1+ (ME1)清零软件及方法
- Win Unix Mac 等多种系统平台的宏定义
- 已知IE窗口的句柄,如何由此得到IHTMLdocument2接口?
- 爱普生EPSON打印机 ME1+ (ME1)清零软件及方法
- poj 1195 Mobile phones
- GNU AS