【问题标题】:How to display local PDF in Flex Mobile Project?如何在 Flex Mobile Project 中显示本地 PDF?
【发布时间】:2012-01-23 22:08:43
【问题描述】:

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

我不知道如何使此代码适用于本地保存的文件。

错误消息:“错误 #2044:未处理的错误事件:.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>

【问题讨论】:

  • 您是否遇到特定错误?如果是这样,请将它们包含在您的问题中,以便我们尝试提供帮助。

标签: flash apache-flex pdf mobile


【解决方案1】:

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

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

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

希望这将在最新版本的 Android...4.0 中得到修复

【讨论】:

    【解决方案2】:

    你可以试试这个:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      如果您使用的是 android,上述方法可能无法直接使用。您可能需要安装一个插入到能够解析 PDF 的浏览器的应用程序。

      【讨论】:

      • 感谢您的回复。我在 Android 上,你说得对,它不起作用!你能推荐一个可以完成这项工作的应用程序吗?有没有更好的方法来完成这项工作?
      • 不幸的是,我只能告诉你。目前我的重点是iOS。我在android上试过了,没用,不好的实验。但是,据我所知,您可以根据默认应用程序配置这些文件类型,但我已经读到显然 Android 文件类型与应用程序相关联。我建议首先在浏览器中输入本地 pdf 的 url,看看它是否打开,如果没有播放文件关联,然后重试浏览器。如果您得到解决方案,请分享。目前我们正在努力将 PDFTron 库包装在 ANE 中。这是最终的解决方案。
      • 感谢您的信息。我会和它一起玩。我真的希望所有这些 pdf 都内置到应用程序中,这样用户就不需要互联网了。但是我一直在疯狂地寻找解决方案,但我找不到它,所以我可能不得不处理,直到比我更聪明的人想出来!
      【解决方案4】:

      我在 iPad 上尝试了 Christo 提出的解决方案,结果报错:

      “协议不支持”

      那是因为使用 File.resolvePath.url 会给出这样的 URL:

      app://blahblah/blabla.
      

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

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

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-07
        • 2012-11-02
        • 2012-04-11
        • 2012-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-04
        相关资源
        最近更新 更多