2017-06-23 48 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

没问题。祝好运与其余 –