如何在Flex Mobile Project中显示本地PDF?

时间:2012-01-23 22:08:43

标签: flash flex pdf mobile

我正在运行Flex移动项目,我希望我的移动应用程序能够加载和显示本地保存的pdf文件。我不想去网上访问这些pdf文件。

我无法弄清楚如何使此代码适用于本地保存的文件。

错误MSG:“错误#2044:未处理的ErrorEvent:。text =加载错误。”

有没有人有建议? 谢谢!

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    overlayControls="true" title="PDF Display"
    viewActivate="view1_viewActivateHandler(event)"
    viewDeactivate="removeStageWebViewHandler(event)">

<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;
        import spark.events.ViewNavigatorEvent;

        private var myWebView:StageWebView;

        protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void {
            myWebView = new StageWebView();
            myWebView.viewPort = new Rectangle(5,60,stage.stageWidth-10,stage.stageHeight-140);
            myWebView.stage = this.stage;
            myWebView.loadURL( "assets/sample.pdf");
        }

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
            if (myWebView) {
                var point:Point = localToGlobal(new Point());
                myWebView.viewPort = new Rectangle(5,60,stage.stageWidth-10,stage.stageHeight-140);
            }
        }  

        protected function goBackHandler(event:MouseEvent):void {   
            navigator.popToFirstView();
        }

        protected function removeStageWebViewHandler(event:ViewNavigatorEvent):void {
            myWebView.stage = null;
            // just remove the target and will leave.
        }

    ]]>
</fx:Script>

<s:actionContent>
    <s:Button label="BACK" click="goBackHandler(event)"/>
</s:actionContent>
<s:Image x="-1" y="2" source="assets/eventsback.jpg"/>

</s:View>

4 个答案:

答案 0 :(得分:1)

Android问题实际上是一个基本的Android浏览器操作系统问题。将AIR StageWebView想象成一个从您的应用程序中雕刻出来的洞,向您展示浏览器及其所有功能。

如果您的操作系统支持查看PDF,那么您的应用程序的StageWebView也将支持。在Android 1.0 - 3.0上,当您尝试查看PDF时,它会下载文档并将其手动转移到另一个应用程序(如Acrobat)上。

离开做类似的事情: http://forums.adobe.com/thread/864113

有趣的是,这将在最新版本的Android 4.0中修复。

答案 1 :(得分:1)

你可以试试这个:

webView.loadURL( new File(new File("app:/assets/FlexMobile.pdf").nativePath).url);

答案 2 :(得分:0)

您的代码应该适用于iOS。但是,您在以下行中有一个错误:

myWebView.loadURL( "assets/sample.pdf");

您指定的网址无效。它必须是完全限定的URL。尝试使用以下或类似的东西:

myWebView.loadURL( File.documentsDirectory.resolvePath("assets/sample.pdf").url );

如果您使用Android,上述内容可能无法直接使用。您可能需要安装一个插入浏览器的应用程序,该应用程序能够解析PDF文件。

答案 3 :(得分:0)

我已经尝试过Christo在iPad上提出的解决方案,但它出现了错误:

  

“不支持协议”

这是因为使用File.resolvePath.url会提供如下的URL:

app://blahblah/blabla.

我使用nativePath解决了这个问题,所以

myWebView.loadURL( File.documentsDirectory.resolvePath("assets/sample.pdf").nativePath );

希望这会有所帮助