合同套合同 电子合同的实现

2023-11-28 23:13:00 来源 : haohaofanwen.com 投稿人 : admin

下面是好好范文网小编收集整理的合同套合同 电子合同的实现,仅供参考,欢迎大家阅读!

合同套合同

合同电子化,以方便和规范对合同的管理,实现合同签订、审批的流程化管理,满足管理信息化的要求。

将合同中变化的部分抽取出来,通过系统(用Delphi开发)录入数据库,借助审批流完成对合同的审批,最后转到打印管理员处打印、盖章。

一、实现方法一:WORD方式

用Word排版,将变化的部分用变量代替;在程序中通过COM操作Word,完成对变量的替换。保存成PDF文档,在客户端打印。

优点:对WORD版的合同,梢做改动即可使用,且WORD的普及率很高。

缺点:要求每台电脑上都要有WORD,且是安装版,不是简化版。后来把对WORD的处理和生成PDF放在服务器上完成,这虽然解决了对WORD的依赖,但是却带来效率的低下。由于多人同时生成合同,等待时间可能会较长。好在合同的签订量不大,也不太集中。COM技术操作Word的代码如下。

function TdmSrvr.CreateCompact2018PDF(Cds1:TDataSet;  var PDFile: string): Boolean;

var

I:Integer;

imgSample: TImage;

vWord, vDoc: OleVariant;

FileName,CompactBarCode,CompactID: string;

lReturn: Boolean;

procedure DocReplace(sText, sReplace: string);

begin

lReturn := True;

while lReturn do //找到并替代成功则返回 True 共11个参数

lReturn := vDoc.Range.Find.Execute(sText, , , , , , , , , sReplace,True);

function GetFieldValue(aFT: TField): String;

begin

if (aFT.DataType = ftDate) or (aFT.DataType = ftDateTime) then

begin

if aFT.IsNull then Result := '  年  月   日'

else Result := FormatDateTime('YYYY年MM月DD日', aFT.AsDateTime);

else Result := aFT.AsString;

begin

CompactID := Cds1.FieldByName('compactid').AsString;

imgSample := TImage.Create(nil);//生成合同编号的条形码

imgSample.Height := 46;

imgSample.Width := 104;

CompactBarCode := ExePath + CompactID + '.bmp';

FileName := ExePath + 'uploadhetong';

DrawBarCodeEAN13(imgSample, CompactID);

imgSample.Update;

imgSample.Picture.SaveToFile( CompactBarCode );

try

vWord := CreateOleObject('Word.Application'); //创建Word线程

vDoc := vWord.Documents.Open(FileName);

//这就是加放入图片的语句 cell(1,2)表示第一行第2列的地方

vDoc.tables.item(1).cell(2,2).range.InlineShapes.AddPicture(CompactBarCode,False, True);

//通过WORD的条形码控件实现,但是显示效果不好,太小。改为插入图片的方式

//vDoc.BarCodeCtrl1.Value := Cds1.FieldByName('CompactID').AsString;

vDoc.Select; //选取中整个文档

for I := 0 to Cds1.FieldCount - 1 do//用字段名做文档中的变量

DocReplace(Cds1.Fields[i].FieldName, GetFieldValue(cds1.Fields[i]));

PDFile := ExePath + CompactID + '.pdf';

vDoc.ExportAsFixedFormat(PDFile, 17);

Result := True;

finally

imgSample.Free;

vWord.Quit(False); //退出Word,不保存

Sleep(500);

二、实现方法二:网页方式。

利用HTML标签,定义各种格式,作为模板。当作文本文件处理,用程序动态生成网页,通过WebBrower控件显示并打印。这种方式没有尝试。

三、实现方法三:报表方式

用RM7.0可以支持HTML语法,太方便了。之前的版本2、3系列不支持,要实现不同的字体,需要分隔成多个MEMO控件。有了HTML语法的支持,可以直接用<b>来加粗,<h1>来指定字号,或者用font属性。一个页面一个MEMO控件就可以实现了,大大减化了设计的工作量。

这是最理想的实现方式。生成23页的报表不到一秒,而用WORD方式需要7秒,更重要的是这种方式脱离了WORD的依赖。

报表做成了,预览很漂亮,在惊喜之余,却发现好多行头有标点符号,这是不符合文档要求的。就开始摸索RM的功能,后来发现设置属性WordBreak就可以实现,只是有个遗憾。就是如果行尾是标点,则上一行最后一个字跑到下一行的行头了,用这种方式避免行头是标点符号,这样上一行最后就会有一个位置闲置。


相关文章

    暂无相关信息
专题分类