2012-02-09 2 views
6

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

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

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

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

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

ответ

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> 

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

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

Довольно просто, однако, не стесняйтесь спросить, если что-то до сих пор неясно.

+0

Я рассмотрю это сегодня, спасибо. –

+0

Не могли бы вы поделиться своим примером? У меня немного проблемы с тем, чтобы образец в вашей ссылке работал правильно. –

+0

Я попытался использовать Adorner, выполнив шаги, описанные в этом руководстве: http://marlongrech.wordpress.com/2008/02/28/wpf-overlays-or-better-adorner/, но WindowsFormsHost все еще был нарисован сверху. Какие-либо предложения? –

6

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

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

прекрасно работает ...

+0

Я пробовал это, но я не могу контролировать WebBrowser достаточно для своих целей. Дополнительную информацию см. В обновлении к моему оригинальному вопросу. –

+0

@ Эрик К. Что вы хотите контролировать? WebBrowser можно контролировать ... он предоставляет свой интерфейс HTMLHost, который может творить чудеса! –

+0

Мне нужно удалить все видимые панели инструментов из плагина PDF ActiveX. Мне также нужно иметь возможность масштабировать PDF. И, наконец, мне нужно иметь возможность перемещаться по определенным страницам. Я знаю, что WebBrowser имеет некоторую навигацию по страницам, но он специфичен для URL-адресов и истории просмотров. Это не позволяет указать, например, страницу 3 конкретного PDF. –

0

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

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

Смежные вопросы