none
win8 app中调用第三方应用打开pdf,word ,excel文件出现乱码?求教! RRS feed

  • 问题

  • 在win8 app中通过Launcher调用第三方应用打开pdf,word ,excel文件,对于本地文档库里的事没有问题,可以正常显示。但当文件是远端设备的时候,就会出现两个问题:

    1:pdf,word格式的内容显示时标题会出现乱码,内容却显示是正常的。下面是图

    2:只要是远端设备的文件格式是.xlsx怎么都没办法调用到地三方应用,包括excel,和explore都不没反应,不知道为什么?求教!

    一下是一些代码

     StorageFile file = null;
                if ("远端")
                {
                    Uri uri = new Uri("http://"  + info.FileUrl, UriKind.Absolute);

                    file = await StorageFile.CreateStreamedFileFromUriAsync(info.FileName, uri, null);
                }
                else
                    file = await StorageFile.GetFileFromPathAsync(info.FileUrl);
                LauncherOptions options = new LauncherOptions();
                options.DisplayApplicationPicker = true;
                options.UI.PreferredPlacement = Placement.Below;

                bool action = await Launcher.LaunchFileAsync(file, options);

    2013年6月5日 10:05

答案

  • Hi,

    先下载再打开,还可以到其下载位置查看下载的文档,并打开测试.确定文件url是否正如您所想(中文情形),在指定文件名时查看中文名的情形,你可以测试打开的文件名为System.IO.Path.GetFileName(uri.AbsoluteUri),或者指定文件名测试。

    Uri uri = new Uri("http://..../test.docx");

    var file = await ApplicationData.Current.RoamingFolder.CreateFileAsync(System.IO.Path.GetFileName(uri.AbsoluteUri), CreationCollisionOption.ReplaceExisting);

    var downloader = new Windows.Networking.BackgroundTransfer.BackgroundDownloader();

    var download = downloader.CreateDownload(uri, file);

    var res = await download.StartAsync();
    if (file != null)
    {
     
    var urlOptions = new Windows.System.LauncherOptions();
      urlOptions
    .TreatAsUntrusted = false;
      await
    Windows.System.Launcher.LaunchFileAsync(file, urlOptions);
    }

    Regards,

    Jenny


    2013年6月13日 7:45

全部回复

  • HI Billy-NuoYan

    关于打开PDF文件名乱码其实是因为你的info.FileName没有转化成为UTF8的形式,你可以把info.FileName写成英文的或者网上去找一个转化的代码以解决第一个问题。

    第二个问题可能是因为你info.FileName里面的后缀没有设置好,需要写成"xxx.xlsx",我测试写的一段代码可以运行,如下。如果还是不行的话可能是因为excel没有正确关联后缀把。

    Uri uri = new Uri("http://YourAddress.xlsx"); string name = "123.xlsx"; file = await StorageFile.CreateStreamedFileFromUriAsync(name, uri, null); var options = new Windows.System.LauncherOptions(); options.DisplayApplicationPicker = true; bool success = await Windows.System.Launcher.LaunchFileAsync(file, options);

    以上请参考。


    James He
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2013年6月6日 5:11
    版主
  • 谢谢你的回复!我跟踪看过info.FileName是已转为Utf-8了,比如文件名为“城市规划.pdf”我在这里看到的就是“城市规划.pdf”。这个info是通过协议得到的,所以里面的info.FileName的后缀问题不存在设置方面的问题,它存储的是什么后缀就提取出什么后缀,通过lanucher会自动调用可以打开该类型的文件的应用。对于您说的excel没有正确管理后缀的话,我估计也不存在,因为我同一个文件,本地状态的时候是正常打开,而一处于远端状态就出现乱码。按理来说同一个文件都是.xlsx格式,不会存在关联有问题。不过还是非常感谢你的回复!
    2013年6月8日 7:31
  • HI Billy-NuoYan

    这个情况的确存在,在用CreateStreamedFileFromUriAsync打开远程文件的步骤是:1,下载到IE的临时文件夹。2,打开文件。在第一步的时候就已经出现名字乱码,所以不论第二步怎么修改都还是会显示乱码。

    我已经反映了这个问题,相信会有更专业的人士来帮助解决,不过需要等一段时间,请耐心等待结论。

    多谢对论坛的支持。


    James He
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年6月12日 8:20
    版主
  • Hi,

    先下载再打开,还可以到其下载位置查看下载的文档,并打开测试.确定文件url是否正如您所想(中文情形),在指定文件名时查看中文名的情形,你可以测试打开的文件名为System.IO.Path.GetFileName(uri.AbsoluteUri),或者指定文件名测试。

    Uri uri = new Uri("http://..../test.docx");

    var file = await ApplicationData.Current.RoamingFolder.CreateFileAsync(System.IO.Path.GetFileName(uri.AbsoluteUri), CreationCollisionOption.ReplaceExisting);

    var downloader = new Windows.Networking.BackgroundTransfer.BackgroundDownloader();

    var download = downloader.CreateDownload(uri, file);

    var res = await download.StartAsync();
    if (file != null)
    {
     
    var urlOptions = new Windows.System.LauncherOptions();
      urlOptions
    .TreatAsUntrusted = false;
      await
    Windows.System.Launcher.LaunchFileAsync(file, urlOptions);
    }

    Regards,

    Jenny


    2013年6月13日 7:45