coldfusion - 如何使用 cfpdf 作为源在 cfcontent 中添加 javascript 导入
问题描述
我曾经通过 url 打开我的 pdf 并让浏览器处理 pdf 渲染,但自从上次更新到 android 和 ios 后,这种方式不再适用于移动设备。
我决定使用Coldfusion本身来处理这个问题,使用cfpdf函数并使用 cfcontent 将二进制文件外部化,效果很好,但我在页面上有一个谷歌分析代码,并且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
(通过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
您可以在 PDF 文档中运行 JavaScript 代码。请注意,由于 PDF 查看器的安全限制,这可能有点棘手。即便如此,我强烈建议您不要使用此选项,因为它可能会导致比正确的 GA 印象更多的问题。
推荐阅读
- reactjs - 反应:如果未保存数据,如何取消 componentWillUnmount() 方法
- css - CSS Not Selector 不选择单个页面
- mysql - 更新日期+2 mysql
- dart - 如何检测抽屉是否关闭?
- python - 从仪器读取时出现访问冲突
- javascript - 未调用 Bootbox 回调函数
- postgresql - PostgreSQL SELECT DISTINCT 在复合主键上
- firebase - 运行 Vue-CLI 应用程序时初始化 firebase 时出错
- python - 如何将字符串转换为时间戳以进行比较?
- rdf - 在 OWL 中使用 owl:equivalentClass 和子类