ColdFusion query.removeRows忽略<cfif>语句并删除所有结果

时间:2015-05-22 17:23:30

标签: sql-server coldfusion coldfusion-9

此问题不再属于标题范围。我试图找到一种方法来确定从作为字节数组的数据库中提取的PDF是否为只读,然后从结果集中删除。我已将getinfo转储到只读和读/写文件上,并仅比较这些属性以发现没有可辨别的差异。我一直在谷歌搜索其他方法,但截至目前我已经卡住了。

我尝试过滤PDF结果集并删除任何受密码保护的内容。我将基于结果集长度的索引循环减少为1,并将每个PDF(行)与IsPDFFile()函数进行比较。如果比较为假,则不应删除该行。使用removeRows语句时,<cfif>似乎会被忽略,并且每行都会被不加区别地删除。

<cfloop index="i" from='#getScans.recordcount#' to='1' step="-1" >
    <cfset pdfDoc = getScans.ATTACHED_DOCUMENT_FILE[i]>
    <cfif NOT IsPDFFile("#pdfDoc#")> <!--- or <cfif NOT IsPDFObject("#pdfDoc#")>  --->
        <cfSet getScans.removeRows(i -1, 1)>
    </cfif>
    <cfoutput> #getScans.recordcount# </cfoutput>
</cfloop>

我发现与我的问题相关的网上很少。如果有人有一些意见,那就太好了!

更新

我发现IsPDFFile()总是返回false。它没有将任何输入识别为pdf。所以我的问题不是我最初的想法。在尝试处理从SQL服务器返回的PDF时,我不断收到ByteArray错误。

尝试将BLOB与任何PDF进行比较时得到的错误是:&#34; ByteArray对象无法转换为字符串。 - 从Application.cfc调用事件处理程序方法时发生异常。方法名称是:...&#34;

...当我尝试使用getinfo时,也会抛出错误:&#34;在cfpdf标记的GETINFO操作期间发生错误。错误:com.adobe.internal.pdftoolkit.core.cos.CosNull无法转换为com.adobe.internal.pdftoolkit.core.cos.CosDictionary包含或处理的特定文件序列为:...&#34;

我想做以下事情:

     执行从数据集中删除PDF的代码等。

这不起作用。 getinfo行错误输出。我的语法可能是错的,或者我的用法可能不合适?

2 个答案:

答案 0 :(得分:5)

每次执行cfset时,您都会查看查询中的第一个PDF文档。您需要引用查询中的当前行i

<cfset pdfDoc = getScans.ATTACHED_DOCUMENT_FILE[i]>

您可以在PDF上getInfo并检查返回的结构中的加密字段。我不确定是否已返回所有选项,但未加密的PDF已为我返回No Security

<cfpdf action="getinfo" source="abs/relative path" name="result">
<cfif result.encryption NEQ 'No Security'>
  <cfSet getScans.removeRows(i -1, 1)>
</cfif>

答案 1 :(得分:2)

除了有关查询引用的注释之外..在这种情况下,这可能是错误的功能。顾名思义,IsPDFFile(path)需要文件路径。由于听起来您正在传递PDF的二进制,因此您希望使用IsPDFObject(value)

  

:一个值,通常是存储为变量名称的PDF对象。

     

返回:如果值返回有效的PDF文件,则为True。错,否则。