Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[10176] 이미지출력시 인쇄가 안되는 경우가 있습니다.
chaconne [] 2257 읽음    2005-08-03 17:45
안녕하세요

OS는 XP 델파이는 6버전을 사용하고 있습니다.

프린터는 Epson N2500 과 HP 컬러 레이저젯이고요.

jpg 화일로 되어있는 이미지를 인쇄하고 있는데요.

이미지가 인쇄가 안되는 경우가 발생하여 문의합니다.

- 인쇄대상
  
    인쇄하려고 하는 대상은 B5용지에 이미지 두개 (각각 500KB정도)이고

    결과에 따라 인쇄할 이미지가 각각 다르므로 파일은 대략 1000개에서 2개를 선택해야합니다.

    그리고 한번 인쇄할때 인쇄하는 장수는 300장정도입니다.

- 사용한 방법

   첫번째 사용한 방법은 퀵리포트를 사용하여
 
   DetailBefore 이벤트에 출력하려고 할 이미지를 동적으로 QRImage1, QRImage2 에 넣고 출력하였습니다. 

   위경우 300장 출력시 10장정도가 이미지가 인쇄또는 부분인쇄(하나의 이미지만 출력됨)되는 현상이

   발생합니다.

   두번째 사용한 방법은 퀵리포트를 전혀 사용하지 않고 TPrinter만 이용하여

   StretchDIBits 함수를 사용하여 출력하였습니다.

   위경우는 어느정도(때에따라 다름) 좌우 이미지가 다 출력되다가 갑자기 인쇄속도가 빨라지면서

    이미지가 하나만 출력되는 현상이 발생합니다.

     첫번째 경우는 랜덤하게 인쇄가 안되거나 부분인쇄가 되는 반면

     두번째 경우는 한번 이미지가 부분인쇄가 되면 그 뒤로는 계속 부분인쇄가 된다는 것입니다.

혹시 원인이나 해결책 아시는 분은 답변 부탁드립니다.

이미지 인쇄하는 부분의 소스는 다음과 같습니다.

procedure TfrmGAC74B_1.PrintBmp(ARect: TRect; ABitmap: TBitmap);
var
Info: PBitmapInfo;
InfoSize: DWORD;
Image: Pointer;
ImageSize: DWORD;
Bits: HBITMAP;
DIBWidth, DIBHeight: Longint;
begin
   Canvas.Lock;
   try
     with Printer, Canvas do
      begin
        Bits := ABitmap.Handle;
        GetDIBSizes( Bits, InfoSize, ImageSize );
        Info := AllocMem( InfoSize );
        try
          Image := AllocMem( ImageSize );
          try
            GetDIB( Bits, ABitmap.Palette, Info^, Image^ );
            with Info^.bmiHeader do
             begin
               DIBWidth := biWidth;
               DIBHeight := biHeight;
            end;
            StretchDIBits(  Printer.Canvas.Handle,
                         ARect.Left, ARect.Top, ARect.Right, ARect.Bottom,
                              0, 0, DIBWidth, DIBHeight,
                              Image, Info^, DIB_RGB_COLORS, SRCCOPY );
          finally
            FreeMem( Image, ImageSize );
          end;
        finally
          FreeMem( Info, InfoSize );
        end;
      end;
   finally
     Canvas.Unlock;
   end;
end;


procedure TfrmGAC74B_1.PrintP(AKind, AID : string);
var
  APIC : TBITMAP;
  MyBMP : TImage;
  MyJPEG : TJPEGImage;
  i : Integer;
  sPath, sPath1, sPath2, sDir : String;
begin
//이미지 경로는 여기서 결정됩니다. (AKind와 AID를 이용하여)
    sPath1 := sDir + MakeNumStrF( nSequence3 , 3)+ '.Jpg';
    sPath2 := sDir + MakeNumStrF( nSequence4 , 3)+ '.Jpg';
//이미지 경로는 여기서 결정됩니다.

  MyJPEG := TJPEGImage.Create;
  MyBMP := TImage.Create(Self);
  APIC := TBitmap.Create;
  try
    MyJPEG.LoadFromFile(sPath1);
    MYBMP.Picture.Bitmap.Assign(MyJPEG);
    APIC.Assign(MYBMP.Picture);
    PrintBmp(Rect(350,3600,1550,900),APIC);
    printer.Canvas.TextOut( 1000 + EXX , 2000 + EYY, sPath1);

    MyJPEG.LoadFromFile(sPath2);
    MYBMP.Picture.Bitmap.Assign(MyJPEG);
    APIC.Assign(MYBMP.Picture);
    PrintBmp(Rect(2200,3600,1550,900),APIC);
    printer.Canvas.TextOut( 1000 + EXX , 2100 + EYY, sPath2);
  finally
    MyJPEG.Free;
    MyBMP.Free;
    APIC.Free;
  end;
end;

날 더운데 여름 잘 보내세요

+ -

관련 글 리스트
10176 이미지출력시 인쇄가 안되는 경우가 있습니다. chaconne 2257 2005/08/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.