Q&A

  • ShellExecute 를 사용하여 이미지를 출력하려고 합니다.
안녕하세요.
제가 증명서 출력 프로그램을 작성하는 중에, 출력부분에서 막히게 되어서
이렇게 문의드립니다. (이미지 확장명은 jpg 입니다.)

원래, 이미지를 TImage 로 띄워서,

printer.Canvas.Draw(0,0,Image1.Picture.Graphic);

이런 식으로 출력하거나, 퀵레포트내의 QRImage 에 이미지를 올려서 출력하는  식으로
처리했었는데,

2.2MB 를 출력하는데, 프린터 스풀링되는 용량은 32MB 로 너무나 느리게 출력이 되어서
그 방법들은 포기했습니다.

그래서, ShellExecute 를 사용하여,

ShellExecute(GetDesktopWindow,'print',PChar('c:\imsi.jpg'),nil,nil,SW_SHOWNORMAL);

이런 식으로 처리하려고 하는데, 이미지가 "Windows Picture and Fax Viewer" 로 오픈되기만 하고
자동출력은 되지 않습니다.

이미지를 (확장자 jpg) 바로 출력할 수 있는 방법이 없을까요..
해결할 수 있도록 부탁드립니다.
읽어주셔서 감사합니다. 수고하셔요.
5  COMMENTS
  • Profile
    이희진 2007.02.13 17:57
    ShellExcute를 사용하는 건 좋은 해결책이 아닌 것 같습니다.

    printer.Canvas.Draw(0,0,Image1.Picture.Graphic);

    이걸 쓰셨다고 하는데, 출력부분의 코딩을 전체로 올려주셔야 문제점을 알 수 있을 듯 합니다.

    기본적으로 비트맵을 프린트 할 경우, 스풀 사이즈는 비트맵의 파일 사이즈와 일치해야 합니다.

    2.2메가 짜리 비트맵이면 스풀도 2.2메가라는 것이죠.

    코딩 상의 오류일 가능성이 아주 높다고 생각됩니다.

    또한 Draw보다는 CopyRect등의 방식을 쓰셔야 원하는 대로 출력하실 수 있을 겁니다.
  • Profile
    윤지현 2007.02.13 18:49
    답변 감사합니다.

    제가 쓰는 이미지 확장명이 bmp 가 아니라 jpg라서 그런 것 같습니다.

    용량이 확 늘어나는 이유가요.

    제가 쓴 방법은 Image1 에 출력하려는 이미지를 하나 올려놓은 후에,

    printer.BeginDoc;
    printer.Canvas.Draw(0,0,Image1.Picture.Graphic);
    printer.EndDoc;

    이 방법 하나와,

    퀵 레포트를 하나 생성하여, QRImage 위에 이미지를 얹어서 출력하는

        try
             frm_imprint := Tfrm_imprint.Create(Application);
             frm_imprint.QRImage1.Picture.LoadFromFile('c:\imsi.jpg');
             frm_imprint.QuickRep1.Print;
        except
             frm_imprint.Free;
             showmessage(' 출력 도중 에러 발생 ');
             exit;
        end;

    두 가지 방법 다 프린터시 용량이 엄청 커지는 바람에 사용못했습니다.

    님의 말대로 CopyRect 을 한번 사용해보려고 합니다.
    답변 감사드립니다. ^^


  • Profile
    이희진 2007.02.14 22:51
    간단하게 구현해봤으니 참고해보세요.
  • Profile
    윤지현 2007.02.15 00:22
    친절하게 소스까지.. 정말 감사합니다. ^^*

    주신  샘플코드로 실행해봤는데, 여전히 출력할 때 이미지 사이즈 늘어나는건 똑같네요.

    이건 어쩔 수가 없나 봅니다.

    아래 첨부화일로 출력해보면, 스풀링이 2.6M 가 나옵니다.

    실제 화일크기는 63k 인데...

    그러니, 3~4M 되는 것들은 32M 씩 스풀링이 잡히네요. 휴~

    며칠을 검색하고, 여쭤보고, 궁리해보고...

    꼭 써야 하는 프로그램이기에, 포기하지도 못하고 이러고 있네요.

    Shellexecute 를 써서, 알아서 윈도우 프로그램에서 알씨를 쓰던 Windows viewer 를 쓰던

    출력하라고 해야 할까봐요. ㅡ.ㅜ

    같이 고민해주셔서 감사합니다~~
  • Profile
    이희진 2007.02.15 01:57
    프린터 드라이버 설정 문제로 보입니다.
    최신 드라이버인지, 프린터 설정은 어떻게 되어 있는지 확인해보세요.

    또, 기본 프린터를 Microsoft Office Document Image Writer 로 잡고 테스트 해보시구요.
    • 최용일
      2007.02.15 08:39
      안녕하세요. 최용일입니다. 첫번째 같은 경우는 한번도 발생한적이 없어서... Assign만 하면 별문제 없...
    • 이은주
      2007.02.15 22:47
      말씀하신대로 하니까 TImageList 에서의 이미지는 정상적으로 들어가고 뒤에 흰색은 없지만 검정색이 약간 ...
    • 이은주
      2008.12.10 10:35
      컴포넌트를 dev 로 바꾸었는데 이제는 그런 문제가 없군요. 최용일님께 다시 한번 감사 말씀 드립니다. ...
    • 박준철
    • 2007.02.14 10:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이희진
      2007.02.14 22:48
      프로젝트 소스 상에 uses 절에 들어간 순서대로입니다. uses절에서 순서를 정렬하시면 됩니다. ^^ 자...
    • 문혜윤
    • 2007.02.13 18:46
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 착한천사
      2007.02.16 05:56
      착한천사 김경록입니다. 이런것은 SQL-Tunnig에 속하는 것으로 님께서 작성하신 중복 Query문은 1개의 SQ...
    • 최용일
      2007.02.15 02:15
      안녕하세요. 최용일입니다. ORAQuery1의 데이터 한건당 4번의 쿼리를 다시 날리는구조군요. 데이터가 많...
    • 궁금이
    • 2007.02.13 08:47
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 착한천사
      2007.02.16 06:03
      어려운거네요.. 이런거는 흔히 무협지 볼때 많이 봤던건데.. T.T 경험상으론.. 한글 조합형을 완성형...
    • 박성준
      2007.02.13 09:49
      TEmbeddedWB를 사용했을때 Download Option에 이미지를 다운로드 하지 않는 프로퍼티가 있습니다. 이...
    • 이윤희
      2007.02.13 17:56
    • 진석
    • 2007.02.13 03:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2007.02.13 12:34
      안녕하세요. 최용일입니다. in구문은 Project나 Library소스파일에서만 쓸 수 있습니다. 프로젝트별...
    • 윤지현
    • 2007.02.13 02:32
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 이희진
      2007.02.13 17:57
      ShellExcute를 사용하는 건 좋은 해결책이 아닌 것 같습니다. printer.Canvas.Draw(0,0,Image1.Picture....
    • 윤지현
      2007.02.13 18:49
      답변 감사합니다. 제가 쓰는 이미지 확장명이 bmp 가 아니라 jpg라서 그런 것 같습니다. 용량이 확 ...
    • 이희진
      2007.02.14 22:51
      간단하게 구현해봤으니 참고해보세요.
    • 윤지현
      2007.02.15 00:22
      친절하게 소스까지.. 정말 감사합니다. ^^* 주신  샘플코드로 실행해봤는데, 여전히 출력할 ...
    • 이희진
      2007.02.15 01:57
      프린터 드라이버 설정 문제로 보입니다. 최신 드라이버인지, 프린터 설정은 어떻게 되어 있는지 확인해보...
    • 이희진
      2007.02.12 21:26
      네, 별도의 처리를 해주어야 합니다. 윈도우 작업표시줄에 뜨는 건, 어플리케이션의 시스템 메뉴이고, ...
    • 박성준
      2007.02.12 23:53
      처음에 사실 질문이 이해가 되질 않았습니다. ^^;; 그런데, 답변을 보고 검색을 나름대로 해보니 이해했...
    • 이은주
      2007.02.13 08:57
      몇년 넘게 델파이를 쓰면서 이걸 모르고 계속 의문만 가지고 있었네요. 다른 분들도 모르시는 분들이 계실...
    • 박성준
      2007.02.13 09:51
      좀더 몇자 적어보면 저는 개인적으로 델파이사이트를 참고할때 국내 널리알려진 몇군데만 접속하거든요? ...
    • 박동호
    • 2007.02.10 16:54
    • 2 COMMENTS
    • /
    • 0 LIKES
    • Marek
      2007.02.10 21:37
      안녕하세요. 6.5와 2000의 특성보다는 키값의 중복때문입니다. 거래처의 테이블구조를 살펴보시고 키중복...
    • 박동호
      2007.02.15 17:26
      고맙습니다.
    • HEIM(델파리)
      2007.02.15 23:48
      결국 자답을 하게되었네요. 이 문제로 고민하시는 분이 꽤 있으셨더군요. 델파이 용 라이브러리 두개...
    • 모영철
      2007.02.10 02:47
      FreeAndNil(pTimer);
    • 이은주
      2007.02.10 15:20
      감사합니다. 그런데 이게 할당이 밴수에 인스턴스가 생성안된 경우에도 문제가 없는건지 모르겠군요. ass...
    • 모영철
      2007.02.12 20:02
    • 이은주
      2007.02.13 08:47
      ..!
    • Marek
      2007.02.10 21:55
      안녕하세요 델파이 팁&테크에서 GetCurrentUserAndDomain으로 검색하시면 최용일님께서 올린 팁을 찾으실...
    • 낙화
    • 2007.02.09 17:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • sulonge
    • 2007.02.08 22:16
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 착한천사
      2007.02.11 00:51
      음.. "저도 CTRL+마우스 클릭" 이 좋다고 생각합니다. 저는 델4는 기억이 잘 안나고, 델5,6에서는 되었던...
    • 박성준
      2007.02.11 01:22
      View Explorer에 대한 답변을 제가 달긴했어도... 저또한 CTRL+마우스 클릭이 좋다고 생각합니다... 저...
    • 깔쌈보이
      2007.02.09 20:40
      CTRL 키를 누른채로 해당 함수를 마우스로 클릭해보십시오. 델파이 버젼을 얼마를 가지고 계신지 모르겠지...
    • 박성준
      2007.02.08 23:10
      저도 왕초보지만 제가 아는 내용이라 답변 적어봅니다. 제가 사용하는 Delphi 7 Version에선 Shift + C...
    • 델파인
    • 2007.02.08 18:55
    • 2 COMMENTS
    • /
    • 0 LIKES
    • NeoSky
      2007.02.10 19:57
      이렇게 하니깐.. 되네요.  EmbededWB Event에 있습니다. procedure TForm1.EWB1NewWindow2(Se...
    • 박성준
      2007.02.08 20:32
      http://www.delmadang.com/cwb-bin/CrazyWWWBoard.exe?db=dmdqa&mode=read&num=128531&page=1&backdepth=1 ...
    • 이종운
    • 2007.02.08 07:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2007.02.08 21:46
      안녕하세요. 최용일입니다. 1번은 델파이 Bin폴더에 dcc32.exe라고 커맨드라인 컴파일러가 있습니다. 도...
    • 민스맘
    • 2007.02.07 02:45
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 행복맨
      2007.02.09 02:33
      음... 지나가다... 폼의 속성중에 showing 이란 속성으론 해결이 안되나여 ?
    • 박성준
      2007.02.09 03:02
      그게 더 간단할수도 있겠는데요?
    • 석주현
      2007.02.07 07:47
      좀 질문이 애매하네요. 일단 Form 을 Show 하면 Visible 이 True 될 것이고 Close 하면 Visible 이...
    • 민스맘
      2007.02.07 18:44
      Form 을 Close 하면서 Free 하거든요...그래도 과연 그게 될까요?
    • 석주현
      2007.02.09 00:27
      Form을 Free 하면서 Form := nil 해주고 나중에 if Form = nil then 으로 하시면 될 것 같네요. ...