Функция Coldfusion SpreadsheetAddImage не вставляет изображение

В настоящее время я использую CF версии 9.0.1, и у меня возникли проблемы с получением функции SpreadsheetAddImage для правильной вставки изображения в электронную таблицу, которую я создаю. Я не получаю сообщения об ошибке, просто изображение не отображается в электронной таблице. Я также исключил любые проблемы с поиском изображения или его возвратом (проверено с помощью атрибута cfimage writetobrowser).

Я также удалил все свои данные и форматирование из электронной таблицы, чтобы исключить перезапись содержимого этой ячейки. Просто чтобы посмотреть, смогу ли я получить пустую таблицу с изображением.

См. пример кода ниже.

<cfset sObj = SpreadsheetNew()>
<!--- <cfimage source="pathtomyimage.jpg" name="image"> --->
<cfset image_var = ImageRead("pathtomyimage.png")>

<cfset SpreadsheetAddRow(sObj, "")>
<cfset SpreadsheetAddImage(sObj,image_var,"png","1,1,1,1")>

...

<cffile action="readbinary" file="#dest_loc#" variable="export_file">
<cffile action="delete" file="#dest_loc#">

<cfheader name="Content-Disposition" value="inline; filename=#file_name#.xls">
<cfcontent type="application/vnd.msexcel" variable="#toBinary(export_file)#">

Я ценю любые отзывы. Спасибо.


person user1489298    schedule 18.07.2013    source источник


Ответы (1)


Я запустил ваш код и обнаружил, что изображение не появляется, когда размеры anchor слишком малы. (Я также использовал SpreadSheetReadBinary вместо записи электронной таблицы на диск, но это не должно иметь никакого значения). Попробуйте этот пример из документации. Если изображение видно, это говорит о проблеме с размерами. Чтобы исправить это, вы можете либо увеличить размеры привязки, либо использовать функции изображения, чтобы уменьшить размер вашего изображения.

<cfchart format="png" name="image_var"> 
    <cfchartseries type="line"> 
        <cfchartdata item="Point1" value="-50"> 
        <cfchartdata item="Point2" value="-25"> 
        <cfchartdata item="Point3" value="1"> 
    </cfchartseries> 
</cfchart> 

<cfset sObj = SpreadsheetNew()>
<cfset SpreadsheetAddRow(sObj, "")>
<cfset SpreadsheetAddImage(sObj,image_var,"png","1,1,7,6")>
<cfheader name="Content-Disposition" value="inline; filename=testFile.xls">
<cfcontent type="application/vnd.msexcel" variable="#SpreadSheetReadBinary(sObj)#">
person Leigh    schedule 18.07.2013
comment
Вот оно. Спасибо! Дополнительный вопрос: я получаю изображение, но цвета отображаются не так, как должны. Может быть это из-за того, что габаритов все-таки не хватает? - person user1489298; 19.07.2013
comment
Вроде не из-за габаритов. Очень странно. - person user1489298; 19.07.2013
comment
Похоже, это как-то связано с форматом файла изображения. У меня была другая копия того же изображения, сохраненная как файл jpg вместо png. Изображение в формате jpg отображается правильно. Не уверен, почему это так. Спасибо еще раз! - person user1489298; 19.07.2013
comment
JPEG и PNG хранят цвета по-разному и интерпретируются по-разному при декодировании, особенно при сжатии JPEG с потерями. Чтобы увидеть пример этого, сохраните один и тот же базовый файл в форматах PNG, JPEG и GIF, а затем создайте HTML-страницу, которая показывает их рядом в IE. Все будет заметно различаться по тональности. - person Nicholas; 19.07.2013