PDF 파일을 Viewer로 Load해서 해당 파일이 출력하는데...
한꺼번에 여러개의 파일을 출력하려고 하면,
하나의 파일이 Viewer로 Load 된 후 Spool 중이어서 출력이되기전에
새로운 파일이 Viewer로 Load되어 그 파일을 덮어써 버리면
Spool되는 중이던 앞의 파일은 Spool에서 삭제가 되어 버린답니다.
이런경우 Spooling 다 되기까지 기다렸다
새로운 파일을 Load하도록 처리하는 방법을 찾고 있습니다.
procedure TForm1.Button1Click(Sender: TObject);
var strFile1, strFile2 : string;
i: integer;
begin
strFile1 := 'e:winnta.pdf';
for i :=0 to 2 do
begin
strFile2 := 'e:winnta' + intToStr(i) + '.pdf';
caption := inttostr(i)+ ' ' + strFile2 ;
ListBox1.Items.Add('======= ' + caption + '======= ');
// ListBox1.Items.Add('Copy File');
CopyFile( PCHAR(strFile1), PCHAR(strFile2), FALSE );
//ListBox1.Items.Add('Load File');
Pdf1.LoadFile(strFile2);
//ListBox1.Items.Add('Delete File');
DeleteFile(strFile2);
//ListBox1.Items.Add('Sleep Start');
//sleep(10000);
//ListBox1.Items.Add('Sleep End');
//ListBox1.Items.Add('PrintAll');
Pdf1.PrintAll;
ListBox1.Items.Add('ProcessMessages');
application.ProcessMessages;
end;
end;
제가 할 수 있는 방법은 거의 다 해본듯 합니다.
방법을 알고 계신분들.. 좀 도와주세여...
혹시 저랑 같이 고민해보실 분이시라면,,
저와같은 시행착오를 줄여드리고자 하는 생각에 실패Report를 써놓습니다.
1. 하나의 프로그램에서 하나의 PDF만 출력하는게 가장 좋은 방법이라는 주위의 말씀을 듣고,
FileLoad와 Print를 수행하는 프로그램을 호출해서 출력하는 방법을 사용했습니다.
==> 결 과 : 실패... 삭제되는 출력물은 없었지만, 동시에 여러개의 파일을 스풀링하면
프린터를 물고 죽어버리는 문제가 발생했습니다..
2. 해당 프로그램을 출력해서 스풀링 중에 죽게하지않기위해
자 프로그램을 FormShow할때 앞의 출력이 충분히 스풀링될 수 있도록
Sleep(5000)으로 일정 간격을 주었습니다.
===> 결과 : 실패... 큰 파일은 소용없었습니다.
3. LoadFile를 쓰지않고 PDF.src로 열지않고 바로 출력하도록 시도를 해 보았습니다.
===> 결과 : 실패... 출력물이 중간에 사라지지도 않고, 스풀링속도도 빨라지지만,,,
2개이상이 스풀링 될 때 프린터 죽이는 파괴력(?)은 변함 없었습니다.
PDF파일이 아니라 다른 사람들의 파일이 스풀링될때에도 충돌하면
무조건 프린터를 물고 죽어버립니다... 지가 계란도 아니고....
4. 최소한의 Error를 발생시키기 위한 몸부림으로 WindowsApi에서 LocalPC에서 Printer로
Spool이 완료되었는지 Chk를 해서 Spool이 완료되면
그 다음 출력을 보내는 방법으로 처리를 하려고 하는데,,,
실력이 짧아 이놈의 API를 찾기가 녹녹치 않습니다.
Local PC에서 Spool완료를 알아내는 API 아시는분 답변 좀 주세요....
장황한 글 읽어주셔서 감사합니다....