如何使用 cfpdf 作为源在 cfcontent 中添加 javascript 导入
How to add javascript import in cfcontent using cfpdf as source
我曾经通过 url 打开我的 pdf 并让浏览器处理 pdf 渲染,但自从上次更新 android 和 ios 以来,这种方式不再适用于移动设备。
我决定使用 coldfusion 本身来处理这个问题,使用 cfpdf 函数并使用 cfcontent 外部化二进制文件,效果很好,但我在页面上有一个 google analytics 代码,cfcontent 呈现整个页面,所以我丢失了分析代码的引用。
一个解决方案,我临时调用了我的cfpdf通过iframe生成的这个内容,但是在iframe[时,某些pdf的base64没有加载=28=] 是通过 base64 使用的,已经可以正常使用了 url 我回到了最初在移动设备上无法工作的问题。
基本上我需要将我的分析标签插入生成的 html 我的 cfcontent,但我不能手动操作源,因为内容来自 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 header)。您不能向其中添加 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
,阅读有关 PDF 文档如何为他们 "prepared" 而被 Google Analytics 跟踪的消息。 4 秒后(调整到您认为足以跟踪的任何值),它们将被重定向到实际的 PDF 文档。
2 将 Google 分析嵌入您的 PDF
你可以run JavaScript code in a PDF document。请注意,由于 PDF 查看器中的安全限制,这可能有点棘手。即便如此,我还是强烈建议您不要使用此选项,因为它可能会导致比适当的 GA 印象更多的问题。
我曾经通过 url 打开我的 pdf 并让浏览器处理 pdf 渲染,但自从上次更新 android 和 ios 以来,这种方式不再适用于移动设备。
我决定使用 coldfusion 本身来处理这个问题,使用 cfpdf 函数并使用 cfcontent 外部化二进制文件,效果很好,但我在页面上有一个 google analytics 代码,cfcontent 呈现整个页面,所以我丢失了分析代码的引用。
一个解决方案,我临时调用了我的cfpdf通过iframe生成的这个内容,但是在iframe[时,某些pdf的base64没有加载=28=] 是通过 base64 使用的,已经可以正常使用了 url 我回到了最初在移动设备上无法工作的问题。
基本上我需要将我的分析标签插入生成的 html 我的 cfcontent,但我不能手动操作源,因为内容来自 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 header)。您不能向其中添加 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
,阅读有关 PDF 文档如何为他们 "prepared" 而被 Google Analytics 跟踪的消息。 4 秒后(调整到您认为足以跟踪的任何值),它们将被重定向到实际的 PDF 文档。
2 将 Google 分析嵌入您的 PDF
你可以run JavaScript code in a PDF document。请注意,由于 PDF 查看器中的安全限制,这可能有点棘手。即便如此,我还是强烈建议您不要使用此选项,因为它可能会导致比适当的 GA 印象更多的问题。