델파이

PDF 파일 만들기 (엑셀 OleObject 이용)

미스터몽키 2016. 5. 20. 18:38

PDF 파일 생성하기 위한 방법은 여러가지가 있다.

프린터드라이브를 이용하는 방법도 있다.  

웹에서 php 를 이용한 FPDF 는 처음부터 문서자체를 pdf 파일로 만든다.

그러나 실무에서 처음부터 매번 pdf 파일을 만드는 것 보다 이미 만들어진 양식파일(엑셀, 워드, html) 파일등에 값에 해당하는

자료만 넣어주고  pdf 파일을 로컬에서 만드는 것이 더 효율적일 것 같다.


예를 들어  엑셀파일로 만들어진 거래명세서 양식에 거래처, 품목, 수량 등을 기재하여 pdf 파일로 만들면 훨씬 효율적일 것이다.


var
   ExcelApp, xlWorkBook, xlSheet: OLEVariant;
   tFileName, tS, vFileName: string;
   tReturn : Boolean;
begin
  tFileName :=  ExtractFilePath(Application.ExeName) + 'aTest.xlsx';

  if FileExists(tFileName) = False Then
  begin
    showmessage('"aTest.xlsx" 양식파일이 존재하지 않습니다!');
    exit;
  end;

    ExcelApp := CreateOleObject('Excel.Application');

  try

    ExcelApp.Workbooks.Open(tFileName);
    xlWorkBook := ExcelApp.ActiveWorkBook;
    xlSheet    := xlWorkBook.Sheets['거래명세서'];          //    xlSheet    := xlWorkBook.ActiveSheet; 기본값


    // Data 전달 ********************************************************************
    xlSheet.Cells[15, 2].Value  := '홍기동과장';     

   //Cells속성 이용  [행,열],  열은 "A" 가 1이다.   Value는 기본값이라  xlSheet.Cells[15, 2].Value 처럼 표현안해도 된다.


    tS := 'B16'; // QuotedStr('B16');
    xlSheet.Range[tS].Value  := '가나다주식회사.';   //Range속성 이용  Value는 기본값이라 xlSheet.Range[tS] 처럼 표현해도 된다.

    xlSheet.Cells[17, 2]  := '냉장고';


    //PDF 인쇄 **********************************************************************
     vFileName := ExtractFilePath(Application.ExeName) + 'abc.pdf';


     xlSheet.ExportAsFixedFormat(

                                0      // Type   xlTypePDF = 0, xlTypeXPS = 1
                               , vFileName       // Filename
                               , 0                   // 품질  xlQualityStandard =0,    xlQualityMinimum = 1
                               , True               // 문서정보 포함 여부
                               , False              // 인쇄영역만 인쇄할지
                               , EmptyParam    // 시작페이지 없으면 처음부터,    EmptyParam은 파라미터를 생략할 때 사용
                               , EmptyParam     // 끝페이지 없으면 끝까지
                               , True                // 제작후 디스플에이할지
                               , EmptyParam      // Pointer to the FixedFormatExt class
                                 );



  finally

    ExcelApp.DisplayAlerts := False;     // 저장여부를 경고창  비활성화(안보임)
    ExcelApp.Quit;                       // 종료
    ExcelApp.DisplayAlerts := True       // 저장여부 경고창 다시 활성화

  end;

end;


이제 PDF파일을 열때 암호를 넣는 것만 구현하면 베리베리 굿~