C#中调用PDFCreator生成PDF文件
在C#中如何调用PDFCreator生成PDF文件呢?
第一步:安装PDFCreator (这个好像是废话)
第二步:创建C#项目,加入PDFCreator.exe COM引用
第三步:参见如下代码:
public override void Process(ITask task, int index)
{
if (!File.Exists(Path.Combine(FromLocation, FromFilename)))
{
throw new FileNotFoundException("File: " + Path.Combine(FromLocation, FromFilename) + " does not exists");
}
Monitor.Enter(lockObject);
clsPDFCreator creator = null;
try
{
creator = new clsPDFCreator();
creator.eError += new __clsPDFCreator_eErrorEventHandler(creator_eError);
creator.eReady += new __clsPDFCreator_eReadyEventHandler(creator_eReady);
String paramters = "/NoProcessingAtStartup";
if (!creator.cStart())
{
throw new Exception("Cannot launch PDFCreator. Error: " + Error);
}
var opt = creator.cOptions;
opt.UseAutosave = 1;
opt.UseAutosaveDirectory = 1;
opt.AutosaveDirectory = this.ToLocation;
opt.AutosaveFormat = 0;
opt.AutosaveFilename = this.ToFilename;
creator.cOptions = opt;
creator.cClearCache();
creator.cDefaultPrinter = "PDFCreator";
if (!creator.cIsPrintable(Path.Combine(FromLocation, FromFilename)))
{
throw new Exception("File: " + Path.Combine(FromLocation, FromFilename) + " is not printable.");
}
creator.cPrintFile(Path.Combine(FromLocation, FromFilename));
creator.cPrinterStop = false;
Ready = false;
var duration = new TimeSpan(0, 0, 0, TimeoutInSec);
DateTime lastCheck = DateTime.Now;
DateTime startTime = lastCheck;
while (!Ready && ((lastCheck - startTime) < duration))
{
System.Threading.Thread.Sleep(500);
lastCheck = DateTime.Now;
}
creator.cPrinterStop = true;
Thread.Sleep(1000);
creator.cClose();
if (!Ready)
{
throw new Exception("PDF creation failed. This maybe due to timeout.");
}
}
finally
{
Monitor.Exit(lockObject);
}
}
void creator_eReady()
{
this.Ready = true;
}
void creator_eError()
{
Error = creator.cError.Description;
}
代码很好懂,自己很懒,没有把代码重新写成一个Project,直接把Project中的代码贴上了,大家要用的话,还要稍微修改一下。要说的一点是PDFCreator不支持多线程,所以如果程序本身是多线程的话,需要在代码中增加一个锁机制,保证PDF生成的调用是单线程的。还有打印机的名字用的是默认值,没有修改,不过这些问题是难不倒各位看官的。
转:https://blog.csdn.net/mcai4gl2/article/details/7294625
private bool PrintIt(int FileTyp, string wordfilepath, string pdfdir, out string pdfnameorerr)
{
try
{
string fname="";
string DefaultPrinter = _PDFCreator.cDefaultPrinter;
FileInfo fi;
PDFCreator.clsPDFCreatorOptions opt;
//for (int i = 0; i < filepath.Length; i++)
//{
fi = new FileInfo(wordfilepath.ToString());
if (fi.Name.Length > 0)
{
if (fi.Name.IndexOf(".") > 1)
{
fname = fi.Name.Substring(0, fi.Name.IndexOf("."));
}
else
{
fname = fi.Name;
}
if (!_PDFCreator.cIsPrintable(fi.FullName))
{
MessageBox.Show("File '" + fi.FullName + "' is not printable!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
opt = _PDFCreator.cOptions;
opt.UseAutosave = 1;
opt.UseAutosaveDirectory = 1;
opt.AutosaveDirectory = pdfdir;
opt.AutosaveFormat = FileTyp;
if (FileTyp == 5)
{
//opt.BitmapResolution = 72;
}
opt.AutosaveFilename = fname;
_PDFCreator.cOptions = opt;
_PDFCreator.cClearCache();
DefaultPrinter = _PDFCreator.cDefaultPrinter;
_PDFCreator.cDefaultPrinter = "PDFCreator";
//_PDFCreator.cVisible = false;
_PDFCreator.cPrintFile(fi.FullName);
_PDFCreator.cPrinterStop = false;
}
ReadyState = false;
timer2.Interval = maxTime * 1000;
timer2.Enabled = true;
while (!ReadyState && timer2.Enabled)
{
Application.DoEvents();
}
timer2.Enabled = false;
_PDFCreator.cPrinterStop = true;
_PDFCreator.cDefaultPrinter = DefaultPrinter;
//System.Threading.Thread.Sleep(5000);
//}
pdfnameorerr = fname;
return true;
}
catch (Exception ex)
{
//IsWordToPdf = false;
pdfnameorerr = ex.Message;
return false;
}
} private bool PrintIt(int FileTyp, string wordfilepath, string pdfdir, out string pdfnameorerr)
{
try
{
string fname="";
string DefaultPrinter = _PDFCreator.cDefaultPrinter;
FileInfo fi;
PDFCreator.clsPDFCreatorOptions opt;
//for (int i = 0; i < filepath.Length; i++)
//{
fi = new FileInfo(wordfilepath.ToString());
if (fi.Name.Length > 0)
{
if (fi.Name.IndexOf(".") > 1)
{
fname = fi.Name.Substring(0, fi.Name.IndexOf("."));
}
else
{
fname = fi.Name;
}
if (!_PDFCreator.cIsPrintable(fi.FullName))
{
MessageBox.Show("File '" + fi.FullName + "' is not printable!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
opt = _PDFCreator.cOptions;
opt.UseAutosave = 1;
opt.UseAutosaveDirectory = 1;
opt.AutosaveDirectory = pdfdir;
opt.AutosaveFormat = FileTyp;
if (FileTyp == 5)
{
//opt.BitmapResolution = 72;
}
opt.AutosaveFilename = fname;
_PDFCreator.cOptions = opt;
_PDFCreator.cClearCache();
DefaultPrinter = _PDFCreator.cDefaultPrinter;
_PDFCreator.cDefaultPrinter = "PDFCreator";
//_PDFCreator.cVisible = false;
_PDFCreator.cPrintFile(fi.FullName);
_PDFCreator.cPrinterStop = false;
}
ReadyState = false;
timer2.Interval = maxTime * 1000;
timer2.Enabled = true;
while (!ReadyState && timer2.Enabled)
{
Application.DoEvents();
}
timer2.Enabled = false;
_PDFCreator.cPrinterStop = true;
_PDFCreator.cDefaultPrinter = DefaultPrinter;
//System.Threading.Thread.Sleep(5000);
//}
pdfnameorerr = fname;
return true;
}
catch (Exception ex)
{
//IsWordToPdf = false;
pdfnameorerr = ex.Message;
return false;
}
}
本文来自博客园,作者:jevan,转载请注明原文链接:https://www.cnblogs.com/DoNetCShap/p/14919381.html

浙公网安备 33010602011771号