|  | @@ -8,13 +8,15 @@ uses
 | 
	
		
			
				|  |  |    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 | 
	
		
			
				|  |  |    Dialogs, sdIDTree, sdDB, ComCtrls, ExtCtrls, VirtualTrees, PrintCom,
 | 
	
		
			
				|  |  |    PrintComXML, MScrollBox, StdCtrls, Buttons, PNGButton, ieview,
 | 
	
		
			
				|  |  | -  imageenview, jpeg;
 | 
	
		
			
				|  |  | +  imageenview, jpeg, ConditionalDefines;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  const
 | 
	
		
			
				|  |  |    crNext = -25;
 | 
	
		
			
				|  |  |    crPrevious = -26; 
 | 
	
		
			
				|  |  |    offset = 150;
 | 
	
		
			
				|  |  |  type
 | 
	
		
			
				|  |  | +  TUploadType = (utSign, utEpure);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    TSignOnlineReportsForm = class(TForm)
 | 
	
		
			
				|  |  |      tvReports: TTreeView;
 | 
	
		
			
				|  |  |      pnlBottom: TPanel;
 | 
	
	
		
			
				|  | @@ -29,6 +31,7 @@ type
 | 
	
		
			
				|  |  |      lblPages: TLabel;
 | 
	
		
			
				|  |  |      pbGenerate: TPNGButton;
 | 
	
		
			
				|  |  |      ImageEnView1: TImageEnView;
 | 
	
		
			
				|  |  | +    lblEpureHint: TLabel;
 | 
	
		
			
				|  |  |      procedure FormShow(Sender: TObject);
 | 
	
		
			
				|  |  |      procedure tvReportsClick(Sender: TObject);
 | 
	
		
			
				|  |  |      procedure PreviewComXMLContentDisplay(var contentFontRec: TFontRec;
 | 
	
	
		
			
				|  | @@ -67,6 +70,8 @@ type
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      FTempPath: string;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    FUploadType: TUploadType;
 | 
	
		
			
				|  |  | +    FLoadListUrl: string;
 | 
	
		
			
				|  |  |      FPostedSignReports: TSignReports;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      procedure OnViewMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
 | 
	
	
		
			
				|  | @@ -74,9 +79,13 @@ type
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      function SafeReportName(var AName: string): Boolean;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    procedure ExportReportPage(APage: Integer; const APageFileName: string);
 | 
	
		
			
				|  |  |      procedure ExportReports(const AFileName: string);
 | 
	
		
			
				|  |  |      procedure ExportPdfReports(const AFileName: string);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    procedure GenerateSignReport;
 | 
	
		
			
				|  |  | +    procedure GenerateEpureReport;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      procedure LoadReportTemplates;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      procedure PreviewPage(AImage: TImage; APageIndex: Integer);
 | 
	
	
		
			
				|  | @@ -97,19 +106,25 @@ type
 | 
	
		
			
				|  |  |      destructor Destroy; override;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      procedure Init(AProjNode: TsdIDTreeNode; ASignPhase: Integer);
 | 
	
		
			
				|  |  | +    // 特性初始化
 | 
	
		
			
				|  |  | +    procedure InitForSign;
 | 
	
		
			
				|  |  | +    procedure InitForEpure;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      property ProjectData: TProjectData read FProjectData;
 | 
	
		
			
				|  |  |      property CurPage: Integer read FCurPage write SetCurPage;
 | 
	
		
			
				|  |  |    end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// 在线签署
 | 
	
		
			
				|  |  |  procedure SignOnline(AProjectNode: TsdIDTreeNode; ASignPhase: Integer);
 | 
	
		
			
				|  |  | +// 插入计量草图(中间计量)
 | 
	
		
			
				|  |  | +procedure EpureOnline(AProjectNode: TsdIDTreeNode; AEpurePhase: Integer);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  implementation
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  uses
 | 
	
		
			
				|  |  |    UtilMethods, TemplateManagerHelper, Globals, AuditSelectFrm,
 | 
	
		
			
				|  |  |    ScFileArchiver, ZhAPI, PHPWebDm, imageenio, ReportPdfHelper,
 | 
	
		
			
				|  |  | -  mProgressFrm, RenameSignReportFrm, Math;
 | 
	
		
			
				|  |  | +  mProgressFrm, RenameSignReportFrm, Math, superobject, ProgressHintFrm;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  {$R *.dfm}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -120,12 +135,27 @@ begin
 | 
	
		
			
				|  |  |    vSignForm := TSignOnlineReportsForm.Create(nil);
 | 
	
		
			
				|  |  |    try
 | 
	
		
			
				|  |  |      vSignForm.Init(AProjectNode, ASignPhase);
 | 
	
		
			
				|  |  | +    vSignForm.InitForSign;
 | 
	
		
			
				|  |  |      vSignForm.ShowModal;
 | 
	
		
			
				|  |  |    finally
 | 
	
		
			
				|  |  |      vSignForm.Free;
 | 
	
		
			
				|  |  |    end;
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +procedure EpureOnline(AProjectNode: TsdIDTreeNode; AEpurePhase: Integer);
 | 
	
		
			
				|  |  | +var
 | 
	
		
			
				|  |  | +  vEpureForm: TSignOnlineReportsForm;
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +  vEpureForm := TSignOnlineReportsForm.Create(nil);
 | 
	
		
			
				|  |  | +  try
 | 
	
		
			
				|  |  | +    vEpureForm.Init(AProjectNode, AEpurePhase);
 | 
	
		
			
				|  |  | +    vEpureForm.InitForEpure;
 | 
	
		
			
				|  |  | +    vEpureForm.ShowModal;
 | 
	
		
			
				|  |  | +  finally
 | 
	
		
			
				|  |  | +    vEpureForm.Free;
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  { TSignOnlineReportsForm }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  destructor TSignOnlineReportsForm.Destroy;
 | 
	
	
		
			
				|  | @@ -173,8 +203,6 @@ begin
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    FTempPath := GetAppTempPath + IntToStr(AProjNode.ID) + '\';
 | 
	
		
			
				|  |  |    CreateDirectoryInDeep(FTempPath);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + 'sign/list', FWebTenderID, FSignPhase);
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  procedure TSignOnlineReportsForm.LoadReportTemplates;
 | 
	
	
		
			
				|  | @@ -214,7 +242,7 @@ begin
 | 
	
		
			
				|  |  |      cbFillZero.Visible := Assigned(vTemplate);
 | 
	
		
			
				|  |  |      pnlPageControl.Visible := Assigned(vTemplate);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + 'sign/list', FWebTenderID, FSignPhase);
 | 
	
		
			
				|  |  | +    FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + FLoadListUrl, FWebTenderID, FSignPhase);
 | 
	
		
			
				|  |  |      lblAlreadyUpload.Visible := Assigned(vTemplate) and Assigned(FPostedSignReports.FindSignReport(FSignPhase, vTemplate.TemplateName));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      ReportTemplateManager.Current := vTemplate;
 | 
	
	
		
			
				|  | @@ -1012,29 +1040,6 @@ begin
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  procedure TSignOnlineReportsForm.ExportReports(const AFileName: string);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  procedure ExportReportPage(APage: Integer; const APageFileName: string);
 | 
	
		
			
				|  |  | -  var
 | 
	
		
			
				|  |  | -    bmp: TBitmap;
 | 
	
		
			
				|  |  | -    img: TJPEGImage;
 | 
	
		
			
				|  |  | -  begin
 | 
	
		
			
				|  |  | -    bmp := TBitmap.Create;
 | 
	
		
			
				|  |  | -    img := TJPEGImage.Create;
 | 
	
		
			
				|  |  | -    try
 | 
	
		
			
				|  |  | -      bmp.Height := PreviewComXML.ReportSize.Y;
 | 
	
		
			
				|  |  | -      bmp.Width := PreviewComXML.ReportSize.X;
 | 
	
		
			
				|  |  | -      PreviewComXML.PrintPreviewCanvas(APage, 0, bmp.Canvas, False);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      img.Assign(bmp);
 | 
	
		
			
				|  |  | -      img.CompressionQuality := 100;
 | 
	
		
			
				|  |  | -      img.Compress;
 | 
	
		
			
				|  |  | -      img.SaveToFile(APageFileName);
 | 
	
		
			
				|  |  | -    finally
 | 
	
		
			
				|  |  | -      bmp.Free;
 | 
	
		
			
				|  |  | -      img.Free;
 | 
	
		
			
				|  |  | -    end;
 | 
	
		
			
				|  |  | -  end;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  var
 | 
	
		
			
				|  |  |    ATempFolder: String;
 | 
	
		
			
				|  |  |    i: Integer;
 | 
	
	
		
			
				|  | @@ -1071,55 +1076,11 @@ begin
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  procedure TSignOnlineReportsForm.pbGenerateClick(Sender: TObject);
 | 
	
		
			
				|  |  | -var
 | 
	
		
			
				|  |  | -  sReportName, sZipFile, sPdfFile, sErrorMessage: string;
 | 
	
		
			
				|  |  | -  vInFields, vInValues: array [0..5] of string;
 | 
	
		
			
				|  |  | -  vUpFileFields, vUpFileNames: array [0..1] of string;
 | 
	
		
			
				|  |  |  begin
 | 
	
		
			
				|  |  | -  if PreviewComXML.TotalPages > 200 then
 | 
	
		
			
				|  |  | -  begin
 | 
	
		
			
				|  |  | -    TipMessage('该报表不支持在线签署功能。');
 | 
	
		
			
				|  |  | -    Exit;
 | 
	
		
			
				|  |  | -  end;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  sReportName := ReportTemplateManager.Current.TemplateName;
 | 
	
		
			
				|  |  | -  if SafeReportName(sReportName) then
 | 
	
		
			
				|  |  | -  begin
 | 
	
		
			
				|  |  | -    CreateProgress('上传中,请等待...');
 | 
	
		
			
				|  |  | -    vInFields[0] := 'project';
 | 
	
		
			
				|  |  | -    vInValues[0] := IntToStr(FWebProjectID);
 | 
	
		
			
				|  |  | -    vInFields[1] := 'tender';
 | 
	
		
			
				|  |  | -    vInValues[1] := IntToStr(FWebTenderID);
 | 
	
		
			
				|  |  | -    vInFields[2] := 'phaseno';
 | 
	
		
			
				|  |  | -    vInValues[2] := IntToStr(FSignPhase);
 | 
	
		
			
				|  |  | -    vInFields[3] := 'name';
 | 
	
		
			
				|  |  | -    vInValues[3] := sReportName;
 | 
	
		
			
				|  |  | -    vInFields[4] := 'ownuid';
 | 
	
		
			
				|  |  | -    vInValues[4] := IntToStr(PHPWeb.UserID);
 | 
	
		
			
				|  |  | -    vInFields[5] := 'widhei';
 | 
	
		
			
				|  |  | -    vInValues[5] := Format('%d_%d', [Round(PreviewComXML.ReportSizeDou.X * 10), Round(PreviewComXML.ReportSizeDou.Y * 10)]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    vUpFileFields[0] := 'upfile';
 | 
	
		
			
				|  |  | -    vUpFileNames[0] := GetTempFileName(FTempPath, '.zip');
 | 
	
		
			
				|  |  | -    ExportReports(vUpFileNames[0]);
 | 
	
		
			
				|  |  | -    vUpFileFields[1] := 'upspdf';
 | 
	
		
			
				|  |  | -    vUpFileNames[1] := GetTempFileName(FTempPath, '.pdf');
 | 
	
		
			
				|  |  | -    PdfHelper.ExportAllPages(PreviewComXML, vUpFileNames[1]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if PHPWeb.UploadFiles('sign/create', vInFields, vInValues, vUpFileFields, vUpFileNames, sErrorMessage) then
 | 
	
		
			
				|  |  | -    begin
 | 
	
		
			
				|  |  | -      FPostedSignReports.AddSignReport(FSignPhase, ReportTemplateManager.Current.TemplateName, 234);
 | 
	
		
			
				|  |  | -      lblAlreadyUpload.Visible := True;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      CloseProgress;
 | 
	
		
			
				|  |  | -      TipMessage('上传完成。');
 | 
	
		
			
				|  |  | -    end
 | 
	
		
			
				|  |  | -    else
 | 
	
		
			
				|  |  | -    begin
 | 
	
		
			
				|  |  | -      CloseProgress;
 | 
	
		
			
				|  |  | -      WarningMessage(Format('%s, 上传数据失败,请重试。', [sErrorMessage]));
 | 
	
		
			
				|  |  | -    end;
 | 
	
		
			
				|  |  | -  end;
 | 
	
		
			
				|  |  | +  if FUploadType = utSign then
 | 
	
		
			
				|  |  | +    GenerateSignReport
 | 
	
		
			
				|  |  | +  else if FUploadType = utEpure then
 | 
	
		
			
				|  |  | +    GenerateEpureReport;
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  procedure TSignOnlineReportsForm.OnViewMouseMove(Sender: TObject;
 | 
	
	
		
			
				|  | @@ -1193,7 +1154,7 @@ begin
 | 
	
		
			
				|  |  |    Result := False;
 | 
	
		
			
				|  |  |    sOrgName := AName;
 | 
	
		
			
				|  |  |    iCount := 0;
 | 
	
		
			
				|  |  | -  FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + 'sign/list', FWebTenderID, FSignPhase);
 | 
	
		
			
				|  |  | +  FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + FLoadListUrl, FWebTenderID, FSignPhase);
 | 
	
		
			
				|  |  |    while Assigned(FPostedSignReports.FindSignReport(FSignPhase, AName)) do
 | 
	
		
			
				|  |  |    begin
 | 
	
		
			
				|  |  |      Inc(iCount);
 | 
	
	
		
			
				|  | @@ -1207,7 +1168,201 @@ end;
 | 
	
		
			
				|  |  |  procedure TSignOnlineReportsForm.cbFillZeroClick(Sender: TObject);
 | 
	
		
			
				|  |  |  begin
 | 
	
		
			
				|  |  |    PreviewComXML.FillZero := cbFillZero.Checked;
 | 
	
		
			
				|  |  | -  PreviewPage(TImage(FPreviewList.Items[0]), FCurPage);
 | 
	
		
			
				|  |  | +  if Assigned(FPreviewList) and (FPreviewList.Count > 0) then
 | 
	
		
			
				|  |  | +    PreviewPage(TImage(FPreviewList.Items[0]), FCurPage);
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +procedure TSignOnlineReportsForm.InitForEpure;
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +  Caption := '插入计量草图';
 | 
	
		
			
				|  |  | +  FUploadType := utEpure;
 | 
	
		
			
				|  |  | +  lblEpureHint.Visible := True;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  FLoadListUrl := 'sign/list';
 | 
	
		
			
				|  |  | +  FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + FLoadListUrl, FWebTenderID, FSignPhase);
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +procedure TSignOnlineReportsForm.InitForSign;
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +  Caption := '在线签署';
 | 
	
		
			
				|  |  | +  FUploadType := utSign;
 | 
	
		
			
				|  |  | +  lblEpureHint.Visible := False;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  FLoadListUrl := 'sign/list';
 | 
	
		
			
				|  |  | +  FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + FLoadListUrl, FWebTenderID, FSignPhase);
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +procedure TSignOnlineReportsForm.GenerateEpureReport;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function CreateOnlineEpureReport(const AReportName: string; var AResult: string): Boolean;
 | 
	
		
			
				|  |  | +  var
 | 
	
		
			
				|  |  | +    sgsParam: TStrings;
 | 
	
		
			
				|  |  | +    sMessage: string;
 | 
	
		
			
				|  |  | +    iResult: Integer;
 | 
	
		
			
				|  |  | +  begin
 | 
	
		
			
				|  |  | +    Result := False;
 | 
	
		
			
				|  |  | +    sgsParam := TStringList.Create;
 | 
	
		
			
				|  |  | +    try
 | 
	
		
			
				|  |  | +      sgsParam.Add(Format('project=%d', [FWebProjectID]));
 | 
	
		
			
				|  |  | +      sgsParam.Add(Format('tender=%d', [FWebTenderID]));
 | 
	
		
			
				|  |  | +      sgsParam.Add(Format('phaseno=%d', [FSignPhase]));
 | 
	
		
			
				|  |  | +      sgsParam.Add(Format('name=%s', [AReportName]));
 | 
	
		
			
				|  |  | +      sgsParam.Add(Format('ownuid=%d', [PHPWeb.UserID]));
 | 
	
		
			
				|  |  | +      sgsParam.Add(Format('widhei=%d_%d', [Round(PreviewComXML.ReportSizeDou.X * 10), Round(PreviewComXML.ReportSizeDou.Y * 10)]));
 | 
	
		
			
				|  |  | +      sgsParam.Add(Format('totalnum=%d', [PreviewComXML.TotalPages]));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      iResult := PHPWeb.UrlGet(PHPWeb.MeasureURL + 'intermediate/create', sgsParam, AResult);
 | 
	
		
			
				|  |  | +      case iResult of
 | 
	
		
			
				|  |  | +        0: WarningMessage('网络错误:' + AResult);
 | 
	
		
			
				|  |  | +        -1: WarningMessage('网络错误:无法连接到云端');
 | 
	
		
			
				|  |  | +      end;
 | 
	
		
			
				|  |  | +      Result := (iResult = 1) and (AResult <> '');
 | 
	
		
			
				|  |  | +    finally
 | 
	
		
			
				|  |  | +      sgsParam.Free;
 | 
	
		
			
				|  |  | +    end;
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function UploadEpureReport(const ASignid, AMd5_sign: string): Boolean;
 | 
	
		
			
				|  |  | +  var
 | 
	
		
			
				|  |  | +    ATempFolder, sFileName, sMessage: String;
 | 
	
		
			
				|  |  | +    vInFields, vInValues: array [0..1] of string;
 | 
	
		
			
				|  |  | +    vUpFileFields, vUpFileNames: array [0..0] of string;
 | 
	
		
			
				|  |  | +    i: Integer;
 | 
	
		
			
				|  |  | +  begin
 | 
	
		
			
				|  |  | +    Result := False;
 | 
	
		
			
				|  |  | +    ATempFolder := GenerateTempFolder(GetTempFilePath);
 | 
	
		
			
				|  |  | +    vInFields[0] := 'signid';
 | 
	
		
			
				|  |  | +    vInValues[0] := ASignid;
 | 
	
		
			
				|  |  | +    vInFields[1] := 'md5_sign';
 | 
	
		
			
				|  |  | +    vInValues[1] := AMd5_sign;
 | 
	
		
			
				|  |  | +    ShowProgressHint('正在上传数据...', PreviewComXML.TotalPages);
 | 
	
		
			
				|  |  | +    try
 | 
	
		
			
				|  |  | +      for i := 1 to PreviewComXML.TotalPages do
 | 
	
		
			
				|  |  | +      begin
 | 
	
		
			
				|  |  | +        sFileName := Format('%s\%d.jpg', [ATempFolder, i]);
 | 
	
		
			
				|  |  | +        ExportReportPage(i, sFileName);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        vUpFileFields[0] := 'imediate';
 | 
	
		
			
				|  |  | +        vUpFileNames[0] := sFileName;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if not PHPWeb.UploadFiles('intermediate/upload', vInFields, vInValues, vUpFileFields, vUpFileNames, sMessage) then
 | 
	
		
			
				|  |  | +        begin
 | 
	
		
			
				|  |  | +          WarningMessage(sMessage);
 | 
	
		
			
				|  |  | +          Abort;
 | 
	
		
			
				|  |  | +        end;
 | 
	
		
			
				|  |  | +        UpdateProgressPosition(i);
 | 
	
		
			
				|  |  | +      end;
 | 
	
		
			
				|  |  | +      Result := True;
 | 
	
		
			
				|  |  | +    finally
 | 
	
		
			
				|  |  | +      CloseProgressHint;
 | 
	
		
			
				|  |  | +      DeleteFileOrFolder(ATempFolder);
 | 
	
		
			
				|  |  | +    end;
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +var
 | 
	
		
			
				|  |  | +  sReportName, sResult: string;
 | 
	
		
			
				|  |  | +  vJ: ISuperObject;
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +  sReportName := ReportTemplateManager.Current.TemplateName;
 | 
	
		
			
				|  |  | +  if SafeReportName(sReportName) then
 | 
	
		
			
				|  |  | +  begin
 | 
	
		
			
				|  |  | +    if CreateOnlineEpureReport(sReportName, sResult) then
 | 
	
		
			
				|  |  | +    begin
 | 
	
		
			
				|  |  | +      try
 | 
	
		
			
				|  |  | +        vJ := SO(sResult);
 | 
	
		
			
				|  |  | +        if UploadEpureReport(vJ['signid'].AsString, vJ['md5_sign'].AsString) then
 | 
	
		
			
				|  |  | +          TipMessage('上传完成。');
 | 
	
		
			
				|  |  | +      finally
 | 
	
		
			
				|  |  | +        FPostedSignReports.AddSignReport(FSignPhase, ReportTemplateManager.Current.TemplateName, PHPWeb.UserID);
 | 
	
		
			
				|  |  | +        lblAlreadyUpload.Visible := True;
 | 
	
		
			
				|  |  | +        vJ := nil;
 | 
	
		
			
				|  |  | +      end;
 | 
	
		
			
				|  |  | +    end;
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +procedure TSignOnlineReportsForm.GenerateSignReport;
 | 
	
		
			
				|  |  | +var
 | 
	
		
			
				|  |  | +  sReportName, sZipFile, sPdfFile, sErrorMessage: string;
 | 
	
		
			
				|  |  | +  vInFields, vInValues: array [0..5] of string;
 | 
	
		
			
				|  |  | +  vUpFileFields, vUpFileNames: array [0..1] of string;
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +  if not _IsDebugView and (PreviewComXML.TotalPages > 200) then
 | 
	
		
			
				|  |  | +  begin
 | 
	
		
			
				|  |  | +    TipMessage('该报表不支持在线签署功能。');
 | 
	
		
			
				|  |  | +    Exit;
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  sReportName := ReportTemplateManager.Current.TemplateName;
 | 
	
		
			
				|  |  | +  if SafeReportName(sReportName) then
 | 
	
		
			
				|  |  | +  begin
 | 
	
		
			
				|  |  | +    CreateProgress('上传中,请等待...');
 | 
	
		
			
				|  |  | +    vInFields[0] := 'project';
 | 
	
		
			
				|  |  | +    vInValues[0] := IntToStr(FWebProjectID);
 | 
	
		
			
				|  |  | +    vInFields[1] := 'tender';
 | 
	
		
			
				|  |  | +    vInValues[1] := IntToStr(FWebTenderID);
 | 
	
		
			
				|  |  | +    vInFields[2] := 'phaseno';
 | 
	
		
			
				|  |  | +    vInValues[2] := IntToStr(FSignPhase);
 | 
	
		
			
				|  |  | +    vInFields[3] := 'name';
 | 
	
		
			
				|  |  | +    vInValues[3] := sReportName;
 | 
	
		
			
				|  |  | +    vInFields[4] := 'ownuid';
 | 
	
		
			
				|  |  | +    vInValues[4] := IntToStr(PHPWeb.UserID);
 | 
	
		
			
				|  |  | +    vInFields[5] := 'widhei';
 | 
	
		
			
				|  |  | +    vInValues[5] := Format('%d_%d', [Round(PreviewComXML.ReportSizeDou.X * 10), Round(PreviewComXML.ReportSizeDou.Y * 10)]);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    vUpFileFields[0] := 'upfile';
 | 
	
		
			
				|  |  | +    vUpFileNames[0] := GetTempFileName(FTempPath, '.zip');
 | 
	
		
			
				|  |  | +    ExportReports(vUpFileNames[0]);
 | 
	
		
			
				|  |  | +    vUpFileFields[1] := 'upspdf';
 | 
	
		
			
				|  |  | +    vUpFileNames[1] := GetTempFileName(FTempPath, '.pdf');
 | 
	
		
			
				|  |  | +    PdfHelper.ExportAllPages(PreviewComXML, vUpFileNames[1]);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if PHPWeb.UploadFiles('sign/create', vInFields, vInValues, vUpFileFields, vUpFileNames, sErrorMessage) then
 | 
	
		
			
				|  |  | +    begin
 | 
	
		
			
				|  |  | +      FPostedSignReports.AddSignReport(FSignPhase, ReportTemplateManager.Current.TemplateName, PHPWeb.UserID);
 | 
	
		
			
				|  |  | +      lblAlreadyUpload.Visible := True;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      CloseProgress;
 | 
	
		
			
				|  |  | +      TipMessage('上传完成。');
 | 
	
		
			
				|  |  | +    end
 | 
	
		
			
				|  |  | +    else
 | 
	
		
			
				|  |  | +    begin
 | 
	
		
			
				|  |  | +      CloseProgress;
 | 
	
		
			
				|  |  | +      WarningMessage(Format('%s, 上传数据失败,请重试。', [sErrorMessage]));
 | 
	
		
			
				|  |  | +    end;
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +procedure TSignOnlineReportsForm.ExportReportPage(APage: Integer;
 | 
	
		
			
				|  |  | +  const APageFileName: string);
 | 
	
		
			
				|  |  | +var
 | 
	
		
			
				|  |  | +  bmp, bmpCut: TBitmap;
 | 
	
		
			
				|  |  | +  img: TJPEGImage;
 | 
	
		
			
				|  |  | +  iCutHeight, iCutWidth, iCutTop, iCutLeft, iCutRight, iCutBottom: Integer;
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +  bmp := TBitmap.Create;
 | 
	
		
			
				|  |  | +  bmpCut := TBitmap.Create;
 | 
	
		
			
				|  |  | +  img := TJPEGImage.Create;
 | 
	
		
			
				|  |  | +  try
 | 
	
		
			
				|  |  | +    bmp.Height := PreviewComXML.ReportSize.Y;
 | 
	
		
			
				|  |  | +    bmp.Width := PreviewComXML.ReportSize.X;
 | 
	
		
			
				|  |  | +    PreviewComXML.PrintPreviewCanvas(APage, 0, bmp.Canvas, False);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    iCutHeight := Round(PreviewComXML.ReportSize.Y / 200);
 | 
	
		
			
				|  |  | +    iCutWidth := Round(PreviewComXML.ReportSize.X / 200);
 | 
	
		
			
				|  |  | +    bmpCut.Height := PreviewComXML.ReportSize.Y - iCutHeight * 2;
 | 
	
		
			
				|  |  | +    bmpCut.Width := PreviewComXML.ReportSize.X - iCutWidth * 2;
 | 
	
		
			
				|  |  | +    bmpCut.Canvas.CopyRect(Rect(0, 0, bmpCut.Width, bmpCut.Height), bmp.Canvas, Rect(iCutWidth, iCutHeight, bmp.Width - iCutWidth, bmp.Height - iCutHeight));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    img.Assign(bmpCut);
 | 
	
		
			
				|  |  | +    img.CompressionQuality := 100;
 | 
	
		
			
				|  |  | +    img.Compress;
 | 
	
		
			
				|  |  | +    img.SaveToFile(APageFileName);
 | 
	
		
			
				|  |  | +  finally
 | 
	
		
			
				|  |  | +    bmpCut.Free;
 | 
	
		
			
				|  |  | +    bmp.Free;
 | 
	
		
			
				|  |  | +    img.Free;
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  end.
 |