ios/androidでPDFをファイル共有方法について

解決


のぶ  2023-02-01 06:08:07  No: 150761  IP: [192.*.*.*]

DelphiのFMXの開発を行っております。

インターネット上のPDFを下記のようにTWebBrowserで開き、
ファイル共有メニューからPDFファイルそのものをSLACKなど渡すことは可能でしょうか?
WebBrowser1.Navigate('https://・・・/test.pdf');

ファイル共有メニューは下記方法で出すことはできますが、
テキストや画像しか扱えません。どなたか教えていただけると助かります。

■アクション リストを使用した写真とテキストの撮影と共有
https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Taking_and_Sharing_Pictures_and_Text_Using_Action_Lists



【バージョン】
RAD Studio 11 Alexandria
Embarcadero® Delphi 11.0 バージョン 28.0.42600.6491

編集 削除
take  2023-02-01 07:37:02  No: 150762  IP: [192.*.*.*]

タイトルと質問文が違うので何をしたいのかよくわかりませんが

インターネット上にpdfがあって urlがわかっている
それをSlackにアップロードしたい

ということならダウンロードしてアップロードすれば良いのでは?


730_ネット上のファイルをダウンロードして解凍 ( 自動実行 )
http://mrxray.on.coocan.jp/Delphi/plSamples/730_AutoDLDefrose.htm#01

Slackのfiles.upload APIを使ってファイルを簡単に連携する
https://smdbanana.hatenablog.com/entry/2020/01/27/121632

編集 削除
のぶ  2023-02-08 04:51:40  No: 150774  IP: [192.*.*.*]

takeさん
返信が遅くなり、またはご説明も悪く、大変申し訳ございませんでした。

DelphiWorldsのKastriという素晴らしいライブラリで解決することができました。
https://github.com/DelphiWorlds/Kastri

サンプルソースは上記展開後の下記にあります。
Kastri-master\Demos\ShareItems

Unit1のソースを貼り付けておきます。
プログラムを起動し、ボタンをタップするとiOSのシェアシートメニューが表示され、
テンポラリフォルダにあるPDFをメニューに表示されたSlackやAirPrintの印刷処理に渡すことができるようになります。


unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls,
  DW.ShareItems, FMX.Objects, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, system.NetEncoding, IdSSLOpenSSL, System.Net.HttpClientComponent;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
  private
    FExcluded: TShareActivities;
    FShareItems: TShareItems;
    procedure Share;
    procedure ShareItemsShareCompletedHandler(Sender: TObject; const AActivity: TShareActivity; const AError: string);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

uses
  System.IOUtils, System.Permissions,
  DW.Consts.Android, DW.Permissions.Helpers;

{ TForm1 }

constructor TForm1.Create(AOwner: TComponent);
begin
  inherited;
  // Exclude all but the following - Note: applicable to iOS ONLY - uncomment the next line to test
  // FExcluded := TShareItems.AllShareActivities - [TShareActivity.Message, TShareActivity.Mail, TShareActivity.CopyToPasteboard];
  FShareItems := TShareItems.Create;
  FShareItems.OnShareCompleted := ShareItemsShareCompletedHandler;
end;

destructor TForm1.Destroy;
begin
  FShareItems.Free;
  inherited;
end;

procedure TForm1.ShareItemsShareCompletedHandler(Sender: TObject; const AActivity: TShareActivity; const AError: string);
begin
  // If AActivity is TShareActivity.None, then the user cancelled - except for Android because it does not tell you :-/
  if AActivity = TShareActivity.None then
    ShowMessage('Share cancelled')
  else
    ShowMessage('Share completed');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  PermissionsService.RequestPermissions([cPermissionReadExternalStorage, cPermissionWriteExternalStorage],
    procedure(const APermissions: TPermissionArray; const AGrantResults: TPermissionStatusArray)
    begin
      if AGrantResults.AreAllGranted then
        Share;
    end
  );
end;

procedure TForm1.Share;
var
  LSharedFileName: string;
begin
  FShareItems.AddFile(TPath.Combine(TPath.GetTempPath, 'test.pdf'));
  FShareItems.Share(Button1, FExcluded);
end;

end.

編集 削除
のぶ  2023-02-08 04:53:10  No: 150775  IP: [192.*.*.*]

上記、日本語がおかしかったです。訂正します。

誤)返信が遅くなり、またはご説明も悪く、大変申し訳ございませんでした。

正)返信が遅くなり、また、ご説明も悪く、大変申し訳ございませんでした。

編集 削除