【问题标题】:Delphi open PDF from ios/Android local storageDelphi 从 ios/Android 本地存储打开 PDF
【发布时间】:2015-02-24 15:20:46
【问题描述】:

我尝试从本地存储打开移动设备上的 PDF 文件。

我已经把文件放到:

iOS 的 StartUp\Documents\

assets\internal\ for Android

使用此代码:

filename := TPath.Combine(TPath.GetDocumentsPath, 'file.pdf');
WebBrowser1.Navigate('file://' + filename);

在 iOS 上工作正常...正确打开 pdf

在 Android 上 ... 没有 .. 没有错误 .. 没有 pdf ... 如果我尝试打开一个 html 文件 .. 工作正常。

有什么建议吗?

安东内洛

【问题讨论】:

    标签: android ios delphi pdf


    【解决方案1】:
    {$IFDEF ANDROID}
    Uses
       Androidapi.JNI.GraphicsContentViewText,
       Androidapi.Helpers,
       Androidapi.JNI.JavaTypes,
       Androidapi.JNI.Net;
    {$ENDIF}
    

    procedure btnPdfClick(Sender: TObject);
    var
       fName       : String;
    {$IFDEF ANDROID}
       Intent      : JIntent;
       URI         : Jnet_Uri;
    {$ENDIF}
    begin
        fName := TPath.GetSharedDownloadsPath + PathDelim + 'test.pdf';
    
        {$IFDEF ANDROID}
          URI := TJnet_Uri.JavaClass.parse(StringToJString('file:///' + fName));
          intent := TJIntent.Create;
          intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
          intent.setDataAndType(URI,StringToJString('application/pdf'));
          SharedActivity.startActivity(intent);
        {$ENDIF}
    end;
    

    【讨论】:

    • 考虑到您的文件在下载文件夹中。
    【解决方案2】:

    可以通过 XE7 中的 JNI birdge 使用 Android PDFView 组件。 https://github.com/JoanZapata/android-pdfview Java2op 工具可以生成所需的接口 pas 文件,IDE 可以管理 classes.dx 文件中的更改,这很容易。 把它带到 Delphi 需要一些工作,但它是可行的。为此,您几乎可以从 delphi“webview”实现中获取代码 1:1,该实现可以在 FMX.Webbrowser.pas 文件中的以下两个类 TCustomWebBrowser 和 FMX.WebBrowser.Android.pas 文件中的 TAndroidWebBrowserService 中找到。对于我的概念证明,我确实编写了一个派生自 TControl 的 TPDFViewAndroid 类,使用两个提及类的代码。因此,我正在从 Embarcaderro 获得公开发布所需的许可,但即使在此之前,我也必须找到时间进行清理,制作真正的组件,示例......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 2023-04-02
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      相关资源
      最近更新 更多