ByteScout Cloud API Server: the ready to deploy Web API Server that can be deployed in less than thirty minutes into your own in-house Windows server (no Internet connnection is required to process data!) or into private cloud server. Can store data on in-house local server based storage or in Amazon AWS S3 bucket. Processing data solely on the server using built-in ByteScout powered engine, no cloud services are used to process your data!.
On-demand (REST Web API) version:
Web API (on-demand version)
On-premise offline SDK for Windows:
60 Day Free Trial (on-premise)
program ConvertDOCToPDFFromUploadedFile;
//*******************************************************************************************//
// //
// Download Free Evaluation Version From: https://bytescout.com/download/web-installer //
// //
// Also available as Web API! Get Your Free API Key: https://app.pdf.co/signup //
// //
// Copyright ? 2017-2020 ByteScout, Inc. All rights reserved. //
// https://www.bytescout.com //
// https://pdf.co //
// //
//*******************************************************************************************//
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Classes,
IdHTTP,
IdURI,
IdSSL,
IdSSLOpenSSL,
System.JSON,
IdMultipartFormData;
const
// The authentication key (API Key).
// Get your own by registering at https://app.pdf.co/documentation/api
API_KEY: string = '********************************************'
// Source DOC or DOCX file
SOURCE_FILE: string = 'sample.docx';
// Destination PDF file name
DESTINATION_FILE: string = 'result.pdf';
var
http: TIdHTTP;
http_file_downloader: TIdHTTP;
http_file_uploader: TIdHTTP;
response_stream: TStringStream;
response: string;
io_handler: TIdSSLIOHandlerSocketOpenSSL;
response_json: TJSONObject;
is_error: TJSONBool;
file_url: string;
file_stream: TFileStream;
error_message: TJSONString;
presigned_url: string;
uploaded_file_url: string;
query: string;
waiting_any_key: char;
multi_part_form_data_stream: TIdMultiPartFormDataStream;
file_name: string;
begin
// Put the necessary libeay32.dll & ssleay32.dll library versions in the
// program folder
io_handler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
io_handler.SSLOptions.Method := sslvSSLv23;
io_handler.SSLOptions.SSLVersions := [sslvSSLv23];
http := TIdHTTP.Create(nil);
http.HTTPOptions := http.HTTPOptions + [hoForceEncodeParams];
http.AllowCookies := true;
http.HandleRedirects := true;
http.Request.Connection := 'keep-alive';
http.Request.ContentType := 'application/json; charset=utf-8';
http.Request.UserAgent := 'User-Agent:Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36';
http.IOHandler := io_handler;
response_stream := TStringStream.Create();
file_stream := nil;
http_file_uploader := nil;
multi_part_form_data_stream := nil;
http_file_downloader := nil;
try
try
// 1. RETRIEVE THE PRESIGNED URL TO UPLOAD THE FILE.
// * If you already have a direct file URL, skip to the step 3.
// Prepare URL for `Get Presigned URL` API call
query := TIdURI.URLEncode(Format('https://localhost/file/upload/get-presigned-url' +
'?contenttype=application/octet-stream&name=%s',
[ExtractFileName(SOURCE_FILE)]));
// Set API Key
http.Request.CustomHeaders.AddValue('x-api-key', API_KEY);
// Execute request
http.Get(query, response_stream);
// Parse JSON response
response_json := TJSONObject.ParseJSONValue(response_stream.DataString, false) as TJSONObject;
is_error := response_json.Values['error'] as TJSONBool;
if (not is_error.AsBoolean) then begin
// Get URL to use for the file upload
presigned_url := TJSONString(response_json.Values['presignedUrl']).ToString();
presigned_url := StringReplace(presigned_url, '"', '', [rfReplaceAll]);
// Get URL of uploaded file to use with later API calls
uploaded_file_url := TJSONString(response_json.Values['url']).ToString();
uploaded_file_url := StringReplace(uploaded_file_url, '"', '', [rfReplaceAll]);
// 2. UPLOAD THE FILE TO CLOUD.
http_file_uploader := TIdHTTP.Create(nil);
http_file_uploader.AllowCookies := true;
http_file_uploader.HandleRedirects := true;
http_file_uploader.Request.CustomHeaders.AddValue('x-api-key', API_KEY);
http_file_uploader.Request.CustomHeaders.AddValue('content-type', 'application/octet-stream');
file_stream := TFileStream.Create(SOURCE_FILE, fmOpenRead);
response := http_file_uploader.Put(presigned_url, file_stream);
file_stream.Free();
// 3. CONVERT UPLOADED DOC (DOCX) FILE TO PDF
// Prepare URL for `DOC To PDF` API call
query := TIdURI.URLEncode(Format('https://localhost/pdf/convert/from/doc' +
'?name=%s&url=%s',
[ExtractFileName(DESTINATION_FILE), uploaded_file_url]));
// Execute request
response_stream.Clear();
http.Get(query, response_stream);
response_json := TJSONObject.ParseJSONValue(response_stream.DataString, false) as TJSONObject;
is_error := response_json.Values['error'] as TJSONBool;
if (not is_error.AsBoolean) then begin
file_url := TJSONString(response_json.Values['url']).ToString();
file_url := StringReplace(file_url, '"', '', [rfReplaceAll]);
file_name := ExtractFileName(StringReplace(file_url, '/', '\', [rfReplaceAll]));
file_name := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + file_name;
http_file_downloader := TIdHTTP.Create(nil);
// Download generated file
file_stream := TFileStream.Create(file_name, fmCreate);
http_file_downloader.Get(file_url, file_stream);
Writeln(Format('Generated PDF file saved as "%s" file."', [file_name]));
end else begin
error_message := response_json.Values['message'] as TJSONString;
raise Exception.Create(error_message.ToString);
end;
end else begin
error_message := response_json.Values['message'] as TJSONString;
raise Exception.Create(error_message.ToString);
end;
except
on E: Exception do begin
response := http.ResponseText;
Writeln(E.ClassName, ': ', E.Message);
end;
end;
finally
response_stream.Free();
http.Free();
if (Assigned(file_stream)) then
file_stream.Free();
if (Assigned(multi_part_form_data_stream)) then
multi_part_form_data_stream.Free();
if (Assigned(http_file_uploader)) then
http_file_uploader.Free();
if (Assigned(http_file_downloader)) then
http_file_downloader.Free();
Writeln('Press any key to continue...');
Readln(waiting_any_key);
end;
end.
See also:
Get Your API Key
See also: