2008-10-08 3 views
0

나는 윈도우 C# 응용 프로그램을 가지고 있으며 웹 서버에있는 pdf 파일을 Acrobat 양식의 개체에 추가하고 싶습니다.C# 응용 프로그램에 큰 PDF를 표시하려면 어떻게합니까?

pdf.loadfile(@"http://somewhere.com/nowwhere.pdf") 

내 pdf 크기가 커서 전체 파일이로드 될 때까지 응용 프로그램이 멈춘 것 같습니다.

사용자가 응용 프로그램이 중단되었다는 인식하에 대형 파일을 읽고 싶습니다.

답변

1

세 가지 제안을.

처음에는 온라인 설명서처럼 페이지를로드하고 중단해야합니다. 이것은 약간 짜증나지만 로딩 시간을 줄여 줄 것입니다. 나는 ItextSharp가 이것을 할 수있는 몇 가지 기능을 가지고 있다고 생각한다.

두 번째 시도 압축. 다시 itextsharp에는 이것을 허용하는 도구가 있습니다

제 3의 제안은 This thread을 확인하는 것입니다. 몇 가지 괴상한 로딩 구문을 선택하고 애니메이션 GIF를 사용하여 클라이언트를 긴 로딩 시간에서 산만하게하십시오. 분명히 이것은 최후의 수단이지만 유용 할 수 있습니다.

3

(예를 들어 BackgroundWorker에) :

  1. PDF를 가져올 다른 스레드를 만듭니다.
  2. 사용자에게 일종의 진행률 표시 줄을 표시합니다. 취소 버튼이있는 것 같습니다.

    Pdf pdf; 
    
    void ShowPdf() { 
        if (this.InvokeRequired) { 
        this.Invoke(() => this.ShowPdf()); 
        } 
        // give pdf a window... 
    } 
    
    void LoadPdf() { 
        System.Threading.ThreadPool.QueueUserWorkItem(() => { 
         pdf.LoadFile("http://example.com/somelarge.pdf"); 
         this.ShowPdf(); 
        }); 
    } 
    
    이 올 수 있다는 문제는 (내가 함께 일한 적이

    : - 당신은 로딩을 할 수있는 백그라운드 스레드를 사용할 수 있는지 분명히

+0

COM 개체는 UI 스레드에서 실행해야 # 1이 불가능하고 # 2도 차단되어야합니다. – user7116

+0

나는 UI 객체를 필요로하는 COM 객체의 오류를 본 적이 없습니다. 어떤 경우에 이런 일이 일어날 것입니까? – RWendi

0

, 모든 세트 것 Acrobat의 COM PDF 뷰어)는 PDF 개체가 UI 스레드에 있어야한다는 것입니다. 이 경우 문제가 발생할 것입니다.

1

PDF.LoadFile을 UI 스레드에서 실행해야하는 경우 HttpWebRequest를 사용하여 BackgroundWorker에서 파일을 다운로드하고 로컬에 저장 한 다음 Invoke'd (UI 스레드) 함수에서 pdf.loadfile()을 호출 할 수 있습니다.

관련 문제