איך להשתמש ב-pdf.js לפתיחת קבצי pdf מהמחשב ב-C#
-
במהלך חיפושי אחרי ספרייה שימושית להצגת מסמכי PDF, נתקלתי ב-pdf.js — מציג ה-PDF של פיירפוקס, שהוא גם חינמי.
עם זאת, ישנה בעיה: בגלל הגבלות בטיחות של דפדפנים, לא ניתן לטעון את הקורא באופן ישיר. מצאתי פתרון בנושא כאן, שבו מוצע להשתמש בקוד הבא:
private async void PDFjsViewerWebView_CoreWebView2Initialized(WebView2 sender, CoreWebView2InitializedEventArgs args) { string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); sender.CoreWebView2.SetVirtualHostNameToFolderMapping("pdfjs", path, CoreWebView2HostResourceAccessKind.DenyCors); PDFjsViewerWebView.Source = new("https://pdfjs/web/viewer.html"); }
הקוד עובד מצוין והקורא נטען בהצלחה. כעת, אני נתקלתי בבעיה — איך אני טוען מסמך לוקאלי דרך הקורא?
-
לבינתיים מצאתי פתרון לא מושלם אבל זה עובד:
יש להעתיק את הקובץ לתוך תיקיית ה-web ומשם אפשר לפתוח אותו (עיין כאן) מצו"ב דוגמא מלאה:
אני מקווה שאולי מישהו שמבין באמת בנושא יוכל להצביע על הפונציה הנצרכת ברור לי שיש משהו כזה כי יש כפתור שפותח קבצים.public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); webView.CoreWebView2InitializationCompleted += Browser_CoreWebView2InitializationCompleted; webView.EnsureCoreWebView2Async(); } private void Browser_CoreWebView2InitializationCompleted(object? sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e) { string appPath = AppDomain.CurrentDomain.BaseDirectory; string fullPath = Path.Combine(appPath, "pdfjs"); webView.CoreWebView2.SetVirtualHostNameToFolderMapping("pdfjs", fullPath, CoreWebView2HostResourceAccessKind.DenyCors); } private void OpenPdfButton_Click(object sender, RoutedEventArgs e) { var openFileDialog = new Microsoft.Win32.OpenFileDialog { Filter = "PDF Files (*.pdf)|*.pdf", Title = "Select a PDF File" }; if (openFileDialog.ShowDialog() == true) { string filePath = openFileDialog.FileName; string appPath = AppDomain.CurrentDomain.BaseDirectory; string targetPath = Path.Combine(appPath, "pdfjs", "web", Path.GetFileName(filePath)); try { // Copy the selected PDF file to the pdfjs folder File.Copy(filePath, targetPath, true); // Open the copied file in the PDF viewer string fileUri = new Uri($"https://pdfjs/web/viewer.html?file={Path.GetFileName(filePath)}").AbsoluteUri; webView.Source = new Uri(fileUri);; } catch (Exception ex) { MessageBox.Show($"Error copying file: {ex.Message}"); } } } }