Просмотр PDF в WPF без использования WindowsFormsHost - PullRequest
7 голосов
/ 10 февраля 2012

Есть ли встроенные элементы управления WPF для отображения PDF-файлов? Я пишу программу, которая загружает файл PDF, а затем отображает дополнительные записи.

Использование WindowsFormsHost (http://hugeonion.com/2009/04/06/displaying-a-pdf-file-within-a-wpf-application/) не будет работать, потому что элемент управления WindowsFormsHost всегда отображается поверх всех других элементов управления WPF в окне. Это не позволит отображать мои записи поверх PDF.

Преобразование PDF в растровое изображение с необходимым уровнем детализации приведет к созданию файла слишком большого размера.

Элемент управления WebBrowser не позволяет программно изменять или изменять страницы. Я также не могу удалить панели инструментов Adobe.

Любые сторонние библиотеки, которые я использовал, должны быть бесплатными (как в пиве).

Ответы [ 3 ]

7 голосов
/ 10 февраля 2012

При условии, что у вас есть какой-нибудь плагин для просмотра PDF (например, Acrobat Reader) для IE на вашем компьютере ...

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

работает просто отлично ...

1 голос
/ 10 февраля 2012

К сожалению, у меня пока недостаточно репутации, чтобы комментировать, поэтому я добавлю это в качестве ответа. Недавно у меня была очень похожая проблема с 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>

Ради простоты я уменьшил оверлей до одного эллипса. Веб-браузер размещен в WindowsFormsHost. Вот код, размещающий и показывающий его:

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

Довольно просто, но не стесняйтесь спрашивать, если что-то все еще неясно.

0 голосов
/ 19 июня 2013

Я не нашел хороших бесплатных сторонних элементов управления WPF, которые бы хорошо работали. У Telerik есть программа просмотра PDF, но она не подходит для всех типов и не подходит для больших документов. Я тоже попробовал Syncfusion, и это тоже глючило. Я закончил тем, что использовал WindowsFormsHost с другим сторонним средством просмотра форм GD-изображений. Они говорят, что делают версию WPF.

Теперь есть другие, которые вы должны платить за каждую установку сервера, которая может быть хорошей, но я просто не могу с этим работать.

...