【问题标题】:View a PDF in WPF without using WindowsFormsHost不使用 WindowsFormsHost 在 WPF 中查看 PDF
【发布时间】:2012-03-02 09:17:29
【问题描述】:

是否有任何用于显示 PDF 的原生 WPF 控件?我正在编写一个程序,它将加载一个 PDF 文件,然后在其上显示额外的符号。

使用 WindowsFormsHost (http://hugeonion.com/2009/04/06/displaying-a-pdf-file-within-a-wpf-application/) 将不起作用,因为 WindowsFormsHost 控件始终显示在顶部窗口中的所有其他 WPF 控件。这将不允许在 PDF 上看到我的注释。

将 PDF 转换为具有我需要的缩放细节级别的光栅图像会创建一个太大的文件。

WebBrowser 控件不允许以编程方式更改或缩放页面。我也无法删除 Adob​​e 工具栏。

我使用的任何第三方库都必须是免费的(就像啤酒一样)。

【问题讨论】:

    标签: .net wpf pdf windowsformshost


    【解决方案1】:

    我还没有找到任何运行良好的免版税的第 3 方 WPF 控件。 Telerik 有一个 pdf 查看器,但它不能处理所有类型,也不能很好地为我处理大型文档。我也试过 Syncfusion 的,但也有问题。我最终将 WindowsFormsHost 与另一个 3rd 方 GD 图片的 Windows 窗体查看器一起使用。他们说他们正在制作 WPF 版本。

    现在,您必须为每个可能很好的服务器安装付费,但我无法处理。

    【讨论】:

      【解决方案2】:

      不幸的是,我还没有足够的声誉来发表评论,所以我会把它作为答案。 最近我在使用 Flash 时遇到了非常相似的问题,最终我使用了 WindowsFormsHost 和Overlays/Adorners。只是我的 2cents。

      这里是 XAML 创建一个覆盖作为弹出窗口:

          <Grid>
             <Canvas >
              <WebBrowser  x:Name="wbMain" Width="800" Height="500"></WebBrowser>
              <Popup x:Name="puOverlay" AllowsTransparency="True" Placement="Bottom" PlacementTarget="{Binding ElementName=wbMain}">
                      <Ellipse Canvas.Left="0" Canvas.Top="0" Height="50" Name="headEllipse" Stroke="Black" Fill="Orange" Width="50" Canvas.ZIndex="5"/>
              </Popup>
              <Ellipse Canvas.Left="0" Canvas.Top="0" Height="50" Name="headEllipse1" Stroke="Black" Fill="Orange" Width="50" Canvas.ZIndex="5"/>
               </Canvas>
          </Grid>
      

      为了简单起见,我将叠加层缩小为一个椭圆。 Web 浏览器托管在 WindowsFormsHost 中。 这是放置和显示它的代码:

          public MainWindow()
          {
              InitializeComponent();
              puOverlay.VerticalOffset = -60;
              puOverlay.HorizontalOffset = (wbMain.ActualWidth / 2) - 20;
              puOverlay.IsOpen = true;
              ...
          }
      

      很简单,但是如果还有什么不清楚的地方,请不要犹豫。

      【讨论】:

      • 您介意分享您的示例吗?我在让您的链接中的示例正常工作时遇到了一些麻烦。
      • 我尝试按照本指南中的步骤使用 Adorner:marlongrech.wordpress.com/2008/02/28/… 但 WindowsFormsHost 仍然绘制在顶部。有什么建议吗?
      • 感谢您的示例,但使用 Popup 与链接中描述的 Adorner 技术不同。
      • 你说得对,对不起,我忘记了我最终使用 Popups 作为最快和最简单的方法。
      【解决方案3】:

      前提是您的机器上有一些适用于 IE 的 PDF 查看器插件(例如 Acrobat Reader)...

          <Grid>
                  <WebBrowser x:Name="WebBrowser1"
                              Source="C:\Temp\Test.pdf"/>
          </Grid>
      

      工作得很好......

      【讨论】:

      • 我试过这个,但我似乎无法控制 WebBrowser 来满足我的目的。有关详细信息,请参阅我原来的问题的更新。
      • @Eric K,你想控制什么? WebBrowser可以控制...它提供了可以创造奇迹的HTMLHost接口!
      • 我需要从 PDF ActiveX 插件中删除所有可见的工具栏。我还需要能够缩放 PDF。最后,我需要能够导航到特定页面。我知道 WebBrowser 有一些页面导航,但它特定于 URL 和您的查看历史记录。例如,它不允许您指定特定 PDF 的第 3 页。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      相关资源
      最近更新 更多