2012-02-09 41 views
6

Có bất kỳ điều khiển WPF gốc nào để hiển thị tệp PDF không? Tôi đang viết một chương trình sẽ tải một tập tin PDF và sau đó hiển thị các ký hiệu phụ trên đầu trang của nó.Xem PDF trong WPF mà không cần sử dụng WindowsFormsHost

Sử dụng WindowsFormsHost (http://hugeonion.com/2009/04/06/displaying-a-pdf-file-within-a-wpf-application/) sẽ không hoạt động vì điều khiển WindowsFormsHost luôn hiển thị trên đầu của tất cả các điều khiển WPF khác trong một cửa sổ. Điều này sẽ không cho phép các ký hiệu của tôi được nhìn thấy qua PDF.

Chuyển đổi PDF thành hình ảnh raster với mức độ chi tiết thu phóng mà tôi cần sẽ tạo một tệp quá lớn.

Điều khiển WebBrowser không cho phép các trang được thay đổi hoặc thu phóng theo chương trình. Tôi cũng không thể gỡ bỏ các thanh công cụ Adobe.

Bất kỳ thư viện của bên thứ ba nào tôi đã sử dụng sẽ cần phải miễn phí (như trong bia).

Trả lời

1

Rất tiếc, tôi không có đủ danh tiếng để đưa ra nhận xét, vì vậy tôi sẽ đặt câu trả lời là một câu trả lời. Tôi đã gặp sự cố rất giống với Flash gần đây và tôi đã sử dụng WindowsFormsHost và Overlays/Adorners. Chỉ cần 2cents của tôi.

Dưới đây là XAML tạo ra lớp phủ như một cửa sổ popup:

<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> 

Vì mục đích đơn giản tôi giảm lớp phủ của tôi để một hình elip. Trình duyệt web được lưu trữ trong WindowsFormsHost. Đây là mã đặt và hiển thị nó:

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

Khá đơn giản, tuy nhiên đừng hỏi liệu có điều gì đó không rõ ràng không.

+0

Tôi sẽ xem xét điều này hôm nay, cảm ơn. –

+0

Bạn có muốn chia sẻ ví dụ của mình không? Tôi gặp một chút rắc rối khi nhận mẫu trong liên kết của bạn để hoạt động chính xác. –

+0

Tôi đã thử sử dụng một Adorner bằng cách làm theo các bước trong hướng dẫn này: http://marlongrech.wordpress.com/2008/02/28/wpf-overlays-or-better-adorner/ nhưng WindowsFormsHost vẫn được vẽ trên đầu trang. Bất kỳ đề xuất? –

6

Với điều kiện là bạn có một số plugin xem PDF (như Acrobat Reader) cho IE trên máy tính của bạn ...

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

công trình tốt ...

+0

Tôi đã thử điều này, nhưng tôi dường như không thể kiểm soát WebBrowser đủ cho mục đích của mình. Xem bản cập nhật cho câu hỏi ban đầu của tôi để biết thêm chi tiết. –

+0

@Eric K, bạn muốn kiểm soát điều gì? WebBrowser có thể được kiểm soát ... nó cung cấp giao diện HTMLHost của nó có thể làm điều kỳ diệu! –

+0

Tôi cần xóa tất cả thanh công cụ có thể nhìn thấy khỏi plugin PDF ActiveX. Tôi cũng cần có khả năng phóng to PDF. Và cuối cùng, tôi cần có khả năng điều hướng đến các trang cụ thể. Tôi biết rằng WebBrowser có một số điều hướng trang, nhưng nó cụ thể cho các URL và lịch sử xem của bạn. Nó không cho phép bạn chỉ định, ví dụ, trang 3 của một tệp PDF cụ thể. –

0

tôi đã không tìm thấy bất kỳ tốt WPF miễn phí của bên thứ 3 kiểm soát hoạt động tốt. Telerik có một trình xem pdf, nhưng nó không làm tất cả các loại và sẽ không làm tài liệu lớn tốt cho tôi. Tôi đã thử Syncfusion là tốt và đó là lỗi quá. Tôi đã kết thúc bằng cách sử dụng WindowsFormsHost với một cửa sổ hình ảnh GD bên thứ 3 khác tạo thành người xem. Họ nói rằng họ đang làm một phiên bản WPF mặc dù.

Bây giờ có những người khác mà bạn phải trả cho mọi cài đặt máy chủ có thể tốt, tôi không thể làm việc với điều đó.

Các vấn đề liên quan