{"id":29903,"date":"2023-02-19T23:38:33","date_gmt":"2023-02-19T22:38:33","guid":{"rendered":"https:\/\/help.qualiware.it\/qw-help\/?p=29903"},"modified":"2023-09-27T23:08:51","modified_gmt":"2023-09-27T21:08:51","slug":"fd-visualizzatoredocumento","status":"publish","type":"post","link":"https:\/\/help.qualiware.it\/qw-help\/fd-visualizzatoredocumento\/","title":{"rendered":"OGGETTO VISUALIZZATORE DOCUMENTO"},"content":{"rendered":"<h4 align=\"left\"><a name=\"progettazione_form_proprieta\"><\/a>Descrizione<\/h4>\n<p>L&#8217;oggetto <strong>VisualizzatoreDocumento<\/strong>, disponibile a partire dalla release 2023.00+ solo per la versione desktop, consente la visualizzazione di un file in formato PDF, Word, Excel, PowerPoint, HTML ed e-Mail.<\/p>\n<p>Attraverso apposite propriet\u00e0, \u00e8 possibile definire se l&#8217;utente pu\u00f2 inserire annotazioni o meno. E&#8217; inoltre possibile estrarre o assegnare tali annotazioni.<\/p>\n<p>NOTA IMPORTANTE: per motivi di performance legati alla struttura dell&#8217;oggetto, \u00e8 indispensabile inserire l&#8217;oggetto all&#8217;interno di un oggetto <a href=\"https:\/\/help.qualiware.it\/qw-help\/fd-contenitore\/\">Contenitore<\/a> avente la propriet\u00e0 <strong>ContenitoreAggiornamento<\/strong> a true. Tutti gli altri oggetti del form dovranno a loro volta essere inseriti in un oggetto Contenitore avente anch&#8217;esso tale propriet\u00e0 a True. In questo modo, si eviter\u00e0 che ogni PostBack della pagina aggiorni la visualizzazione del documento, perdendo eventuali modifiche fatte.<br \/>\nE&#8217; evidente che eventuali aggiornamenti che dovranno essere forzati, come ad esempio la modifica del documento visualizzato attraverso la propriet\u00e0 DocumentPath, oppure il caricamento delle annotazioni tramite il metodo ImportAnnotations, dovranno essere seguiti da una chiamata al metodo form.UpdateContainer passando come parametro il contenitore che contiene il visualizzatore.<\/p>\n<p><strong>Propriet\u00e0 specifiche<\/strong><\/p>\n<p>Oltre alle propriet\u00e0 comuni (<a href=\"http:\/\/help.qualiware.it\/qw-help\/fd-proprieta-comuni\/\u200e\">vedi<\/a>) non sono disponibili altre propriet\u00e0.<\/p>\n<h4 align=\"left\">Propriet\u00e0 utilizzabili da codice lato Server (VB.NET\/C#)<\/h4>\n<ul>\n<li><strong><span style=\"color: #993300;\">AllowDownload<\/span>:&nbsp;<\/strong>se&nbsp;<em>True<\/em> visualizza il pulsante per scaricare il file. Default <em>false<\/em>.<\/li>\n<li><strong><span style=\"color: #993300;\">AllowPrint<\/span>:&nbsp;<\/strong>se&nbsp;<em>True<\/em> visualizza il pulsante per stampareil file. Default <em>false<\/em>.<\/li>\n<li><strong><span style=\"color: #993300;\">DocumentPath<\/span>:<\/strong> percorso del documento visualizzato.<\/li>\n<li><strong><span style=\"color: #993300;\">EnableEditing<\/span>:&nbsp;<\/strong>se&nbsp;<em>True<\/em> (valore di default) \u00e8 possibile modificare il file, inserendo commenti, disegni, ecc. e modificando i valori in eventuali campi.<\/li>\n<li><strong><span style=\"color: #993300;\">ShowAnnotationsToolbar<\/span>:&nbsp;<\/strong>se&nbsp;<em>True<\/em> (valore di default) viene visualizzata la barra che consente di inserire annotazioni e commenti.<\/li>\n<li><strong><span style=\"color: #993300;\">ShowNavigationPanel<\/span>:&nbsp;<\/strong>se&nbsp;<em>True<\/em> (valore di default) viene visualizzato sulla sinistra il pannello di navigazione fra le pagine.<\/li>\n<li><strong><span style=\"color: #993300;\">Visible<\/span>:&nbsp;<\/strong>se&nbsp;<em>True<\/em> l&#8217;oggetto \u00e8 visibile nel form, in caso contrario lo si assegna con <em>False<\/em>.<\/li>\n<\/ul>\n<h4 align=\"left\">Metodi utilizzabili da codice lato Server (VB.NET\/C#)<\/h4>\n<p>Nel codice degli eventi \u00e8 possibile utilizzare i seguenti metodi:<\/p>\n<ul>\n<li><span style=\"color: #800000;\"><strong>LoadDocument(&lt;path&gt;)<\/strong>:<\/span> carica il documento di cui viene specificato il percorso.<\/li>\n<li><span style=\"color: #800000;\"><strong>ImportAnnotations(&lt;annotationsObject&gt;)<\/strong>:<\/span> carica le annotazioni contenute nella stringa JSON specificata nel parametro.<\/li>\n<\/ul>\n<h4 align=\"left\"><a name=\"eventi_form\"><\/a>Metodi utilizzabili da codice lato Client (Javascript)<\/h4>\n<ul>\n<li><strong><span style=\"color: #993300;\">show()<\/span>:&nbsp;<\/strong>visualizza l&#8217;oggetto.<\/li>\n<li><strong><span style=\"color: #993300;\">hide()<\/span>:&nbsp;<\/strong>nasconde l&#8217;oggetto.<\/li>\n<li><strong><span style=\"color: #993300;\">viewer()<\/span>:&nbsp;<\/strong>ritorna l&#8217;oggetto visualizzatore.<\/li>\n<li><strong><span style=\"color: #993300;\">saveAsBase64(&lt;callback&gt;)<\/span>:&nbsp;<\/strong>salva il file modificato in una stringa Base64 che viene passata alla funzione specificata nel parametro. Vedere esempio riportato sotto.<\/li>\n<li><strong><span style=\"color: #993300;\">exportAnnotations(&lt;callback&gt;)<\/span>:&nbsp;<\/strong>salva le annotazioni in formato JSON nella stringa che viene passata alla funzione specificata nel parametro. Vedere esempio riportato sotto.<\/li>\n<li><strong><span style=\"color: #993300;\">selectAnnotation(&lt;annotationID&gt;)<\/span>:&nbsp;<\/strong>seleziona l&#8217;annotazione avente l&#8217;identificativo specificato nel parametro &lt;annotationID&gt;<\/li>\n<li><strong><span style=\"color: #993300;\">selectAnnotationByText(&lt;text&gt;)<\/span>:&nbsp;<\/strong>seleziona l&#8217;annotazione avente il testo specificato nel parametro &lt;text&gt;<\/li>\n<li><strong><span style=\"color: #993300;\">addFreeTextAnnotation(&lt;text&gt;,&lt;pageNumber&gt;,&lt;X&gt;,&lt;Y&gt;,&lt;width&gt;,&lt;height&gt;,&lt;optional fontSize&gt;,&lt;optional fontColor&gt;)<\/span>: <\/strong>aggiunge una annotazione testuale contenente il testo &lt;text&gt; alla pagina &lt;pageNumber&gt; nella posizione e con la dimensione indicate dai parametri &lt;X&gt;, &lt;Y&gt;, &lt;width&gt; e &lt;height&gt;, e con la possibilit\u00e0 di specificare opzionalmente la dimensione del font nel parametro &lt;fontSize&gt; e il colore del testo nel parametro &lt;fontColor&gt;. Il metodo ritorna l&#8217;ID dell&#8217;annotazione.<\/li>\n<li><strong><span style=\"color: #993300;\">addRectangleAnnotation(&lt;text&gt;,&lt;pageNumber&gt;,&lt;X&gt;,&lt;Y&gt;,&lt;width&gt;,&lt;height&gt;,&lt;optional borderColor&gt;,&lt;optional fillColor&gt;)<\/span>: <\/strong>aggiunge un rettangolo identificato dal nome contenuto nel parametro &lt;text&gt; alla pagina &lt;pageNumber&gt; nella posizione e con la dimensione indicate dai parametri &lt;X&gt;, &lt;Y&gt;, &lt;width&gt; e &lt;height&gt;, e con la possibilit\u00e0 di specificare opzionalmente il colore del bordo nel parametro &lt;borderColor&gt; (default rosso) e il colore del riempimento nel parametro &lt;fillColor&gt; (default trasparente). Il metodo ritorna l&#8217;ID dell&#8217;annotazione.<\/li>\n<li><strong><span style=\"color: #993300;\">editAnnotation(&lt;annotationID&gt;,&lt;text&gt;)<\/span>: <\/strong>modifica l&#8217;annotazione avente l&#8217;identificativo specificato nel parametro annotationID assegnando il testo specificato nel parametro text<\/li>\n<li><strong><span style=\"color: #993300;\">deleteAnnotation(&lt;annotationID&gt;)<\/span>: <\/strong>elimina l&#8217;annotazione avente l&#8217;identificativo specificato nel parametro annotationID<\/li>\n<li><strong><span style=\"color: #993300;\">getAnnotationSizeAndPosition(&lt;annotationID&gt;)<\/span><\/strong><strong>: <\/strong>ritorna un oggetto con le propriet\u00e0 &#8220;x&#8221;, &#8220;y&#8221;, &#8220;width&#8221; ed &#8220;height&#8221; contenente la posizione e le dimensioni dell&#8217;annotazione avente l&#8217;identificativo specificato nel parametro annotationID<\/li>\n<li><strong><span style=\"color: #993300;\">getAnnotations()<\/span><\/strong><strong>: <\/strong>ritorna un array contenente tutte le annotazioni contenute nel documento<\/li>\n<li><strong><span style=\"color: #993300;\">getPageSize(&lt;page&gt;)<\/span><\/strong><strong>: <\/strong>ritorna un oggetto con le propriet\u00e0 &#8220;height&#8221; e &#8220;width&#8221; contenenti le dimensioni della pagina il cui numero \u00e8 specificato nel parametro<\/li>\n<li><strong><span style=\"color: #993300;\">getPageCount()<\/span><\/strong><strong>: <\/strong>ritorna il numero delle pagine del documento<\/li>\n<\/ul>\n<h4 align=\"left\">Esempio di utilizzo del metodo Javascript saveAsBase64<\/h4>\n<p>Il seguente codice pu\u00f2 essere collegato all&#8217;evento client di un pulsante, e salva il documento contenuto nell&#8217;oggetto DocumentViewer1 nel campo di testo multiriga Base64Document per poi richiamare il metodo ServerExecute dell&#8217;oggetto Procedura denominato SaveDocument, il quale salver\u00e0 il file.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">$('#&lt;DocumentViewer1&gt;').saveAsBase64(function(value) {\r\n    $('#&lt;Base64Document&gt;').setValue(value)\r\n    $('#&lt;SaveDocument&gt;').ServerExecute()\r\n    })<\/pre>\n<p>Questo \u00e8 il codice collegato all&#8217;EventoEsegui dell&#8217;oggetto procedura SaveDocument. Come si pu\u00f2 vedere, salva il contenuto Base64 contenuto nell&#8217;oggetto Base64Document nel file il cui percorso \u00e8 contenuto nell&#8217;oggetto Path.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Base64ToFile(form.FindControl(\"Base64Document\").Text,form.FindControl(\"Path\").value)<\/pre>\n<h4 align=\"left\">Esempio di utilizzo del metodo Javascript <strong>exportAnnotations<\/strong><\/h4>\n<p>Il seguente codice pu\u00f2 essere collegato all&#8217;evento client di un pulsante, e salva le annotazioni in formato JSON nel campo testo multiriga AnnotationJSON, per poi richiamare il metodo ServerExecute dell&#8217;oggetto Procedura denominato ElaboraAnnotazioni.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">$('#&lt;DocumentViewer1&gt;').exportAnnotations(function(value) {\r\n    $('#&lt;AnnotationJSON&gt;').setValue(value)\r\n    $('#&lt;ElaboraAnnotazioni&gt;').ServerExecute()\r\n})<\/pre>\n<p>Questo \u00e8 il codice collegato all&#8217;EventoEsegui dell&#8217;oggetto procedura ElaboraAnnotazioni. Come si pu\u00f2 vedere, viene usata la libreria NewtonSoft.JSON per estrarre le coordinate di tutte le annotazioni di tipo &#8220;Forma&#8221;, in particolare, in questo caso, un rettangolo, e utilizzarle poi per passarle ad un altro oggetto di tipo Procedura.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\">Dim obj As Newtonsoft.Json.linq.JObject = Newtonsoft.Json.linq.JObject.Parse(form.FindControl(\"AnnotationJSON\").value)\r\nDim i as integer\r\n\r\nFor i=0 To CType(obj(\"pdfAnnotation\")(\"0\")(\"shapeAnnotation\"),Newtonsoft.Json.Linq.JArray).count-1\r\n    dim ann as Newtonsoft.Json.Linq.JObject=obj(\"pdfAnnotation\")(\"0\")(\"shapeAnnotation\")(i)\r\n\r\n    dim X as Double=val(ann(\"Bounds\")(\"X\"))*72\/96\r\n    dim Y as Double=val(ann(\"Bounds\")(\"Y\"))*72\/96\r\n    dim width as Double=val(ann(\"Bounds\")(\"Width\"))*72\/96\r\n    dim height as Double=val(ann(\"Bounds\")(\"Height\"))*72\/96\r\n\r\n    form.FindControl(\"ExtractText\").Execute(X,Y,width,height)\r\nNext<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Descrizione L&#8217;oggetto VisualizzatoreDocumento, disponibile a partire dalla release 2023.00+ solo per la versione desktop, consente la visualizzazione di un file in formato PDF, Word, Excel, PowerPoint, HTML ed e-Mail. Attraverso apposite propriet\u00e0, \u00e8 possibile definire se l&#8217;utente pu\u00f2 inserire annotazioni o meno. E&#8217; inoltre possibile estrarre o assegnare tali annotazioni. NOTA IMPORTANTE: per motivi di&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"ngg_post_thumbnail":0,"footnotes":""},"categories":[6],"tags":[],"acf":[],"_links":{"self":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/29903"}],"collection":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/comments?post=29903"}],"version-history":[{"count":20,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/29903\/revisions"}],"predecessor-version":[{"id":29922,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/29903\/revisions\/29922"}],"wp:attachment":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/media?parent=29903"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/categories?post=29903"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/tags?post=29903"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}