如何在c#应用程序中显示大的pdf

  • 本文关键字:显示 pdf 应用程序 c# pdf
  • 更新时间 :
  • 英文 :


我有一个windows c#应用程序,我想在添加到我的表单中的acrobat.com对象中显示一个位于Web服务器上的pdf文件。

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

由于我的pdf文件很大,应用程序似乎一直挂起,直到加载完整个文件。

我想在用户不认为应用程序挂起的情况下读取大文件。

我会执行以下操作:

  1. 创建另一个线程来导入pdf
  2. 向用户显示某种进度条。也许还有一个取消按钮

三条建议。

第一种方法是打破它,像一些在线书籍一样一次加载一页。这有点烦人,但会节省加载时间。我认为ItextSharp有一些功能可以做到这一点。

第二次尝试压缩。itextsharp也有允许这种的工具

我的第三个建议是看看这个帖子。选择一些书呆子加载短语,并使用动画gif来分散你的客户对长时间加载的注意力。显然,这是最后的手段,但可能有用。

使用工作线程。(例如BackgroundWorker)
MSDN到BackgroundWorker 的链接

如果是PDF。LoadFile必须从UI线程运行,您可以使用HttpWebRequest在BackgroundWorker中下载文件,将其保存在本地,然后在Invoke'd(UI线程)函数中调用pdf.LoadFile()。

显然,如果您可以使用后台线程来进行加载,那么您就完全可以了:

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

可能出现的问题(我从未使用过Acrobat的COM PDF查看器)是PDF对象希望位于UI线程上。在这种情况下,你最终会遇到问题。

最新更新