我曾经通过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" />
答案 0 :(得分:1)
您的cfcontent
输出二进制数据,并告诉浏览器将其视为application/pdf
(通过Content-Type
HTTP标头)。您不能在其中添加HTML或JavaScript,因为它会破坏PDF文档。我在这里看到两个选项:
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文档。
您可以run JavaScript code in a PDF document。请注意,由于PDF查看器中的安全限制,这可能会有些棘手。而且即使如此,我还是强烈建议您不要使用此选项,因为它可能会导致比适当的GA展示次数更多的问题。