如何使用cfpdf作为源在cfcontent中添加javascript导入

时间:2019-07-12 18:35:00

标签: coldfusion base64 coldfusion-11 cfpdf

我曾经通过url打开pdf,然后由浏览器处理pdf呈现,但是自从上次对android和ios更新后,这种方式就不再适用于移动设备。

我决定使用 coldfusion 本身来处理 cfpdf 函数,并使用 cfcontent 将二进制文件外部化,效果很好,但是我的页面上有 google analytics 代码,并且 cfcontent 呈现了整个页面,所以我失去了我的分析代码的引用。

我暂时将cfpdf生成的内容通过iframe调用的解决方案,但是当通过base64使用 iframe 时,某些pdf的 base64 未加载,已经用作普通网址了,我回到了无法在移动设备上工作的最初问题。

基本上,我需要将分析标记插入到cfcontent的生成的html中,但是由于内容来自cfpdf,因此我无法手动操作源代码

<cfhtmlhead text='
    <script async src="https://www.googletagmanager.com/gtag/js?id=#Key#"></script>
    <script> 
        window.dataLayer = window.dataLayer || []; 
        function gtag(){dataLayer.push(arguments);} 
        gtag("js", new Date());     
        gtag("config", "#Key#"); 
    </script>'>
<cfpdf action="read" name="RawFile" source="#RawUrl#" />
<cfcontent variable="#toBinary(RawFile)#" type="application/pdf" />

1 个答案:

答案 0 :(得分:1)

您的cfcontent输出二进制数据,并告诉浏览器将其视为application/pdf(通过Content-Type HTTP标头)。您不能在其中添加HTML或JavaScript,因为它会破坏PDF文档。我在这里看到两个选项:

1使用中间页

open_pdf.cfm

<cfoutput>

    <h1>Please wait while we prepare the PDF document for you...</h1>

    <script async src="https://www.googletagmanager.com/gtag/js?id=#Key#"></script>
    <script>

        window.dataLayer = window.dataLayer || []; 
        function gtag(){dataLayer.push(arguments);} 
        gtag("js", new Date());     
        gtag("config", "#Key#");

        var secondsToWait = 4;
        setTimeout(function() { window.location.href = 'render_pdf.cfm'; }, secondsToWait * 1000);

    </script>

</cfoutput>

render_pdf.cfm

<cfpdf action="read" name="RawFile" source="#RawUrl#" />
<cfcontent variable="#toBinary(RawFile)#" type="application/pdf" />

您的访问者单击open_pdf.cfm,阅读有关在Google Analytics(分析)跟踪过程中如何为他们“准备” PDF文档的消息。 4秒钟后(根据您认为足以跟踪的内容进行调整),它们将被重定向到实际的PDF文档。

2将Google Analytics(分析)嵌入您的PDF

您可以run JavaScript code in a PDF document。请注意,由于PDF查看器中的安全限制,这可能会有些棘手。而且即使如此,我还是强烈建议您不要使用此选项,因为它可能会导致比适当的GA展示次数更多的问题。