2014-01-20 6 views
2

Я пытаюсь вставить/отобразить PDF в приложении WPF. До сих пор я пытался эти решения, но безуспешно:Вставить PDF в приложение WPF

  1. Отображение PDF в WindowsFormsHost хостинг AxAcroPdf контроль, подобно тому, как это показано here. Проблема в том, что мое приложение устанавливает AllowsTransparency = True, чтобы создать стиль, похожий на Modern UI, но , который не хорошо сочетается с WindowsFormsHost (управление становится невидимым).

  2. Отобразить PDF-файл в элементе управления WebBrowser. Проблема такая же.

  3. Комплект AllowsTransparency = False, но это вызывает вялое ощущение в приложении. Поскольку я использую WPF специально для улучшения внешнего вида наших бизнес-приложений в интересах наших конечных пользователей, это не может быть решением.

  4. Используйте второе окно с AllowsTransparency = False для отображения WindowsFormsHost, и взломать его, чтобы сделать его похожим на дочерний элемент управления главного окна, как это описано here. Тем не менее, мне не нравится подход, основанный на коде, поскольку я использую MVVM.

  5. Найти встроенный элемент управления PDF для WPF. Тем не менее, я нашел только пару коммерческих, и сейчас это не вариант.

Что мне нужно, чтобы быть в состоянии:

  • Отображать PDF или его представление (т.е. изображения или преобразования в другой формат) в приложении WPF.
  • Держите мой стиль визуально неповрежденным и текучим (AllowsTransparency должен оставаться True).
  • Использовать подход, основанный на принципах MVVM (желательно без кода).
  • Включите его в мое приложение бесплатно (для коммерческого использования).

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

+0

Это было отложено, как на основе мнений, но то, что я m, просящий на самом деле обходной путь к известной ошибке WPF *. Я уверен, что на этот вопрос можно ответить «факты, ссылки или конкретные знания». Фактически, уже есть ответ, который соответствует этому описанию. Неужели я прошу «прочный или проверенный подход»? –

ответ

3

Если вы открыты для решений с открытым исходным кодом, я бы порекомендовал GhostScript. Вы можете конвертировать PDF (с порядочным качеством, по большей части) в отдельные файлы изображений в любом формате, с которым вы, возможно, захотите работать.

Другой вариант заключается в преобразовании PDF в HTML с использованием pdf2htmlEX, но в настоящее время он будет компилироваться только для Linux.

Я использую оба вышеупомянутых решения в нескольких приложениях как на Linux, так и на Windows. Преимущество HTML-способа заключается в том, что текст можно скопировать и вставить. Преимущество метода GhostScript заключается в том, что изображения могут быть более портативными (меньше).

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

+3

И вот оболочка Ghostscript для .NET: http://ghostscriptnet.codeplex.com – HABJAN

+1

Я использовал [GhostScriptSharp] (http://www.nuget.org/packages/GhostScriptSharp/) и обернул его в удобном маленьком WPF управление, в котором я могу связать путь к файлу PDF. Он автоматически создает png-файлы из PDF и показывает их в 'ListBox'' Image' в 'ScrollViewer'. Хотя производительность не оптимальна во время генерации png, она по-прежнему делает трюк и сохраняет мою жидкость интерфейса и мой код чистым. Бонус: это решение уменьшает визуальные сбои, связанные с изменением размера/перерисовкой 'WindowsFormsHost'. –

4

У меня есть два решения для этого:

  1. Открыть файл в формате .pdf, а затем распечатать в качестве .xps (также вы должны иметь возможность для doint этого в коде), то этот файл можно embded это файл в вашем приложении и показать его как документ xps. Посмотрите это: Documents in WPF - MSDN - Microsoft (XPS)

  2. Чтобы использовать бесплатную библиотеку, я не очень уверен, что это позволяет показывать pdf, но сгенерировать их, вы можете взглянуть на EO-Pdf.

Надеюсь, что эти советы помогут решить проблему.

1

Существует хорошее решение, которое я использовал ранее, чтобы использовать CefSharp. Это браузер Chrome, поддерживающий предварительный просмотр PDF-документов. quick start page.

Рекомендуется установить Troubleshooting page, если у вас есть проблемы.

Если вы хотите, чтобы показать PDF файлы на локальных дисках вы также должны использовать эти настройки для браузера, а затем использовать file:/// протокол:

CefSharp.BrowserSettings browserSettings = new CefSharp.BrowserSettings(); 
browserSettings.FileAccessFromFileUrls = CefSharp.CefState.Enabled; 
browserSettings.UniversalAccessFromFileUrls = CefSharp.CefState.Enabled; 
browserSettings.TextAreaResize = CefSharp.CefState.Enabled; 
my_bowser.BrowserSettings = browserSettings; 
Смежные вопросы