此问题不再属于标题范围。我试图找到一种方法来确定从作为字节数组的数据库中提取的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行错误输出。我的语法可能是错的,或者我的用法可能不合适?
答案 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。错,否则。