【问题标题】:how to get a value out of a ColdFusion struct object如何从 ColdFusion 结构对象中获取值
【发布时间】:2015-01-16 18:22:04
【问题描述】:

我正在创建一个 pdf 文档(通过 ColdFusion),并在浏览器中呈现该 pdf。 pdf 表单已经创建,我正在预填充和填充字段。

所以我正在做的是从 pdf 中转储变量以用作 cfpdfformparam 中的名称。 (获取变量)然后我正在做的是创建所有者电子邮件是pdf中变量的名称,然后我从另一个表单分配会话变量的值。这样他们输入的内容就会预先填写在他们需要填写的表格中。所以真正的名字决定了 pdf 上的位置,值是在另一个表单上输入的会话变量。

我遇到的问题是已经创建的变量,其中一些变量中有structs,所以我不确定如何在(名称部分)中调用它们以预填充和填充信息。

例如,当 FEID/DL/DMVacct 和 FL reg 在变量中包含结构时,我将如何预填充它们的信息?:

像这样?:
<cfpdfformparam name="FEID/DL/DMVacct##" value="#session.checkout.info.driverlicense_1#">

<cfpdfform action="read" source="82040y.pdf" result="data" />
<cfdump var="#data#" />

我正在预填充 pdf 表单字段(通过 ColdFusion 会话变量),然后使用以下标记呈现 pdf:

<cfpdfform source="82040.pdf" action="populate">
  <cfpdfformparam name="org" value="">
</cfpdfform>

任何帮助将不胜感激!

【问题讨论】:

    标签: pdf struct coldfusion


    【解决方案1】:

    您可以像这样访问嵌入在结构中的变量:

    <!--- using dot notation --->
    <cfif StructKeyExists(myStruct, "myKey")>
        <cfoutput> #mystruct.myKey#</cfoutput><br>
    </cfif>
    
    <!--- or using access notation --->
    <cfif StructKeyExists(myStruct, LastName)>
        <cfoutput>#LastName#: #mystruct[LastName]#</cfoutput><br>
    </cfif>
    

    您可以使用IsDefined 来查看值是否存在:

    IsDefined("structure_name.key")>
    

    但是,如果密钥是动态的,或者包含特殊字符,则必须使用StructKeyExists 函数。

    注意:您必须注意 ColdFusion 中的变量名称。如果用作变量名称,分配给您的结构值的某些名称将被视为无效。因此,如果您的结构名称包含无效字符,则需要通过访问表示法访问它们才能检索它们:

    <!--- use access-notation for value names with special chars --->
    data["FEID/DL/DMVacct"]["#"]
    

    否则,如果您尝试点表示法,则会出现运行时错误:

    <!--- Invalid markup! Don't do this! --->
    #data.FEID/DL/DMVacct.##
    

    以下是一些关于如何访问数据的示例:

    <!--- Output the value --->
    <cfoutput> #data["FEID/DL/DMVacct"]["#"]#</cfoutput><br>
    
    <!--- Storing the value in a variable named 'myVar' --->
    <cfset myVar = #data["FEID/DL/DMVacct"]["#"]# />
    <cfoutput>#myVar#</cfoutput>
    

    如果您的结构名称遵循 ColdFusion 的 variable naming rules,那么您也可以使用点符号访问您的数据,注意我将值名称 FEID/DL/DMVacct# 更改为有效的变量名称:FEID_DL_DMVacctnum

    <!--- Output the value via dot-notation --->
    <cfoutput> #data.FEID_DL_DMVacct.num#</cfoutput><br>
    
    <!--- Storing the value in a variable named 'myVar' --->
    <cfset myVar = #data.FEID_DL_DMVacct.num# />
    <cfoutput>#myVar#</cfoutput>
    

    希望这会有所帮助!

    【讨论】:

    • Vicki - IMO,你的问题的标题导致人们走错了路 ;-) 听起来你的真正目标是填充一个 pdf 表单字段 - 而不是 从结构中获取值。 (虽然 structKeyExists 是对所提问题的合理回答,但它与填充表单字段无关)。那么你能解释一下你最终做了什么来填充这个字段吗?
    • 变量名必须遵循这些规则...这不再适用。使用关联数组表示法,变量名称几乎可以是您想要的任何名称。这些旧规则仅在使用点表示法时适用。 (也就是说,最初的问题具有误导性。这个问题与 CF variable 名称无关 - 它与 pdf form field 名称有关。)
    • @Leigh,变量naming rules for ColdFusion 9 似乎与naming rules for ColdFusion 8 相同,但我明白你所说的通过访问符号[""] 访问值,其中规则略有不同,但 OP 并不清楚这些值是如何被使用的,无效的变量名可能会把她弄得一团糟。
    • 但是,我完全同意这个问题更多地与如何将值放入动态 PDF 中有关,而不是与从结构中获取值有关,因此我的回答试图与实际的问题,同时添加额外的想法来帮助她处理 pdf 的东西,这正是她真正追求的。
    • ... 或代码如何进行解析。虽然我不明白为什么它会导致问题。除非代码做了一些奇怪的事情,比如使用评估()。 RE:命名约定,什么是“可取的”与“语法上有效”是不同的对话。但我同意尽可能避免使用异国情调的名字。不幸的是,并不是每个人都同意这种观点:举个例子——手头的形式;-)
    【解决方案2】:
    structName['FEID/DL/DMVacct']['##'] = variable
    

    你需要双 # 来转义它们并产生一个单数 #

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2010-11-21
      相关资源
      最近更新 更多