<!DOCTYPE html> <html> <head> <title>sample42.rb</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <ul class="sections"> <li id="title"> <div class="annotation"> <h1>sample42.rb</h1> </div> </li> <li id="section-1"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-1">¶</a> </div> <p>GET request</p> </div> <div class="content"><div class='highlight'><pre>get <span class="hljs-string">'/sample-42-how-to-download-document-with-annotations-using-groupdocs'</span> <span class="hljs-keyword">do</span> haml <span class="hljs-symbol">:sample42</span> <span class="hljs-keyword">end</span></pre></div></div> </li> <li id="section-2"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-2">¶</a> </div> <p>POST request</p> </div> <div class="content"><div class='highlight'><pre>post <span class="hljs-string">'/sample-42-how-to-download-document-with-annotations-using-groupdocs'</span> <span class="hljs-keyword">do</span></pre></div></div> </li> <li id="section-3"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-3">¶</a> </div> <p>Set variables</p> </div> <div class="content"><div class='highlight'><pre> set <span class="hljs-symbol">:client_id</span>, params[<span class="hljs-symbol">:clientId</span>] set <span class="hljs-symbol">:private_key</span>, params[<span class="hljs-symbol">:privateKey</span>] set <span class="hljs-symbol">:file_id</span>, params[<span class="hljs-symbol">:fileId</span>] set <span class="hljs-symbol">:base_path</span>, params[<span class="hljs-symbol">:basePath</span>] <span class="hljs-keyword">begin</span></pre></div></div> </li> <li id="section-4"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-4">¶</a> </div> <p>Check required variables</p> </div> <div class="content"><div class='highlight'><pre> raise <span class="hljs-string">'Please enter all required parameters'</span> <span class="hljs-keyword">if</span> settings.client_id.empty? <span class="hljs-keyword">or</span> settings.private_key.empty?</pre></div></div> </li> <li id="section-5"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-5">¶</a> </div> <p>Prepare base path</p> </div> <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> settings.base_path.empty? base_path = <span class="hljs-string">'https://api.groupdocs.com'</span> <span class="hljs-keyword">elsif</span> settings.base_path.match(<span class="hljs-string">'/v2.0'</span>) base_path = settings.base_path.split(<span class="hljs-string">'/v2.0'</span>)[<span class="hljs-number">0</span>] <span class="hljs-keyword">else</span> base_path = settings.base_path <span class="hljs-keyword">end</span></pre></div></div> </li> <li id="section-6"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-6">¶</a> </div> <p>Configure your access to API server</p> </div> <div class="content"><div class='highlight'><pre> <span class="hljs-constant">GroupDocs</span>.configure <span class="hljs-keyword">do</span> |groupdocs| groupdocs.client_id = settings.client_id groupdocs.private_key = settings.private_key</pre></div></div> </li> <li id="section-7"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-7">¶</a> </div> <p>Optionally specify API server and version</p> </div> <div class="content"><div class='highlight'><pre> groupdocs.api_server = base_path <span class="hljs-comment"># default is 'https://api.groupdocs.com'</span> <span class="hljs-keyword">end</span> document = <span class="hljs-constant">GroupDocs::Storage::File</span>.new(<span class="hljs-symbol">:guid</span> => settings.file_id).to_document</pre></div></div> </li> <li id="section-8"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-8">¶</a> </div> <p>Check, has document the annotations?</p> </div> <div class="content"><div class='highlight'><pre> raise <span class="hljs-string">'Your document has no annotations'</span> <span class="hljs-keyword">if</span> document.annotations!.empty?</pre></div></div> </li> <li id="section-9"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-9">¶</a> </div> <p>Create Hash with the options for job. :status=> -1 means the Draft status of the job</p> </div> <div class="content"><div class='highlight'><pre> options = {<span class="hljs-symbol">:actions</span> => [<span class="hljs-symbol">:import_annotations</span>], <span class="hljs-symbol">:name</span> => <span class="hljs-string">'sample'</span>}</pre></div></div> </li> <li id="section-10"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-10">¶</a> </div> <p>Create Job with provided options with Draft status (Sheduled job)</p> </div> <div class="content"><div class='highlight'><pre> job = <span class="hljs-constant">GroupDocs::Job</span>.create!(options)</pre></div></div> </li> <li id="section-11"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-11">¶</a> </div> <p>Add the documents to previously created Job</p> </div> <div class="content"><div class='highlight'><pre> job.add_document!(document, {<span class="hljs-symbol">:check_ownership</span> => <span class="hljs-keyword">false</span>})</pre></div></div> </li> <li id="section-12"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-12">¶</a> </div> <p>Update the Job with new status. :status => ‘0’ mean Active status of the job (Start the job)</p> </div> <div class="content"><div class='highlight'><pre> id = job.update!({<span class="hljs-symbol">:status</span> => <span class="hljs-string">'0'</span>}) i = <span class="hljs-number">1</span> <span class="hljs-keyword">while</span> i<<span class="hljs-number">5</span> <span class="hljs-keyword">do</span> sleep(<span class="hljs-number">5</span>) job = <span class="hljs-constant">GroupDocs::Job</span>.get!(id[<span class="hljs-symbol">:job_id</span>]) <span class="hljs-keyword">break</span> <span class="hljs-keyword">if</span> job.status == <span class="hljs-symbol">:archived</span> i = i + <span class="hljs-number">1</span> <span class="hljs-keyword">end</span></pre></div></div> </li> <li id="section-13"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-13">¶</a> </div> <p>Get the document into Pdf format</p> </div> <div class="content"><div class='highlight'><pre> file = job.documents!() document = file[<span class="hljs-symbol">:inputs</span>]</pre></div></div> </li> <li id="section-14"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-14">¶</a> </div> <p>Set iframe with document GUID or raise an error</p> </div> <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> document</pre></div></div> </li> <li id="section-15"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-15">¶</a> </div> <p>Add the signature in url</p> </div> <div class="content"><div class='highlight'><pre> iframe = <span class="hljs-string">"/document-annotation2/embed/<span class="hljs-subst">#{document[<span class="hljs-number">0</span>].guid}</span>"</span></pre></div></div> </li> <li id="section-16"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-16">¶</a> </div> <p>Construct result string</p> </div> <div class="content"><div class='highlight'><pre> url = <span class="hljs-constant">GroupDocs::Api::Request</span>.new(<span class="hljs-symbol">:path</span> => iframe).prepare_and_sign_url</pre></div></div> </li> <li id="section-17"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-17">¶</a> </div> <p>Generate iframe URL</p> </div> <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">case</span> base_path <span class="hljs-keyword">when</span> <span class="hljs-string">'https://stage-api-groupdocs.dynabic.com'</span> iframe = <span class="hljs-string">"https://stage-api-groupdocs.dynabic.com<span class="hljs-subst">#{url}</span>"</span> <span class="hljs-keyword">when</span> <span class="hljs-string">'https://dev-api-groupdocs.dynabic.com'</span> iframe = <span class="hljs-string">"https://dev-apps.groupdocs.com<span class="hljs-subst">#{url}</span>"</span> <span class="hljs-keyword">else</span> iframe = <span class="hljs-string">"https://apps.groupdocs.com<span class="hljs-subst">#{url}</span>"</span> <span class="hljs-keyword">end</span> iframe = <span class="hljs-string">"<iframe width='100%' height='600' id='downloadframe' frameborder='0' src='<span class="hljs-subst">#{iframe}</span>'></iframe>"</span> path = <span class="hljs-string">"<span class="hljs-subst">#{<span class="hljs-constant">File</span>.dirname(__FILE_<span class="hljs-number">_</span>)}</span>/../public/downloads"</span></pre></div></div> </li> <li id="section-18"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-18">¶</a> </div> <p>Remove all files from download directory or create folder if it not there</p> </div> <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> <span class="hljs-constant">File</span>.directory?(path) <span class="hljs-constant">Dir</span>.foreach(path) { |f| fn = <span class="hljs-constant">File</span>.join(path, f); <span class="hljs-constant">File</span>.delete(fn) <span class="hljs-keyword">if</span> f != <span class="hljs-string">'.'</span> && f != <span class="hljs-string">'..'</span> } <span class="hljs-keyword">else</span> <span class="hljs-constant">Dir::</span>mkdir(path) <span class="hljs-keyword">end</span> <span class="hljs-constant">GroupDocs::User</span>.download!(path, document[<span class="hljs-number">0</span>].outputs[<span class="hljs-number">0</span>].name, document[<span class="hljs-number">0</span>].outputs[<span class="hljs-number">0</span>].guid) message = <span class="hljs-string">"<span style=\"color:green\">File with annotations was downloaded to server's local folder. You can check them <a href=\"/downloads/<span class="hljs-subst">#{document[<span class="hljs-number">0</span>].outputs[<span class="hljs-number">0</span>].name}</span>\" download>here</a></span>"</span> <span class="hljs-keyword">else</span> raise <span class="hljs-string">'File was not converted'</span> <span class="hljs-keyword">end</span> <span class="hljs-keyword">rescue</span> <span class="hljs-constant">Exception</span> => e err = e.message <span class="hljs-keyword">end</span></pre></div></div> </li> <li id="section-19"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-19">¶</a> </div> <p>Set variables for template</p> </div> <div class="content"><div class='highlight'><pre> haml <span class="hljs-symbol">:sample42</span>, <span class="hljs-symbol">:locals</span> => {<span class="hljs-symbol">:userId</span> => settings.client_id, <span class="hljs-symbol">:privateKey</span> => settings.private_key, <span class="hljs-symbol">:err</span> => err, <span class="hljs-symbol">:iframe</span> => iframe, <span class="hljs-symbol">:message</span> => message} <span class="hljs-keyword">end</span></pre></div></div> </li> </ul> </div> </body> </html>