2013-03-24 74 views
3

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

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 =类型错误:无法获取属性‘URL’的值:对象为null或undefined”

我不想使用ComponentOne。

任何帮助将不胜感激!

回答

3

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

在Windows Phone 8,你居然能打开默认的文件读取自己的文件的一个扩展,但我不知道如何帮助你,因为你的目标的PhoneGap和Windows Phone 7

+0

非常感谢托尼!你的回复帮了我很多。 – 2013-03-26 17:26:26

+0

那么这是否意味着我们无法在WP8中通过自己的应用程序打开pdf或word文档?我也有同样的问题,我已经在localStorage下载了一个pdf文件,并且一旦下载,我想把它展示给用户,任何建议如何做到这一点? – Debhere 2013-03-27 07:00:10

+0

@Debhere检查http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206987(v=vs.105).aspx了解更多信息。 – 2013-03-27 09:02:06

1

托尼是正确的。你可以去尝试构建你自己的查看器(这与使用C1相同,但涉及更多的时间)。我曾在iTextSharp和WP7的PDFSharp的端口上工作,但都不是PDF查看器。它们很适合创建PDF并对其进行解析(但是为了呈现它们还需要更多的工作)。这一直是我的一个个人的追求,但老实说,我已经得到了最好的是能够从PDF中提取一些图像(并且没有文本)

+0

非常感谢周杰伦!你的回复帮了我很多。 – 2013-03-26 17:26:48

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); 

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