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

Eri*_*c K 7 .net pdf wpf 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工具栏.

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

WPF*_*-it 7

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

    <Grid>
            <WebBrowser x:Name="WebBrowser1"
                        Source="C:\Temp\Test.pdf"/>
    </Grid>
Run Code Online (Sandbox Code Playgroud)

工作得很好......


Flo*_*011 1

不幸的是,我还没有足够的声誉来发表评论,所以我将其作为答案。我最近在 Flash 方面遇到了非常类似的问题,最终我使用了 WindowsFormsHost 和Overlays/Adorners。只是我的2分钱。

下面是创建一个覆盖层作为弹出窗口的 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>
Run Code Online (Sandbox Code Playgroud)

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

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

非常简单,但是如果仍有不清楚的地方,请随时询问。