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

Jam*_*mes 1 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>
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

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

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

我想做以下事情:

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

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

Mat*_*che 5

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

<cfset pdfDoc = getScans.ATTACHED_DOCUMENT_FILE[i]>
Run Code Online (Sandbox Code Playgroud)

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

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