|  | @@ -4,10 +4,11 @@ interface
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  uses
 | 
	
		
			
				|  |  |    ProjectData, ReportManager, ReportConnection, ReportPrepare,
 | 
	
		
			
				|  |  | -  PrintComTypeDefUnit, ADODB, DB,
 | 
	
		
			
				|  |  | +  PrintComTypeDefUnit, ADODB, DB, SignReports,
 | 
	
		
			
				|  |  |    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 | 
	
		
			
				|  |  |    Dialogs, sdIDTree, sdDB, ComCtrls, ExtCtrls, VirtualTrees, PrintCom,
 | 
	
		
			
				|  |  | -  PrintComXML, MScrollBox, StdCtrls, Buttons, PNGButton;
 | 
	
		
			
				|  |  | +  PrintComXML, MScrollBox, StdCtrls, Buttons, PNGButton, ieview,
 | 
	
		
			
				|  |  | +  imageenview;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  const
 | 
	
		
			
				|  |  |    crNext = -25;
 | 
	
	
		
			
				|  | @@ -27,6 +28,7 @@ type
 | 
	
		
			
				|  |  |      btnNext: TButton;
 | 
	
		
			
				|  |  |      lblPages: TLabel;
 | 
	
		
			
				|  |  |      pbGenerate: TPNGButton;
 | 
	
		
			
				|  |  | +    ImageEnView1: TImageEnView;
 | 
	
		
			
				|  |  |      procedure FormShow(Sender: TObject);
 | 
	
		
			
				|  |  |      procedure tvReportsClick(Sender: TObject);
 | 
	
		
			
				|  |  |      procedure PreviewComXMLContentDisplay(var contentFontRec: TFontRec;
 | 
	
	
		
			
				|  | @@ -49,6 +51,10 @@ type
 | 
	
		
			
				|  |  |      procedure btnNextClick(Sender: TObject);
 | 
	
		
			
				|  |  |      procedure pbGenerateClick(Sender: TObject);
 | 
	
		
			
				|  |  |    private
 | 
	
		
			
				|  |  | +    FWebProjectID: Integer;
 | 
	
		
			
				|  |  | +    FWebTenderID: Integer;
 | 
	
		
			
				|  |  | +    FSignPhase: Integer;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      FProjectData: TProjectData;
 | 
	
		
			
				|  |  |      // 数据库管理
 | 
	
		
			
				|  |  |      FReportCon: TReportConnection;
 | 
	
	
		
			
				|  | @@ -58,10 +64,17 @@ type
 | 
	
		
			
				|  |  |      FPreviewList: TList;
 | 
	
		
			
				|  |  |      FCurPage: Integer;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    FTempPath: string;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    FPostedSignReports: TSignReports;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      procedure OnViewMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
 | 
	
		
			
				|  |  |      procedure OnViewMouseDown(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    function SafeReportName(var AName: string): Boolean;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      procedure ExportReports(const AFileName: string);
 | 
	
		
			
				|  |  | +    procedure ExportPdfReports(const AFileName: string);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      procedure LoadReportTemplates;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -94,7 +107,8 @@ implementation
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  uses
 | 
	
		
			
				|  |  |    UtilMethods, TemplateManagerHelper, Globals, AuditSelectFrm,
 | 
	
		
			
				|  |  | -  ScFileArchiver, ZhAPI;
 | 
	
		
			
				|  |  | +  ScFileArchiver, ZhAPI, PHPWebDm, imageenio, ReportPdfHelper,
 | 
	
		
			
				|  |  | +  mProgressFrm, RenameSignReportFrm;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  {$R *.dfm}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -116,11 +130,13 @@ end;
 | 
	
		
			
				|  |  |  destructor TSignOnlineReportsForm.Destroy;
 | 
	
		
			
				|  |  |  begin
 | 
	
		
			
				|  |  |    ClearObjects(FPreviewList);
 | 
	
		
			
				|  |  | -  FPreviewList.Free;                 
 | 
	
		
			
				|  |  | +  FPreviewList.Free;
 | 
	
		
			
				|  |  |    FReportCon.Free;
 | 
	
		
			
				|  |  |    FReportDataPrepare.Free;
 | 
	
		
			
				|  |  |    if Assigned(FProjectData) then
 | 
	
		
			
				|  |  |      FProjectData.Free;
 | 
	
		
			
				|  |  | +  if DirectoryExists(FTempPath) then
 | 
	
		
			
				|  |  | +    DeleteFileOrFolder(FTempPath);
 | 
	
		
			
				|  |  |    inherited;
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -140,6 +156,10 @@ procedure TSignOnlineReportsForm.Init(AProjNode: TsdIDTreeNode; ASignPhase: Inte
 | 
	
		
			
				|  |  |    end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  begin
 | 
	
		
			
				|  |  | +  FWebProjectID := GetTopParent(AProjNode).Rec.ValueByName('WebID').AsInteger;
 | 
	
		
			
				|  |  | +  FWebTenderID := AProjNode.Rec.ValueByName('WebID').AsInteger;
 | 
	
		
			
				|  |  | +  FSignPhase := ASignPhase;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    FProjectData := TProjectData.Create;
 | 
	
		
			
				|  |  |    FProjectData.OpenForSignOnline(GetMyProjectsFilePath + AProjNode.Rec.ValueByName('FileName').AsString, ASignPhase);
 | 
	
		
			
				|  |  |    FReportDataPrepare := TReportPrepare.Create(FProjectData);
 | 
	
	
		
			
				|  | @@ -149,6 +169,11 @@ begin
 | 
	
		
			
				|  |  |    Caption := Format('生成签署报表  %s-第 %d 期', [getName(AProjNode), ASignPhase]);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    LoadReportTemplates;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  FTempPath := GetAppTempPath + IntToStr(AProjNode.ID) + '\';
 | 
	
		
			
				|  |  | +  CreateDirectoryInDeep(FTempPath);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + 'sign/list', IntToStr(FWebTenderID), IntToStr(FSignPhase));
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  procedure TSignOnlineReportsForm.LoadReportTemplates;
 | 
	
	
		
			
				|  | @@ -183,11 +208,18 @@ begin
 | 
	
		
			
				|  |  |    if Assigned(tvReports.Selected) then
 | 
	
		
			
				|  |  |    begin
 | 
	
		
			
				|  |  |      vTemplate := TTemplateNode(tvReports.Selected.Data);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    pbGenerate.Visible := Assigned(vTemplate);
 | 
	
		
			
				|  |  | +    cbFillZero.Visible := Assigned(vTemplate);
 | 
	
		
			
				|  |  | +    pnlPageControl.Visible := Assigned(vTemplate);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + 'sign/list', IntToStr(FWebTenderID), IntToStr(FSignPhase));
 | 
	
		
			
				|  |  | +    lblAlreadyUpload.Visible := Assigned(vTemplate) and Assigned(FPostedSignReports.FindSignReport(FSignPhase, vTemplate.TemplateName));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    ReportTemplateManager.Current := vTemplate;
 | 
	
		
			
				|  |  |      if Assigned(vTemplate) then
 | 
	
		
			
				|  |  | -    begin
 | 
	
		
			
				|  |  | -      ReportTemplateManager.Current := vTemplate;
 | 
	
		
			
				|  |  |        LoadTemplateAndDisplay(vTemplate);
 | 
	
		
			
				|  |  | -    end;
 | 
	
		
			
				|  |  | +    tvReports.SetFocus;
 | 
	
		
			
				|  |  |    end;
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -505,14 +537,10 @@ procedure TSignOnlineReportsForm.InitPageSettings(APrintCom: TPrintComXML);
 | 
	
		
			
				|  |  |  begin
 | 
	
		
			
				|  |  |    // 设置页面大小
 | 
	
		
			
				|  |  |    APrintCom.setPageSize(ReportConfig.PageSize);
 | 
	
		
			
				|  |  | -  // 统一纸张大小
 | 
	
		
			
				|  |  | -  APrintCom.PrintPageSizeIdx := DMPAPER_A4;
 | 
	
		
			
				|  |  | -  {
 | 
	
		
			
				|  |  |    if ReportConfig.PageSize = 'A3' then
 | 
	
		
			
				|  |  |      APrintCom.PrintPageSizeIdx := DMPAPER_A3
 | 
	
		
			
				|  |  |    else if ReportConfig.PageSize = 'A4' then
 | 
	
		
			
				|  |  |      APrintCom.PrintPageSizeIdx := DMPAPER_A4;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  |    // 设置边距
 | 
	
		
			
				|  |  |    APrintCom.setEdge(0, '', ReportConfig.LeftEdge/10);
 | 
	
		
			
				|  |  |    APrintCom.setEdge(1, '', ReportConfig.RightEdge/10);
 | 
	
	
		
			
				|  | @@ -936,6 +964,8 @@ begin
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    LoadCursor(crPrevious, GetAppFilePath + 'PreviousPage.cur');
 | 
	
		
			
				|  |  |    LoadCursor(crNext, GetAppFilePath + 'NextPage.cur');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  FPostedSignReports := TSignReports.Create;
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  procedure TSignOnlineReportsForm.msbReportsPreviewMouseWheelDown(
 | 
	
	
		
			
				|  | @@ -1012,17 +1042,51 @@ end;
 | 
	
		
			
				|  |  |  procedure TSignOnlineReportsForm.SetCurPage(const Value: Integer);
 | 
	
		
			
				|  |  |  begin
 | 
	
		
			
				|  |  |    FCurPage := Value;
 | 
	
		
			
				|  |  | -  PreviewPage(TImage(FPreviewList.Items[0]), FCurPage); 
 | 
	
		
			
				|  |  | +  PreviewPage(TImage(FPreviewList.Items[0]), FCurPage);
 | 
	
		
			
				|  |  |    lblPages.Caption := Format('%d/%d', [FCurPage, PreviewComXML.TotalPages]);
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  procedure TSignOnlineReportsForm.pbGenerateClick(Sender: TObject);
 | 
	
		
			
				|  |  |  var
 | 
	
		
			
				|  |  | -  sFileName: string;
 | 
	
		
			
				|  |  | +  sReportName, sZipFile, sPdfFile, sErrorMessage: string;
 | 
	
		
			
				|  |  | +  vInFields, vInValues: array [0..4] of string;
 | 
	
		
			
				|  |  | +  vUpFileFields, vUpFileNames: array [0..1] of string;
 | 
	
		
			
				|  |  |  begin
 | 
	
		
			
				|  |  | -  if SaveFile(sFileName, '.zip') then
 | 
	
		
			
				|  |  | +  sReportName := ReportTemplateManager.Current.TemplateName;
 | 
	
		
			
				|  |  | +  if SafeReportName(sReportName) then
 | 
	
		
			
				|  |  |    begin
 | 
	
		
			
				|  |  | -    ExportReports(sFileName);
 | 
	
		
			
				|  |  | +    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);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    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;
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1056,4 +1120,56 @@ begin
 | 
	
		
			
				|  |  |    end;
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +procedure TSignOnlineReportsForm.ExportPdfReports(const AFileName: string);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  procedure ExportReportPage(APage: Integer; const APageFileName: string);
 | 
	
		
			
				|  |  | +  var
 | 
	
		
			
				|  |  | +    imgEn: TImageEnView;
 | 
	
		
			
				|  |  | +  begin
 | 
	
		
			
				|  |  | +    imgEn := TImageEnView.Create(nil);
 | 
	
		
			
				|  |  | +    try
 | 
	
		
			
				|  |  | +      imgEn.Visible := False;
 | 
	
		
			
				|  |  | +      imgEn.Parent := Self;
 | 
	
		
			
				|  |  | +      imgEn.IO.CreatePDFFile(APageFileName);
 | 
	
		
			
				|  |  | +      imgEn.Bitmap.Height := PreviewComXML.PrintHeight;
 | 
	
		
			
				|  |  | +      imgEn.Bitmap.Width := PreviewComXML.PrintWidth;
 | 
	
		
			
				|  |  | +      PreviewComXML.PrintPreviewCanvas(APage, 0, imgEn.Bitmap.Canvas, False);
 | 
	
		
			
				|  |  | +      imgEn.IO.SaveToPDF;
 | 
	
		
			
				|  |  | +    finally
 | 
	
		
			
				|  |  | +      imgEn.Free;
 | 
	
		
			
				|  |  | +    end;
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +var
 | 
	
		
			
				|  |  | +  ATempFolder: String;
 | 
	
		
			
				|  |  | +  i: Integer;
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +  ATempFolder := GenerateTempFolder(GetTempFilePath);
 | 
	
		
			
				|  |  | +  for i := 1 to PreviewComXML.TotalPages do
 | 
	
		
			
				|  |  | +  begin
 | 
	
		
			
				|  |  | +    ExportReportPage(i, Format('%s\%d.pdf', [ATempFolder, i]));
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +  ZipFolder(ATempFolder, AFileName);
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +function TSignOnlineReportsForm.SafeReportName(var AName: string): Boolean;
 | 
	
		
			
				|  |  | +var
 | 
	
		
			
				|  |  | +  sOrgName: string;
 | 
	
		
			
				|  |  | +  iCount: Integer;
 | 
	
		
			
				|  |  | +  bHasQuest: Boolean;
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +  Result := False;
 | 
	
		
			
				|  |  | +  sOrgName := AName;
 | 
	
		
			
				|  |  | +  iCount := 0;
 | 
	
		
			
				|  |  | +  FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + 'sign/list', IntToStr(FWebTenderID), IntToStr(FSignPhase));
 | 
	
		
			
				|  |  | +  while Assigned(FPostedSignReports.FindSignReport(FSignPhase, AName)) do
 | 
	
		
			
				|  |  | +  begin
 | 
	
		
			
				|  |  | +    Inc(iCount);
 | 
	
		
			
				|  |  | +    AName := Format('%s(%d)', [sOrgName, iCount]);
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +  Result := SameText(sOrgName, AName);
 | 
	
		
			
				|  |  | +  if not Result then
 | 
	
		
			
				|  |  | +    Result := QuestRenameSignReport(AName, FSignPhase);
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  end.
 |