2013-03-24 103 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); 

這工作正常在我的設備上。