Libreria PHPWord .... come fare

Raccoglitore di domande e risposte relative a ScriptCase, il generatore di codice php per lo sviluppo rapido di applicazioni.
Regole del forum
Nel forum è vietato fare pubblicità senza avere l'autorizzazione dello staf di Netspecial.
Rispondi
Giovannino
Messaggi: 116
Iscritto il: 06 ott 2014, 08:56

Libreria PHPWord .... come fare

Messaggio da Giovannino » 03 dic 2020, 19:07

Ciao a tutti,

sto riesumando un progetto di test che avevo fatto una decina di anni fa e stavo cercando di rimetterlo in piedi e farlo pedalare con SC9.
Selezionando un fornitore da una riga di form tipo Multiple Records , sceglievo poi un doc word in cui facevo un merge dei dati provenienti
dalla riga selezionata.
Volevo provare a fare la stessa cosa non puntando a una directory esterna tipo require_once '../z_phpword_CG/PHPWord.php';
ma usando una libreria caricata su SC.
Ho trovato questo : https://github.com/PHPOffice/PHPWord ma non trovo il file.ZIP
Se qualcuno mi aiuta a scovarlo ... grazie
Non essendo programmatore non vorrei fare danni... ;-))
Grazie

Vincenzo
Messaggi: 139
Iscritto il: 11 apr 2014, 11:06

Re: Libreria PHPWord .... come fare

Messaggio da Vincenzo » 03 dic 2020, 19:12

tasto code sulla destra in verde, click e si apre un menù, ultima voce Download ZIP.

Al limite, prima, sulla sinistra scegli il tag o il branch se vuoi qualcosa di specifico, di solito è selezionato il develop.

Giovannino
Messaggi: 116
Iscritto il: 06 ott 2014, 08:56

Re: Libreria PHPWord .... come fare

Messaggio da Giovannino » 03 dic 2020, 20:45

Salve Vincenzo e grazie per info,
allora... scaricato il file PHPWord-develop.zip
Poi ho creato una libreria con nome Php_Word
Caricato lo ZIP e lui crea una cartella interna alla libreria che ho rinominato PHPWord
Nella riga di codice del bottone che lancia il doc word ho scritto:

sc_include_lib("Php_Word"); e poi ho provato anche sc_include_lib("PHPWord"); ma poi mi restituisce questi errori:

Fatal error: Uncaught Error: Class 'PHPWord' not found in C:\Program Files\NetMake\v9-php73\wwwroot\scriptcase\app\c4tm\control_word_merge\control_word_merge_apl.php:1612 Stack trace: #0 C:\Program Files\NetMake\v9-php73\wwwroot\scriptcase\app\c4tm\control_word_merge\control_word_merge_apl.php(1069): control_word_merge_apl->sc_btn_start_mail_merge() #1 C:\Program Files\NetMake\v9-php73\wwwroot\scriptcase\app\c4tm\control_word_merge\control_word_merge_apl.php(1099): control_word_merge_apl->ini_controle() #2 C:\Program Files\NetMake\v9-php73\wwwroot\scriptcase\app\c4tm\control_word_merge\index.php(2058): control_word_merge_apl->controle() #3 {main} thrown in C:\Program Files\NetMake\v9-php73\wwwroot\scriptcase\app\c4tm\control_word_merge\control_word_merge_apl.php on line 1612

Ha a che fare con la libreria o sono altri errori secondo te ?

Questo è il codice del bottone (ma non mi ricordo più nulla ;-(( ):

$err_message = false;
if(is_dir([glo_file_dir_name]) || empty([glo_file_dir_name])) //check if template uploaded and confirmed
{
$err_message = "Template not confirmed or no template selected!";
}
else
{
//include phpword library
//require_once '../z_phpword_CG/PHPWord.php';
//
sc_include_lib("PHPWord");

//output filename
$out_file = dirname([glo_file_dir_name]).'/'.basename([glo_file_dir_name],'.docx').'_output.docx';

//your mysql query to get records
// $sql_result = "SELECT * FROM partners WHERE id_partner < 6";
$sql_result = "SELECT id_partner, codice, ragsoc, indiri, citta, provincia, codcap, nazione,
contact FROM partners_selected WHERE selected_record= 1";
sc_select(result,$sql_result);
if($result !== false && !$result->EOF)
{
$PHPWord = new PHPWord();
//load template file
$document = $PHPWord->loadTemplate([glo_file_dir_name]);
while(true)
{
$document->setValue('ragsoc', htmlentities( $result->fields['ragsoc'] ));
$document->setValue('indiri', htmlentities( $result->fields['indiri'] ));
$document->setValue('codcap', htmlentities( $result->fields['codcap'] ));
$document->setValue('citta', htmlentities( $result->fields['citta'] ));
$result -> MoveNext();
if($result->EOF)
{
break;
}
else
{
$document->AddPage();
}
}
$result->close();
$document->save($out_file);
if(file_exists($out_file))
{
header('Content-Description: File Transfer');
header('Content-Type: application/docx');
header('Content-Disposition: attachment; filename='.basename($out_file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($out_file));
header("Content-Transfer-Encoding: binary");
ob_clean();
flush();
readfile($out_file);
//delete output file after download
unlink($out_file);
}
else
{
$err_message = "Could not create document!";
}
}
else
{
$err_message = "No records found!";
}
}
if($err_message)
{
echo "<script>alert('$err_message');</script>";
}
sc_exit(sel);

Vincenzo
Messaggi: 139
Iscritto il: 11 apr 2014, 11:06

Re: Libreria PHPWord .... come fare

Messaggio da Vincenzo » 03 dic 2020, 22:51

mmm se l'hai messa come external library penso che debba scrivere qualcosa tipo:

sc_include_library("prj", "Php_Word", "src/PhpWord/PhpWord.php", true, true );

è in quel file la dichiarazione della classe phpword, ma non l'ho mai usata quindi non so dirti se sarà sufficiente.

Giovannino
Messaggi: 116
Iscritto il: 06 ott 2014, 08:56

Re: Libreria PHPWord .... come fare

Messaggio da Giovannino » 04 dic 2020, 10:57

OK,
fatto la prova e modificato un po' il path perchè veniva duplicato da SC
Io non me ne capisco molto ma sembra che lui cerchi dove non c'è la directory della libreria.
Se serve la metto interna anche se non so bene la differenza.

Vedi immagine con errori e screenshots
Allegati
library.png
library.png (71.1 KiB) Visto 24413 volte

Vincenzo
Messaggi: 139
Iscritto il: 11 apr 2014, 11:06

Re: Libreria PHPWord .... come fare

Messaggio da Vincenzo » 04 dic 2020, 11:10

Giovannino ha scritto: 04 dic 2020, 10:57 OK,
fatto la prova e modificato un po' il path perchè veniva duplicato da SC
Io non me ne capisco molto ma sembra che lui cerchi dove non c'è la directory della libreria.
Se serve la metto interna anche se non so bene la differenza.
hai messo la libreria come public quindi il primo parametro della sc_inlude_library deve essere sys, io avevo messo prj perchè pensavo che l'avessi messa solo per quel progetto.

sc_include_library("sys", "Php_Word", "src/PhpWord/PhpWord.php", true, true );

inoltre una volta identificata la posizione della libreria ed il nome, attento anche al percroso, non so come hai unzippato i file dentro la libreria, ma se c'è la struttura dello zip con la cartella src, e dentro la cartella phpword etc devi mettere come ho messo io "src/PhpWord/PhpWord.php" o quanto meno rispecchiare il percorso esatto, altrimenti non ti trova il file.

Prova a vedere se su youtube la scriptcase ha messo un video di esempio su come utilizzare le librerie esterne.

Giovannino
Messaggi: 116
Iscritto il: 06 ott 2014, 08:56

Re: Libreria PHPWord .... come fare

Messaggio da Giovannino » 06 dic 2020, 11:57

Dopo ripetute prove ci ho rinunciato... no way . Non vorrei che ci fossero problemi anche con la libreria o compatibilità.

Ho ricreato una directory nelle applicazioni e ho copiato la vecchia libreria .... Ora va tutto liscio ma mi dispiace un po'.

require_once '../z_phpword_CG/PHPWord.php';

Domanda: quando si fa il deploy e si copia il progetto sul server SC copia tutto o mi devo ricordare di copiare manualmente la directory z_phpword_CG ?

Rispondi

Chi c’è in linea

Visitano il forum: Ahrefs [Bot], Semrush [Bot] e 5 ospiti