PDFCreator的使用心得

Best Deals & Coupons

Store Locations & Hours

Outlet locations & store hours

Best Websites on any topics

Comcast Store Locations

Verizon Store Locations

AT&T Store Locations

Boost Mobile Store Locations


最近写一个程序,涉及到了把Word转换成PDF,开始的时候对这样的应用不熟悉,通过上网搜索最后选择了免费的PDFCreator,它能够把Word,图片,ps等文件转换PDF(支持PDF1.3PDF1.5),其中的转换过程为(1)把文件通过驱动转换成ps文件(2)ps文件通过GhostScriptv8.54 一款postscript语言的解析器)转换成PDF

  下面详细讲述一下如何通过编程接口控制PDFCreator

(1)       首先是安装,PDFCreator没有中文版本,当然你要汉化也没有问题J,首先如果把这个安装程序直接放到你自己的安装程序中,在安装的时候直接调用起来,我认为不太合适,并且用户看了很难接受!有两种方法解决问题:静默安装,由于PDFCreator的安装程序是由InnoSetup制作的,所以参数为/VERYSILENT  /SP-  /NORESTART;第二种方法就是你找到PDFCreator制作安装程序的脚本文件(*.iss),如果你熟悉InnoSetup的脚本的话,可以自己改的,把不要的全部去掉,还可以自己汉化

(2)       安装以后,你就可以使用你的IDE把类型库文件导出(跟其他的不一样,PDFCreator直接从exe导出),这样的话,你就可以针对这个接口进行编程了。主要的两个接口是clsPDFCreatorclsPDFCreatorOptions

2.1:启动PDFCreator虚拟打印机: 

  //创建代理类

FPdfCreator := TclsPDFCreator.Create(nil);

//挂接OneReady事件(事件的作用后面说)

  FPdfCreator.OneReady  := DoeReady;

  //启动虚拟打印机 Parameters= ‘/NoProcessingAtStartup’

  if not FPdfCreator.cStart(Parameters, False) then

  begin

    ShowMessage('虚拟打印机启动不成功,请重新启动电脑后再次尝试!');

    Exit;

  end;

  //把虚拟打印机设置成默认打印机

  FPdfCreator.cDefaultPrinter := cPDFCreatorPrintName;

2.2:设置PDFCreatorOptions参数

procedure SetPDFCreatorOption;

var

  l_Option: _clsPDFCreatorOptions;

begin

  l_OPtion := FPdfCreator.cOptions;

  //是否自动保存(0False,非0True),自动保存,打印才不会弹出对话框

  l_OPtion.UseAutosave := 1;

  //是否使用自动保存的路径

  l_OPtion.UseAutosaveDirectory := 1;

  //自动保存的文件格式(0表示PDF,因为还有其他格式,这里只关注PDF

  l_OPtion.AutosaveFormat := 0;

  //指定自动保存的文件路径

  l_OPtion.AutosaveDirectory := GetExePath + cTempDir;

  //指定自动保存的文件名称

  l_OPtion.AutosaveFilename := cTempFileNameOnly;

  //优先级设置为高,转换更快(1表示低级,2表示高级,3表示实时)

  l_Option.Processpriority := 2;

  FPdfCreator.cOptions := l_Option;

//一定要SaveOptions

  FPdfCreator.cSaveOptions;

  FPdfCreator.cClearCache;

end;

2.3:虚拟打印

    //在开始打印之前必须指定cPrinterStopFalse,表示不是停止状态

FPdfCreator.cPrinterStop := False;

//打印(关于这个,你会发现在打印的过程中,它会把文档先打开,我感觉不好,//所以我在实际中并没有调用它,而是调用文档的打印,比如word接口,默认打印机改成这个,所以也会成功的,并且不会把文档打开,非常好)

FPdfCreator.cPrintFile(FileName);

    oTime.Interval := CMaxTime * 1000;

    oTime.Enabled := True;

    oTime.OnTimer := DoTimer;

FReadyState := False;

//监视打印状态是否为已经完成,再加上一个时限

//比如2分钟还没有完成,认为打印失败

//注意当打印完成时,会调用OneReady事件,改变FReadyState状态

    while (not FReadyState) and oTime.Enabled do

      Application.ProcessMessages;

 

    oTime.Enabled := False;

    if not FReadyState then

    begin

      Result := False;

      ShowMessage(CPrintError);

      Exit;

    end;

FPdfCreator.cPrinterStop := True;

//事件DoeReady,用来挂接PDFCreatorOneReady事件

//如果运行到这个事情,表示已经打印完成。

procedure TWordToPDF.DoeReady(Sender: TObject);

begin

  FPdfCreator.cPrinterStop := True;

  FReadyState := True;

end;

 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值