Power App - 生成 PDF

Posted

技术标签:

【中文标题】Power App - 生成 PDF【英文标题】:Power App - generate PDF 【发布时间】:2017-07-20 17:12:23 【问题描述】:

我得到了一项任务,看看我是否可以制作能生成一些 PDF 文件供最终用户查看的电源应用程序。 通过对这个主题的研究后,我发现这并不容易实现:) 为了使电源应用程序生成并下载/显示生成的 pdf,我做了以下步骤:

    只需一个按钮即可创建电源应用 :) 以从第 2 步调用 Azure 函数 创建的 Azure 函数将生成 pdf 作为 StreamContent 并返回

由于电源应用程序的限制(或者我只是找不到方法),我无法从电源应用程序内的响应中获取 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 流回到 cmets 下的代码,作为我尝试过的参考)

有什么方法可以获取 Azure 函数中新生成的 blob 条目的下载 URL? 有没有更好的方法让 Power App 生成和下载/显示生成的 PDF?

附:我尝试在电源应用程序中使用 PDFViewer 控件,但该控件完全没用,因为 U 无法通过函数设置文档值

编辑:@mathewc 的回复对我最终结束这件事帮助很大。所有详细信息如下。 新的 Azure 功能按预期工作

#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);

备注

    我们需要在 project.json 中添加“WindowsAzure.Storage”:“7.2.1”。此软件包必须与 %USERPROFILE%\AppData\Local\Azure.Functions.Cli 中同名的软件包版本相同

【问题讨论】:

干得好!我有一个类似的问题。您对 PowerApp 中的 URI 做了什么?保安如何运作?我也会查看下面的链接:-) 【参考方案1】:

如果您将 blob 输出绑定类型从 Stream 更改为 CloudBlockBlob,您将可以访问 CloudBlockBlob.Uri,这是您需要的 blob 路径(文档 here)。然后,您可以将该 Uri 返回给您的 Power App。您可以使用CloudBlockBlob.UploadFromStreamAsync 将您的 PDF 流上传到 blob。

【讨论】:

以上是关于Power App - 生成 PDF的主要内容,如果未能解决你的问题,请参考以下文章

XCODE生成的app文件不能用

Laravel Dompdf 生成 pdf 错误

mpdf - 来自 url 的图像不会加载到生成的 pdf 中

Word文档如何自动更新Power BI数据和图表?

1.Power Designer 由数据库反向生成pdm文件

LA 6437 Power Plant (prim最小生成树)