2017-06-23 79 views
0

我正在使用Xamarin.Forms-UWP。 我想將存儲在數據庫中的字節數組轉換爲Windows手機的pdf。 我知道如何轉換 var base64Binarystr =「ABCDS」 byte [] bytes = Convert.FromBase64String(base64Binarystr);將字節數組轉換爲用於UWP的pdf

任何人都可以幫助如何顯示PDF?只是一個指針 - 我有多個PDF文件,所以我不能將所有文件添加到應用程序或存儲在磁盤上。

欣賞任何關於此的指針。 謝謝!

+0

這個問題是https://stackoverflow.com/questions/44705923/display-local-pdf-file-in-webview-control-displays-blank-pdf-file/ –

+0

只寫字節相關[]臨時文件,並使用您昨天詢問的相同方法顯示它 – Jason

+0

@Jason不幸的是,它不適用於臨時文件。它必須被移到資產或觀衆否認顯示它。不知道爲什麼。沒有時間挖掘它的javascript代碼 –

回答

1

每個收到的文件都可以用相同的名稱存儲(我使用「my.pdf」),那麼存儲的文件太多沒有風險。如果你需要緩存文件,那麼你可以給出不同的名字。雖然我試過ms-appdata,但pdf查看器並不想顯示來自Local,Temp或Downloads文件夾的文件,所以我必須將文件從Local文件夾移動到Assets,以便通過ms- APPX-網絡。 Downloads文件夾在CreationCollisionOption.ReplaceExisting方面也存在問題,如果文件已經存在而不是替換它,但是Local和Temporary文件夾的行爲正確,則它表示無效的參數。

 /////////////// store pdf file from internet, move it to Assets folder and display //////////////////// 
     //bytes received from Internet. Simulated that by reading existing file from Assets folder 
     var pdfBytes = File.ReadAllBytes(@"Assets\Content\samplepdf.pdf"); 
     try 
     { 
      StorageFolder storageFolder = ApplicationData.Current.LocalFolder; //or ApplicationData.Current.TemporaryFolder 
      StorageFile pdfFile = await storageFolder.CreateFileAsync("my.pdf", CreationCollisionOption.ReplaceExisting); 
      //write data to created file 
      await FileIO.WriteBytesAsync(pdfFile, pdfBytes); 
      //get asets folder 
      StorageFolder appInstalledFolder = Windows.ApplicationModel.Package.Current.InstalledLocation; 
      StorageFolder assetsFolder = await appInstalledFolder.GetFolderAsync("Assets"); 
      //move file from local folder to assets 
      await pdfFile.MoveAsync(assetsFolder, "my.pdf", NameCollisionOption.ReplaceExisting); 
     } 
     catch (Exception ex) 
     { 
     } 
     Control.Source = new Uri(string.Format("ms-appx-web:///Assets/pdfjs/web/viewer.html?file={0}", "ms-appx-web:///Assets/my.pdf")); //local pdf 
+0

再次感謝您的幫助!它像冠軍一樣工作! – XamDev

+0

沒問題。祝好運與其餘 –