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

Coldfusion 如何使用cfpdf作为源在cfcontent中添加javascript导入,coldfusion,base64,coldfusion-11,cfpdf,Coldfusion,Base64,Coldfusion 11,Cfpdf,我曾经通过url打开我的pdf,让浏览器处理pdf渲染,但自从上次android和ios更新以来,这种方式不再适用于移动设备 我决定使用coldfusion本身来处理这个问题,使用cfpdf函数并使用cfcontent外部化二进制文件,这非常有效,但是我在页面上有一个google analytics代码,并且cfcontent呈现整个页面,所以我失去了分析代码的引用 我曾通过iframe临时调用由我的cfpdf生成的内容的解决方案,但当通过base64使用iframe时,某些pdf的base64

我曾经通过url打开我的pdf,让浏览器处理pdf渲染,但自从上次android和ios更新以来,这种方式不再适用于移动设备

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

我曾通过iframe临时调用由我的cfpdf生成的内容的解决方案,但当通过base64使用iframe时,某些pdf的base64没有加载,已经用作正常url,我回到了最初的问题,即无法在移动设备中工作

基本上,我需要将我的分析标签插入到生成的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" />

您的
cfcontent
输出二进制数据,并告诉浏览器将其视为
application/pdf
(通过
内容类型
HTTP标题)。不能向其中添加HTML或JavaScript,因为这会破坏PDF文档。我在这里看到两种选择:

1使用中间页
open\u pdf.cfm
您的访问者点击
打开的_pdf.cfm
,阅读一条消息,说明在谷歌分析跟踪时,pdf文档是如何为他们“准备”的。4秒钟后(根据您认为足以跟踪的内容进行调整),它们将被重定向到实际的PDF文档

2将谷歌分析嵌入到您的PDF中
你可以。请注意,由于PDF查看器中的安全限制,这可能有点棘手。即使如此,我还是强烈建议您不要使用此选项,因为它可能会导致比正确的GA印象更多的问题。

我尝试了第一种方法,但使用了iframe,虽然有点效果,但还不够充分,我将尝试重定向,但我想客户可能不喜欢,但让我试试
<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>
<cfpdf action="read" name="RawFile" source="#RawUrl#" />
<cfcontent variable="#toBinary(RawFile)#" type="application/pdf" />