7

是否有任何用于显示 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 工具栏。

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

4

3 回答 3

7

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

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

工作得很好...

于 2012-02-10T11:15:09.417 回答
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>

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

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

很简单,但是不要犹豫,问是否还有不清楚的地方。

于 2012-02-10T08:14:13.240 回答
0

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

现在还有其他的,你必须为每一个可能很好的服务器安装付费,但我无法处理。

于 2013-06-19T17:36:40.610 回答