Salesforce APEX/Visualforce - 如何处理和打开 Base64 编码的 PDF 数据?

问题描述 投票:0回答:1

我们正在尝试为销售人员制作一个集成应用程序。流程是:

  1. 用户单击按钮
  2. Salesforce 将数据发送到我们的系统
  3. 我们的系统返回 PDF 文档
  4. PDF 以某种有意义的方式向用户显示

我的 Apex 代码(相关位)

public class POCApexClass {
    public Blob pdfContent{get;set;}
    public Blob pdfContent2{get;set;}
    public string pdfContentBase64{get;set;}
    public void CommunicationRequestDemoPDF(){
        OutputDocument doc = GetDoc();
        pdfContentBase64 =  doc.outputBase64;
        pdfContent = EncodingUtil.base64Decode(pdfContentBase64);
        pdfContent2 = Blob.toPDF(pdfContentBase64);
    }
}

如果有顶点代码,只需在浏览器或其他应用程序或其他应用程序中打开文件,那就完美了。看来我可能需要使用 VisualForce 代码来实现这一点?我在那里尝试了几种方法。

<apex:page controller="POCApexClass" action="{!CommunicationRequestDemoPDF}">
    <apex:form >
        Sample PDF
    </apex:form>
    <apex:outputPanel >  
        <object data="data:application/pdf;base64,{!pdfContentBase64}"></object>
        <!-- 
        <iframe src="/apex/RenderPDFPage?base64String={!pdfContentBase64}" width="100%" height="300px" frameborder="0"></iframe>
        <apex:outputText value="{!pdfContent2}" escape="false"/>
        <script>
            window.location.href = "data:application/pdf;base64,{!pdfContentBase64}";
        </script>
        -->
    </apex:outputPanel>   
</apex:page>

他们都吐出了错误:超出了最大视图状态大小限制(170KB)。 该页面的实际视图状态大小为 192.954KB

有什么办法可以增加帧大小吗?或者让它在新窗口中显示的方法?或者像普通 PDF 一样下载并打开?

我到处碰壁,谢谢你的帮助。

如果答案是除了小 PDF 之外您无法打开任何内容,那也没关系。

pdf salesforce integration apex visualforce
1个回答
0
投票

将类变量标记为“瞬态”,因此“公共瞬态 Blob...”,这应该会导致它们不计入视图状态。

您将遇到的下一个限制是 6MB 堆大小(某种 RAM 使用情况),因此您可以通过删除未使用的变量来削减一些限制。超越这一点会有点棘手,所以如果它的发送器为 base64,你会损失一些编码开销,你的实际最大有用文件大小将是 4.27MB。除此之外,您需要尝试异步 apex,如延续、多部分文件...或者反转流程,让外部系统将文件推送到 SF,使用标准 API 保存它们(最多 2 GB 限制),然后您只需渲染链接到文件+定期清除旧文件?

视觉力有效,但它是在 iframe 中渲染的,然后您在自己的代码中还有另一个 iframe。有点嗯。你的目标是什么?显示文件预览/迷你窗口?触发浏览器的文件下载提示(然后浏览器/用户首选项决定是新选项卡、新窗口还是真正保存到磁盘)?

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.