3

我正在为 Windows Phone 7 开发一个应用程序,并且我正在为它使用一个 Phonegap 模板。一切看起来都很完美,但现在我无法在浏览器中打开 PDF 文件。我尝试了以下方法,但这不起作用,因为 PDF 的 url 超过了 2048 个字符的限制(它是一个数据 url)。此代码在触发 deviceReady 事件后运行。

var ref = window.open('http://www.google.com', '_blank', 'location=no');
ref.addEventListener('loadstart', function () { alert(event.url); });

现在,我正在尝试将 PDF 文件保存到存储中,然后尝试让浏览器打开它,但浏览器没有显示任何内容。我正在从 cordovalib 编辑 InAppBrowser.cs 代码,并在调用 browser.Navigate(loc); 之前添加了以下行

private void ShowInAppBrowser(string url)
{
    IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
    FileStream stream = store.OpenFile("test.pdf", FileMode.Create);
    BinaryWriter writer = new BinaryWriter(stream);
    var myvar = Base64Decode("the big data url");
    writer.Write(myvar);
    writer.Close();

    if (store.FileExists("test.pdf")) // Check if file exists
    {
        Uri loc = new Uri("test.pdf", UriKind.Relative);
        ...
    }
}

此代码返回以下错误:日志:“错误回调中的错误:InAppBrowser1921408518 = TypeError:无法获取属性'url'的值:对象为空或未定义”

我不想使用 ComponentOne。

任何帮助将不胜感激!

4

3 回答 3

3

您无法在 PDF 文件的默认阅读器中打开隔离存储中的 pdf 文件。如果文件在线,例如它有一个 URI,您可以使用 WebBrowserTask 打开它,因为这将下载并在 Adob​​e Reader 中打开文件。

在 Windows Phone 8 上,您实际上可以在该扩展名的默认文件阅读器中打开您自己的文件,但我不确定这对您有什么帮助,因为您的目标是 PhoneGap 和 Windows Phone 7。

于 2013-03-25T07:56:17.970 回答
1

托尼是正确的。您可以尝试构建自己的查看器(这与使用 C1 相同,但需要更多时间)。我为 WP7 开发了 iTextSharp 和 PDFSharp 的端口,但它们都不是 PDF 查看器。它们非常适合创建 PDF 并对其进行一些解析(但要渲染它们,需要做更多的工作)。这是我的个人追求,但老实说,我得到的最好的结果是能够从 PDF 中提取一些图像(而不是文本)

于 2013-03-26T14:05:58.147 回答
0

尝试这个

var installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
var assets = await installedLocation.GetFolderAsync("Assets");
var pdf = await assets.GetFileAsync("metro.pdf");
Windows.System.Launcher.LaunchFileAsync(pdf);

这在我的设备上正常工作。

于 2014-07-08T11:19:39.943 回答