在不使用WindowsFormsHost的情况下在WPF中查看PDF

时间:2012-02-09 21:03:41

标签: .net wpf pdf windowsformshost

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

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

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

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

我使用的任何第三方库都需要免费(如啤酒)。

3 个答案:

答案 0 :(得分:7)

如果您的计算机上有IE的某些PDF查看器插件(例如Acrobat Reader)...

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

工作得很好......

答案 1 :(得分:1)

不幸的是我还没有足够的声誉来发表评论,所以我会把它作为答案。 我最近遇到了与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;
        ...
    }

非常简单,但是不要犹豫,问一下是否仍然不清楚。

答案 2 :(得分:0)

我没有找到任何好的免版税第三方WPF控件,效果很好。 Telerik有一个pdf查看器,但它没有做所有类型,也不会为我做好大文件。我也尝试过Syncfusion,这也是错误的。我最终使用WindowsFormsHost与另一个第三方GD图片的Windows窗体查看器。他们说他们正在制作WPF版本。

现在还有其他人需要为每个可能都很好的服务器安装付费,但我无法解决这个问题。