Как отобразить большой PDF-файл в приложении C #? - PullRequest
0 голосов
/ 09 октября 2008

У меня есть приложение для Windows c #, и я хочу отобразить файл PDF, расположенный на веб-сервере, в объекте acrobat com, добавленном в мою форму.

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

Поскольку мой pdf большой, приложение, кажется, зависает, пока не загружен весь файл.

Я хочу прочитать большой файл, чтобы пользователь не чувствовал, что приложение зависло.

Ответы [ 6 ]

3 голосов
/ 09 октября 2008

Я бы сделал следующее:

  1. Создайте другую ветку для импорта PDF.
  2. Отображать какой-то индикатор выполнения пользователю. возможно с кнопкой отмены.
1 голос
/ 09 октября 2008

Если PDF.LoadFile должен запускаться из потока пользовательского интерфейса, вы можете загрузить файл в BackgroundWorker с помощью HttpWebRequest, сохранить его локально, а затем вызвать pdf.loadfile () в функции Invoke'd (поток пользовательского интерфейса).

1 голос
/ 09 октября 2008

Использовать рабочий поток. (Например, BackgroundWorker)
MSDN Ссылка на BackgroundWorker

1 голос
/ 09 октября 2008

Три предложения.

первым было бы сломать его и загрузить страницу за раз, как это делают некоторые онлайн-книги. Это немного раздражает, но сэкономит вам время загрузки. Я думаю, что ItextSharp имеет некоторую функциональность, чтобы сделать это.

Вторая попытка сжатия. И снова у itextsharp есть инструменты, которые позволяют это

Мое третье предложение - проверить В этой теме . выберите несколько всевозможных фраз загрузки и используйте анимированный GIF, чтобы отвлечь вашего клиента от долгого времени загрузки Очевидно, что это последнее средство, но может пригодиться.

1 голос
/ 09 октября 2008

Извините, кода нет, но эта статья об асинхронном файловом вводе-выводе может вам помочь:

http://www.devsource.com/c/a/Using-VS/Making-Asynchronous-File-IO-Work-in-NET-A-Survival-Guide/

0 голосов
/ 09 октября 2008

Очевидно, что если вы можете использовать фоновый поток для загрузки - все будет в порядке:

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();
   });
}

Проблема, с которой может возникнет (я никогда не работал с программой просмотра PDF COM в Acrobat), заключается в том, что объект PDF должен находиться в потоке пользовательского интерфейса. В этом случае у вас возникнут проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...