Конвертировать API версии 2 DOCX в PDF

Я успешно установил соединение с версией 1, используя следующий код:

    <cfhttp method="post" 
        url="http://do.convertapi.com/Word2Pdf" 
        result="convertAttempt" 
        path="#arguments.path#" 
        file="#arguments.fileToDestination#"
    >
       <cfhttpparam type="formfield" name="ApiKey" value="xxxxxxx" >
       <cfhttpparam type="file" file="#arguments.path#/#arguments.fileToConvert#" name="File" >
   </cfhttp>

Ниже приведен код, который я пытаюсь использовать для версии 2. Он записывает файл в правильную папку, но это не читаемый PDF. Я думаю, что это как-то связано с base64, но не уверен. Во всяком случае, надеясь, что есть еще один пользователь ColdFusion, чтобы помочь мне. Затем мы надеемся получить примеры кода на сайте convertAPI, чтобы помочь другим.

<cfhttp method="post" 
    url="http://v2.convertapi.com/docx/to/pdf?Secret=mysecret" 
    result="convertAttempt"
    path="#arguments.path#" 
    file="#arguments.fileToDestination#"
>   

    <cfhttpparam type="file" file="#arguments.path##arguments.fileToConvert#" name="File" >
</cfhttp>

2 ответа

По умолчанию ConvertAPI версии 2 возвращает JSON. Вам необходимо декодировать файл с помощью декодера Base64.

Чтобы сэкономить время отклика и пропускную способность, лучше добавить accept=application/octet-stream заголовок к запросу, чтобы получить мгновенный двоичный ответ без какого-либо декодирования.

Используя предложения в комментариях и ответ Томаса, вот мой окончательный код. Сначала десериализуется ответ от JSON. Затем декодирует PDF из base64 в двоичный файл. Наконец, сохраняет двоичный файл PDF на диск.

<cfhttp method="post" url="http://v2.convertapi.com/docx/to/pdf?Secret=your-secret" result="convertAttempt">    
   <cfhttpparam type="file" file="#arguments.path##arguments.fileToConvert#" name="File" >
</cfhttp>

<cfset FileResult = deserializeJSON(convertAttempt.FileContent) />

<cfif isDefined("fileResult.Code")>
    <!--- Failed --->
<cfelse>
    <cfset FileWrite("#arguments.path##arguments.fileToDestination#", BinaryDecode(FileResult.Files[1].FileData, "base64"))>
</cfif>
Другие вопросы по тегам