2015-05-22 2 views
1

Эта проблема больше не входит в сферу действия названия. Я пытаюсь найти способ определить, вытаскивается ли PDF из db в виде байтового массива только для чтения, а затем удаляется из набора результатов. Я сбросил getinfo как в режиме «только для чтения», так и в файл чтения/записи и сравнил атрибуты только, чтобы обнаружить, что различимых различий нет. Я искал google для других методов, но сейчас я застрял.ColdFusion query.removeRows игнорирует <cfif> заявления и удаляет все результаты

Я пытаюсь выполнить фильтрацию с помощью набора результатов 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> 

Я нахожу очень мало онлайн, что имеет отношение к моей проблеме. Если у кого-то есть какой-то вклад, это было бы замечательно!

Update:

Я обнаружил, что IsPDFFile() всегда возвращается ложь. Он не распознает какой-либо входной файл в формате pdf. Поэтому моя проблема не в том, что я изначально думал. Я продолжаю получать ошибки ByteArray при попытке обработать PDF-файлы, которые возвращаются с SQL-сервера.

Ошибка, возникающая при попытке сравнить BLOB с чем-либо PDF: «Объекты ByteArray не могут быть преобразованы в строки. - Исключение произошло при вызове метода обработчика событий из Application.cfc. Имя метода: .. . »

... и когда я пытаюсь использовать getinfo, также возникает ошибка:« Произошла ошибка во время операции GETINFO в теге cfpdf.Error: com.adobe.internal.pdftoolkit.core.cos.CosNull не может быть приведен к com.adobe.internal.pdftoolkit.core.cos.CosDictionary конкретная последовательность файлов, включенных или обрабатываемый: ...»

Я хотел бы сделать следующее:

выполнить код, который удаляет PDF из набора данных и т.д.

Это не работает. Ошибка в строке getinfo. Является ли мой синтаксис, возможно, неправильным, или, может быть, мое использование просто неуместно?

+0

Вы уверены, что хотите отправить предупреждение для каждого не-PDF-файла, которое вы удаляете обратно в браузер? Это было бы очень раздражать очень быстро. Как ... после первого. –

+0

точно! Предупреждение предназначено только для отладки. Я обнаружил, что функция IsPDFFile() здесь не подходит. PDF-файл поступает из db как данные ByteArray, и сравнение всегда возвращает false. Я пытаюсь теперь использовать James

+1

Удостоверьтесь, что код в вашем вопросе обновлен до того момента, когда вам удалось устранить неполадки, а также объясните свой прогресс. Вероятно, стоит заглядывать за «coldfusion storageing pdf if db» и читать, что нужно делать, чтобы преобразовать данные байтового массива в/из фактического двоичного файла PDF –

ответ

5

Вы просматриваете первый PDF-документ в запросе каждый раз, когда вы делаете свой cfset. Вы должны ссылаться на текущую строку в запросе, который i

<cfset pdfDoc = getScans.ATTACHED_DOCUMENT_FILE[i]> 

Вы можете getInfo на PDF и проверить поле шифрования в структура, которая возвращается. Я не уверен во всех возвращаемых параметрах, но для меня был возвращен незашифрованный 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> 
+0

Да, спасибо. – James

+0

Чтобы уточнить, итерации через набор данных необходимо реализовать, вы абсолютно правы там. Однако это не устраняет ошибку битового массива. Я все еще не могу проверить PDF для шифрования. – James

+0

@James проверяет обновленный ответ, который я нашел с несколькими минутами поисковой системы и создаю тестовую страницу для проверки вывода –

2

В дополнение к комментариям по запросу запроса .. Вероятно, это неправильная функция в этом сценарии. Как следует из названия, IsPDFFile(path) ожидает путь к файлу. Поскольку это звучит так, как будто вы передаете двоичный код , вы хотите вместо этого использовать IsPDFObject(value).

Value : A value, typically the PDF object stored as a variable name.

Returns : True, if the value returns a valid PDF file. False, otherwise.