Как вернуть файл cfdocument pdf и сервер пользователю в браузере?

У меня есть функция, которая будет генерировать файл PDF cfdocument. Затем я хотел бы вернуть документ и сервер в браузер. Вот пример функции, которая создает файл PDF.

<cftry>
    <cfdocument format="PDF" filename="file.pdf" overwrite="Yes">
        <table>
           <tr>
              <td>Test</td>
           </tr>
        </table>
    </cfdocument>

    <cfset local.fnResults = {file: //Here I'm not sure what I should return}>         

    <cfcatch type="any">
        <cfset local.fnResults = {status : 400, message : "Error! Something went wrong."}>
    </cfcatch>
</cftry>

<cfreturn fnResults>

Function above should genrate the file and return PDF in fnResults structure. Then on serve.cfm I have this logic:

<cfset local.Results = genertePDF()>

<cfif structKeyExists(local.Results, "FILEPATH")>
        <cfheader name="content-disposition" value="attachment;filename=#local.Results["FILENAME"]#"/>

        <!---Add the file content to the output stream:--->
        <cfcontent file="#local.Results["FILEPATH"]#" type="application/octet-stream" reset="true"/>

        <!---Exit immediately after adding the file content to avoid corrupting it:--->
        <cfabort/>
    <cfif>

Вы можете игнорировать структуру RESULTS, так как я не все изменил. Моя единственная проблема здесь - выяснить, как вернуть cfdocument контент? Если кто-нибудь знает, как заставить это работать, пожалуйста, дайте мне знать. Спасибо.


person espresso_coffee    schedule 24.12.2018    source источник
comment
Вы сохраняете все эти файлы или они просто временные? Сколько файлов вы ожидаете сгенерировать?   -  person Shawn    schedule 24.12.2018
comment
@Shawn Эта функция создает PDF-файл, как только пользователь нажимает кнопку. Эта страница представляет собой интерфейсный контент, который необходимо преобразовать в PDF. Я пытался использовать jspdf, но многие вещи не работают или их сложно настроить. Пока такой подход кажется хорошим вариантом. С помощью этой функции я могу иметь несколько пользователей на одной странице одновременно. Я не уверен, что этот подход является хорошим способом создания PDF-документов?   -  person espresso_coffee    schedule 24.12.2018
comment
Просто удалите имя файла, и он вернет содержимое обратно в браузер.   -  person Shawn    schedule 24.12.2018
comment
@Shawn Если я уберу имя файла, файл не появится.   -  person espresso_coffee    schedule 24.12.2018
comment
Должно. Если, может быть, он используется не так, как мы думаем? Не могли бы вы опубликовать небольшой пример, показывающий, как вызывается код?   -  person SOS    schedule 29.12.2018
comment
Если вы прочитаете мой вопрос, вы найдете пример того, как я вызываю функцию.   -  person espresso_coffee    schedule 29.12.2018


Ответы (1)


Изменять:

<cfheader name="content-disposition" value="attachment;filename=#local.Results["FILENAME"]#"/>

To:

<cfheader name="content-disposition" value="inline;filename=#local.Results["FILENAME"]#"/>

Справочник

person PeterKA    schedule 22.01.2019