2017-03-01 6 views
2

エンドユーザが見るためにいくつかのPDFファイルを生成するパワーアプリを作ることができるかどうかを知りたい課題があります。 PDFを生成した電力アプリを生成するためには :)私はこれを達成することは容易ではないことが判明し、このトピックに関する研究通じた後、ダウンロード/ショー私はこれらのステップを作っ:パワーアプリ - PDFを生成

だけで電源のアプリを作成しまし
  1. ボタン一つ:)生成して返すPDFをStreamContent

として電力によるアプリの制限のために(あるいは私は方法を見つけることができませんでした)しますステップ2

  • 作成したAzureの機能からAzureの機能を呼び出す方法はありませんでした私がパワーポイント内部の応答からpdfを得るために。 その後、Azure関数を変更して新しいBLOBエントリを作成しましたが、Azure関数内でその新しいエントリのURLを取得してパワーアプリケーションに戻し、パワーアプリケーション内で使用するのに問題があることを知っていますダウンロード機能

    Azureの機能コードが

    using System; 
    using System.Net; 
    using System.Net.Http.Headers; 
    using System.Runtime.InteropServices; 
    using Aspose.Words; 
    
    public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log, Stream outputBlob) 
    { 
        log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}"); 
    
        var dataDir = @"D:/home"; 
        var docFile = $"{dataDir}/word-templates/WordAutomationTest.docx"; 
        var uid = Guid.NewGuid().ToString().Replace("-", ""); 
        var pdfFile = $"{dataDir}/pdf-export/WordAutomationTest_{uid}.pdf"; 
        var doc = new Document(docFile); 
        doc.Save(pdfFile); 
    
        var result = new HttpResponseMessage(HttpStatusCode.OK); 
        var stream = new FileStream(pdfFile, FileMode.Open); 
    
        stream.CopyTo(outputBlob); 
    
        // result.Content = new StreamContent(stream); 
        // result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); 
        // result.Content.Headers.ContentDisposition.FileName = Path.GetFileName(pdfFile); 
        // result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
        // result.Content.Headers.ContentLength = stream.Length; 
    
        return result; 
    } 
    

    を下回っている私は

    古いコード(ちょうど私が試したものの参照として、コメントの下に戻ってPDFファイルをストリーム1)

    を残し、新たに生成されたブロブエントリのダウンロードURLを取得する方法はありますAzure関数の中で? パワーアプリケーションを生成し、生成されたPDFをダウンロード/表示させるための良い方法はありますか?

    P.S.私はパワーアプリ内のPDFViewerコントロールを使用しようとしましたが、この制御は、Uが機能

    EDITを介して文書の値を設定することはできません。原因完全に役に立たないです:@mathewcからの応答が最終的にこれをラップするために私をたくさん助けました。詳細は以下の通りです。

    #r "Microsoft.WindowsAzure.Storage" 
    
    using System; 
    using System.Net; 
    using System.Net.Http.Headers; 
    using System.Runtime.InteropServices; 
    using Aspose.Words; 
    using Microsoft.WindowsAzure.Storage.Blob; 
    
    public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log, CloudBlockBlob outputBlob) 
    { 
        log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}"); 
    
        var dataDir = @"D:/home"; 
        var docFile = $"{dataDir}/word-templates/WordAutomationTest.docx"; 
        var uid = Guid.NewGuid().ToString().Replace("-", ""); 
        var pdfFile = $"{dataDir}/pdf-export/WordAutomationTest_{uid}.pdf"; 
        var doc = new Document(docFile); 
        doc.Save(pdfFile); 
    
        var result = new HttpResponseMessage(HttpStatusCode.OK); 
        var stream = new FileStream(pdfFile, FileMode.Open); 
    
        outputBlob.UploadFromStream(stream); 
        return req.CreateResponse(HttpStatusCode.OK, outputBlob.Uri); 
    } 
    

    を期待通りに動作します 新しいAzureの機能は備考:project.json内の "7.2.1":

    1. ウィーは "WindowsAzure.Storage" を追加する必要があります。このパッケージMUSTはである同じ名前のものと同じバージョンであることが%USERPROFILE%\のAppData \ローカル\ Azure.Functions.Cli
  • +0

    よくできました!私にも同様の問題があります。 PowerAppでURIを使って何をしましたか?セキュリティはどのように機能しますか?私も以下のリンクをチェックアウトします:-) – MikeAinOz

    答えて

    2

    あなたはStreamからCloudBlockBlobにあなたのブロブ出力バインディングタイプを変更する場合は、あなたでしょう必要なBLOBパスであるCloudBlockBlob.Uriにアクセスしてください(ドキュメントhere)。そのUriをPower Appに戻すことができます。 CloudBlockBlob.UploadFromStreamAsyncを使用して、PDFストリームをブロブにアップロードすることができます。