* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Novembre 23, 2024, 11:58:26 am

Inserisci il nome utente, la password e la durata della sessione.

61 Visitatori, 0 Utenti

Autore Topic: [Risolto] lazReport - primi passi - 2.a parte  (Letto 7266 volte)

petrusic

  • Hero Member
  • *****
  • Post: 624
  • Karma: +0/-0
[Risolto] lazReport - primi passi - 2.a parte
« il: Febbraio 22, 2023, 11:08:59 pm »
Non metto mani ad un report in Lazarus da quasi un anno, anche se, dopo quanto appreso e messo in pratica lo scorso anno, ho potuto incontrare alcune tipicità che vorrei affrontare in questa occasione per  migliorarmi.
Nel nuovo report in costruzione vorrei impostare un modello di stampa con il Formato A5 e vorrei produrre un file in formato PDF da stampare, eventualmente, successivamente alla sua produzione.

Quindi le domande sono:
- come impostare il formato A5;
- come produrre  una stampa sul file

L'ultima domanda nasce dal fatto che oggi, riesco a stampare soltanto se comando la stampa agendo sull'icona "Print Report" che compare nella finestra video del Report creato con LazReport. Non ho perciò la possibilità in quel momento  di optare per destinare l'output ad un file PDF, piuttosto  che alla stampante.
« Ultima modifica: Marzo 03, 2023, 09:56:38 pm da petrusic »
ciao ciao

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3274
  • Karma: +12/-0
Re:lazReport - primi passi - 2.a parte
« Risposta #1 il: Febbraio 23, 2023, 09:12:10 am »
Per stampare in pdf da lazreport devi usare trascinare sulla form il componente TfrTNPDFExport (ad esempio con il nome frTNPDFExport1), per farlo devi avere installato il pacchetto che trovi nella directory directory_dove_è_installato_lazarus\components\lazreport\source\addons\pdfexport\lazreportpdfexport.lpk


Detto questo poi ipotizzando che il tuo oggetto TfrReport si chiami MyReport ed hai già provveduto a disegnarlo, devi fare quanto segue

Codice: [Seleziona]
               if MyReport.PrepareReport then
               begin
                    SaveDialog1.Filter:='PDF files (*.pdf)|*.pdf';
                    SaveDialog1.FileName:='NomeDelFile_' + StringReplace(DateToStr(Now()),'/','', [rfReplaceAll]) + '_' + StringReplace(TimeToStr(Now()) ,':','.', [rfReplaceAll]);
                    if SaveDialog1.Execute then
                    begin
                         if uppercase(ExtractFileExt(SaveDialog1.FileName))='.PDF' then
                         begin
                              //non faccio niente, il nome è già corretto
                              NomePDF:=SaveDialog1.FileName;
                         end
                         else
                         begin
                              //il nome non è corretto, quindi ci aggiungo il .pdf alla fine
                              NomePDF:=SaveDialog1.FileName + '.pdf';
                         end;
                         Screen.Cursor := crHourglass;
                         MyReport.ExportTo(TFrTNPDFExportFilter, NomePDF);
                         Screen.Cursor := crDefault;
                         ShowMessage('Creazione del file PDF terminata.');
                    end;
               end;

Detto questo poi rispondo anche alla tua domanda di come mandare in stampa senza passare dalla preview, io ipotizzo che tu usi il comando

MyReport.ShowReport

che apre la preview, se vuoi mandare direttamente in stampa usa il seguente codice

Codice: [Seleziona]

               if GedDefaultPrinter(NomeStampante)=FALSE then
               begin
                    ShowMessage('Nessuna stampante predefinita.');
               end
               else
               begin
                    MyReport.ChangePrinter(printer.PrinterIndex, -1);
                    if MyReport.PrepareReport then
                    begin
                         MyReport.PrintPreparedReport('',1) {Primo parametro è il numero di pagina, se è vuoto le fa tutte, il secondo è il numero di copie}
                    end
                    else
                    begin
                         ShowMessage('Stampante non raggiungibile.');
                    end;
               end;


Ti ricordo poi che quando l'eseguibile è in esecuzione puoi sempre lanciare il desiger report con il comando

MyReport.DesignReport;

Spero di essere stato esaustivo. Ciao e buon lavoro
Ieri è passato, domani è futuro, oggi è un dono...

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3274
  • Karma: +12/-0
Re:lazReport - primi passi - 2.a parte
« Risposta #2 il: Febbraio 23, 2023, 09:14:29 am »
Per il formato A5 devi dal design report andare su File -> Opzioni pagina -> nella tab Carta cambiare la dimensione dal menù a tendina. Ovviamente meglio se lo fai prima di disegnare il tuo report.

Ciao
Ieri è passato, domani è futuro, oggi è un dono...

petrusic

  • Hero Member
  • *****
  • Post: 624
  • Karma: +0/-0
Re:lazReport - primi passi - 2.a parte
« Risposta #3 il: Febbraio 23, 2023, 12:29:24 pm »
Per stampare in pdf da lazreport devi usare trascinare sulla form il componente TfrTNPDFExport (ad esempio con il nome frTNPDFExport1), per farlo devi avere installato il pacchetto che trovi nella directory directory_dove_è_installato_lazarus\components\lazreport\source\addons\pdfexport\lazreportpdfexport.lpk

Grazie per tutte le tue preziose indicazioni. e comincio da quella che sta alla base della produzione srtampe in PDF.

Ho trovato il file lazreportpdfexport.lpk, ho trovato anche il file tfrtnpdfexport.png, contenente l'icona corrispondente,  però non trovo l'icona nella finestra di Lazarus-IDE -> LazReport, come puoi riscontrare nell'allegato.

Ho cercato il pacchetto fra quelli installati/installabili, ma non l'ho trovato, perciò sono sempre in difficoltà, perchè nonostante che abbia trovato i file corrispondente, sembrerebbe che il pacchetto non è installato.

Devo installarlo manualmente? Come?          S.O. attuale: Linux Ubuntu 22.04.2 LTS)
« Ultima modifica: Febbraio 23, 2023, 12:39:04 pm da petrusic »
ciao ciao

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3274
  • Karma: +12/-0
Re:lazReport - primi passi - 2.a parte
« Risposta #4 il: Febbraio 23, 2023, 12:43:24 pm »
Se non lo trovi devi installarlo. Devi andare su Pacchetto -> Apri il file del pacchetto (.lpk) -> Selezionare il file lpk che ti ho detto nel post sopra -> Premi sul pulsante Compila. Quando ha finito premi sul pulsante Use->Installa

Questa è la procedura d'installazione. Ricorda che questo pacchetto ha una dipendenza da pack_powerpdf. Quindi prima devi installare lui. Pack_powerpdf non lo trovi già sul tuo sistema quindi devi andare su Pacchetto -> Online package Manager cercare nella lista la voce PowerPDF e dopo averla selezionata premere sul pulsante Install.
Ieri è passato, domani è futuro, oggi è un dono...

petrusic

  • Hero Member
  • *****
  • Post: 624
  • Karma: +0/-0
Re:lazReport - primi passi - 2.a parte
« Risposta #5 il: Febbraio 23, 2023, 04:30:47 pm »
Se non lo trovi devi installarlo. Devi andare su Pacchetto -> Apri il file del pacchetto (.lpk) -> Selezionare il file lpk che ti ho detto nel post sopra -> Premi sul pulsante Compila. Quando ha finito premi sul pulsante Use->Installa
Questa è la procedura d'installazione. Ricorda che questo pacchetto ha una dipendenza da pack_powerpdf. Quindi prima devi installare lui. Pack_powerpdf non lo trovi già sul tuo sistema quindi devi andare su Pacchetto -> Online package Manager cercare nella lista la voce PowerPDF e dopo averla selezionata premere sul pulsante Install.

Fatto. Ora il componente compare fra quelli sotto la linguetta LazReport.

Citazione da: xinyiman
rispondo anche alla tua domanda di come mandare in stampa senza passare dalla preview, io ipotizzo che tu usi il comando MyReport.ShowReport
che apre la preview, se vuoi mandare direttamente in stampa usa il seguente codice
. . .

In realtà non pensavo ad un'alternativa fra stampa su file .PDF e stampa diretta, senza Anteprima. Vorrei, infatti, produrre sempre l'export in PDF e, poi, comandare la stampa del PDF appena creato.

Ciò, tradotto in pratica, potrebbe significare che dopo avere eseguito l'export in PDF, dovrei:
- comandare da programma, a fine Anteprima, una shell di stampa del File .PDF;
oppure, in alternativa,
- eseguire la stampa direttamente, per esempio, dopo essere uscito dall'anteprima.


ciao ciao

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3274
  • Karma: +12/-0
Re:lazReport - primi passi - 2.a parte
« Risposta #6 il: Febbraio 23, 2023, 05:05:51 pm »
Semplicemente puoi usare la funzione OpenDocument

Codice: [Seleziona]
uses
  ..., LCLIntf;
  
procedure ...
begin
  OpenDocument('nome_file.pdf');
end;

Che ti permette di lanciare dei documenti con il programma predefinito per il sistema operativo.
Ieri è passato, domani è futuro, oggi è un dono...

petrusic

  • Hero Member
  • *****
  • Post: 624
  • Karma: +0/-0
Re:lazReport - primi passi - 2.a parte
« Risposta #7 il: Febbraio 23, 2023, 10:22:40 pm »
Semplicemente puoi usare la funzione OpenDocument

Codice: [Seleziona]
uses
  ..., LCLIntf;
 
procedure ...
begin
  OpenDocument('nome_file.pdf');
end;

Che ti permette di lanciare dei documenti con il programma predefinito per il sistema operativo.

Ah, perfetto.

Per il formato A5 devi dal design report andare su File -> Opzioni pagina -> nella tab Carta cambiare la dimensione dal menù a tendina. Ovviamente meglio se lo fai prima di disegnare il tuo report.
Anche questa modifica è andata a segno.

Per il resto ancora da fare, ti faccio sapere.
ciao ciao

petrusic

  • Hero Member
  • *****
  • Post: 624
  • Karma: +0/-0
Re:lazReport - primi passi - 2.a parte
« Risposta #8 il: Febbraio 25, 2023, 12:23:51 pm »
Sto cercando di impostare il report di stampa, ma ho ancora qualche difficoltà:
- Ho scorso il contenuto del file .lrf prodotto durante il disegno del modulo di report, ma non trovato i riferimenti alla dimensione di pagina di tipo A5 (le dimensioni che vi ho trovate mi sembrano uguali a quelle di default, quindi A4)
Codice: [Seleziona]
 . . .
 <Page1>
        <Name Value="Page1"/>
        <ClassName Value="TfrPageReport"/>
        <Visible Value="True"/>
        <Width Value="595"/>
        <Height Value="842"/>
        <Script Value=""/>
        <PgSize Value="9"/>
        <Margins>
          <left Value="0"/>
          <Top Value="0"/>
          <Right Value="0"/>
          <Bottom Value="0"/>
        </Margins>
        <Orientation Value="poPortrait"/>
        <UseMargins Value="True"/>
        <PrintToPrevPage Value="False"/>
        <ColCount Value="0"/>
        <ColGap Value="0"/>
        <LayoutOrder Value="loColumns"/>
 . . .
  ho cercato anche di vedere l'impostazione di pagina nella finestra Designer, m andando in File -> opzioni pagina, si accende il messaggio d'Errore "Paper "A4 210 x 297 mm" not supported!", riportato nell'allegato, però ieri sono riuscito ad andare avanti fino a selezionare la dimensione pagina A5.
« Ultima modifica: Febbraio 25, 2023, 04:25:04 pm da petrusic »
ciao ciao

petrusic

  • Hero Member
  • *****
  • Post: 624
  • Karma: +0/-0
Re:lazReport - primi passi - 2.a parte
« Risposta #9 il: Febbraio 25, 2023, 03:34:07 pm »
Per il dimensionamento della pagina di stampa, ho trovato che tutti i dimensionamenti selezionabili sono presenti nel file /usr/share/lazarus/2.2.4/components/lazreport/source/lr_prntr.pas
Nel file ho rilevato poi le impostazioni relative:
-  A4:   X:595;  Y:842
-  A5:  X:420;  Y:595

Quindi, per correggere le attuali impostazioni presenti nel file  mioReportA5.lrf, dovrei:
Codice: [Seleziona]
 <Page1>
        <Name Value="Page1"/>
        <ClassName Value="TfrPageReport"/>
        <Visible Value="True"/>
        <Width Value="595"/>       <--- cambiare 595 in 420
        <Height Value="842"/>       <--- cambiare 842 in 595
Così facendo, penso che lo scopo è raggiunto. Vorrei aggiungere un commento, ma non so come si fa.

Non ricordavo l'icona relativa all'inserimento delle Memo, ma poi l'ho individuata.
« Ultima modifica: Febbraio 25, 2023, 04:28:51 pm da petrusic »
ciao ciao

petrusic

  • Hero Member
  • *****
  • Post: 624
  • Karma: +0/-0
Re:lazReport - primi passi - 2.a parte
« Risposta #10 il: Febbraio 26, 2023, 09:35:46 am »
Per il dimensionamento della pagina di stampa, ho trovato che tutti i dimensionamenti selezionabili sono presenti nel file /usr/share/lazarus/2.2.4/components/lazreport/source/lr_prntr.pas
Nel file ho rilevato poi le impostazioni relative:
-  A4:   X:595;  Y:842
-  A5:  X:420;  Y:595

Quindi, per correggere le attuali impostazioni presenti nel file  mioReportA5.lrf, dovrei:
Codice: [Seleziona]
 <Page1>
        <Name Value="Page1"/>
        <ClassName Value="TfrPageReport"/>
        <Visible Value="True"/>
        <Width Value="595"/>       <--- cambiare 595 in 420
        <Height Value="842"/>       <--- cambiare 842 in 595
Così facendo, penso che lo scopo è raggiunto. Vorrei aggiungere un commento, ma non so come si fa.

Invece non ha funzionato, perchè, alla prima modifica in  Report Designer, i valori che ho impostati manualmente nel file mioReport.lrf vengono sempre alterati con valori assurdi che, probabilmente, provocano poi l'errore "Paper "A4 210 x 297 mm" not supported!",

Ecco le prime righe del file, dove è riscontrabile l'alterazione appena indicata:
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<CONFIG>
  <LazReport>
    <Version Value="31"/>
    <Title Value=""/>
    <Subject Value=""/>
    <KeyWords Value=""/>
    <Comments Value=""/>
    <ReportCreateDate Value="1899-12-30 00:00:00"/>
    <ReportLastChange Value="2023-02-25 23:12:44"/>
    <ReportVersionBuild Value=""/>
    <ReportVersionMajor Value=""/>
    <ReportVersionMinor Value=""/>
    <ReportVersionRelease Value=""/>
    <ReportAutor Value=""/>
    <Script Value=""/>
    <Pages>
      <PrintToDefault Value="False"/>
      <DoublePass Value="False"/>
      <SelectedPrinter Value="HP_OfficeJet_Pro_6960_C12CFC_USB"/>
      <PageCount Value="1"/>
      <Page1>
        <Name Value="Page1"/>
        <ClassName Value="TfrPageReport"/>
        <Visible Value="True"/>
        <Width Value="2100"/>        <--- ???
        <Height Value="2970"/>        <--- ???
        <Script Value=""/>
        <PgSize Value="9"/>
        <Margins>
          <left Value="0"/>
          <Top Value="0"/>
          <Right Value="0"/>
          <Bottom Value="0"/>
        </Margins>
        <Orientation Value="poPortrait"/>
        <UseMargins Value="True"/>
        <PrintToPrevPage Value="False"/>
        <ColCount Value="0"/>
        <ColGap Value="0"/>
        <LayoutOrder Value="loColumns"/>

Non nascondo le mie difficoltà a creare questo nuovo report. Sto faticando forse più della prima volta ed ancora non ho finito.
Forse, sapendo come costruire il file manualmente, si farebbe prima e meglio. Il guaio è però che non so dove attingere le informazioni necessarie per realizzare praticamente il mio pensiero.
 :-\
ciao ciao

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1399
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:lazReport - primi passi - 2.a parte
« Risposta #11 il: Febbraio 26, 2023, 11:44:34 am »
Purtroppo non posso aiutarti, però posso sconsigliarti dal modificare a mano file che vengono usati dai componenti di Lazarus (in generale vale per ogni IDE) in quanto tali file vengono molto spesso rigenerati o al caricamento del componente o al salvataggio / modifica dello stesso.

In questo caso secondo me i dati che hai indicato sono dati secondari generati come "appoggio" pratico (probabilmente per generare l'interfaccia grafica) e non vengono usati direttamente dal componente.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

petrusic

  • Hero Member
  • *****
  • Post: 624
  • Karma: +0/-0
Re:lazReport - primi passi - 2.a parte
« Risposta #12 il: Febbraio 27, 2023, 12:53:42 pm »
Vista l'impossibilità ad impostare il formato di pagina A5 nel modello di report attuale, ne ho creato uno nuovo.
Ho eseguito quindi "Strumenti→Opzioni Pagina" ed ho potuto così impostare la dimensione del foglio A5 e proseguire, poi, con le altre impostazioni di band e memo.
Devo però anche dire che, rientrando successivamente nelle impostazioni del report creato prima e volendo verificare la rispondenza della dimensione di pagina col formato A5, ritorna imperterrito il messaggio d'errore di dimensione nion supportata (Paper "A5 148x210 mm" not supported!.).

Ne deduco che ci sia un'anomalia, ma di che tipo? Manca pacchetto?
ciao ciao

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1399
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:lazReport - primi passi - 2.a parte
« Risposta #13 il: Febbraio 27, 2023, 01:22:38 pm »
Banalmente il progetto potrebbe essere danneggiato. Può essere "riparato" a mano ... ma visto che costruendo un nuovo report tutto funziona ti consiglio di cestinare quello vecchio e proseguire con quello nuovo,

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

petrusic

  • Hero Member
  • *****
  • Post: 624
  • Karma: +0/-0
Re:lazReport - primi passi - 2.a parte
« Risposta #14 il: Febbraio 27, 2023, 03:26:51 pm »
Banalmente il progetto potrebbe essere danneggiato. Può essere "riparato" a mano ... ma visto che costruendo un nuovo report tutto funziona ti consiglio di cestinare quello vecchio e proseguire con quello nuovo,

Ho provato a partire con un nuovo report ma questa volta non mi ha permesso ci impostare un formato pagina A5, infatti, dopo il click su File -> Opzioni pagina, è apparso subilto il messaggio di Errore "Paper "A4 210 x 297 mm" not supported!"

Ora NON so proprio come andare avanti.
ciao ciao

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19176
  • Topic in totale: 2287
  • Online Today: 102
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 61
Total: 61

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.