using System; using System.Collections.Generic; using System.Text; using ceTe.DynamicPDF; using PDFGenerator.BusinessLayer; using System.IO; using System.Collections; using PDFGenerator.BusinessLayer.DataSection; using ceTe.DynamicPDF.Merger; using Dundas.Charting.WebControl; using ceTe.DynamicPDF.PageElements; using ceTe.DynamicPDF.Text; using System.Data; using PDFGenerator.Presentation.TemplateGenerator; using ContrattoSei.Utilities; using System.Threading; namespace PDFGenerator { public class DocumentPDF { private string _tipologia; ArrayList _index; ArrayList _core; int _indexPage; int _corePage; int _currentPage; float _margineUP; float _pageHeight; float _margineDOWN; float _margineLEFT; float _margineRIGHT; float _writableYPot; float _indiceY; float _writableY; int _sectionSpace; int _numlastpage; // bool _navigatore; bool _glossario; //bool _copertina; bool _activeIndex; MergeDocument _documentoFinale; DataSetIndice _strutturaIndice; MemoryStream _imgGrafico; int _chapterNum; int _sectionNum; private Document _document; private ReportType _reportType; DataThread _dataThread; private OpenTypeFont _verdana, _verdanaBold, _verdanaItalic, _verdanaBoldItalic; private ImportedPage _page, _indice, _backPage; private float _writableYold; private byte[] _data; private string _banca; private string _notaPieDiPagina; /// /// indica se la nota a pič di pagina č presente. /// private bool _flagnotaPieDiPagina; //private List _note; private bool _saltoPagina; private string _AsteriscoVarProxato; private string _AsteriscoGradoCopertura; private int _numNotePiePaginaVarProxato = 0; private ListaNote _note = new ListaNote(); private float _ynotapiedipagina = 740; private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); public DocumentPDF(DataThread dataThread, string tipoReport) { #region region _dataThread = dataThread; _index = new ArrayList(); _core = new ArrayList(); _indexPage = 0; _corePage = 0; _currentPage = 0; _margineUP = 160; _pageHeight = 841.9F; _margineDOWN = 105; _margineLEFT = 42; _margineRIGHT = 259; _writableYPot = 0; _sectionSpace = 30; _numlastpage = -1; // _navigatore = false; _glossario = false; // _copertina = false; _activeIndex = false; _strutturaIndice = new DataSetIndice(); _imgGrafico = new System.IO.MemoryStream(); _documentoFinale = new MergeDocument(); _chapterNum = 0; _sectionNum = 0; //_data = null; _document = new Document(); _reportType = _dataThread.ReportsType.Find(delegate (ReportType r) { return r.Descrizione.ToUpper() == tipoReport; }); _document.Title = _reportType.Descrizione; _document.CompressionLevel = 9; _AsteriscoVarProxato = ""; _AsteriscoGradoCopertura = ""; string licenza = UtilityManager.getAppSetting("Licenza"); try { bool isValid = ceTe.DynamicPDF.Document.AddLicense(licenza); } catch (Exception ex) { try { logger.Error(string.Concat(ex.Message," ", dataThread.CodiceFiscale)); } catch { } throw; } // Create a standard security object StandardSecurity security = new StandardSecurity(); // Set the permissions on that security object //security.AllowPrint = false; security.AllowCopy = false; security.AllowEdit = false; // Add the security object to the document _document.Security = security; _document.PdfVersion = PdfVersion.v1_4; _document.PdfXVersion = PdfXVersion.PDF_X_3_2003; System.Reflection.Assembly thisExe; thisExe = System.Reflection.Assembly.GetExecutingAssembly(); string relativePath = UtilityManager.getAppSetting("ICCprofile"); System.IO.Stream file = thisExe.GetManifestResourceStream(relativePath); IccProfile iccProfile = new IccProfile(file); string configurationPath1 = UtilityManager.getAppSetting("ICCconfiguration"); string configurationPath2 = UtilityManager.getAppSetting("ICCconfiguration1"); string configurationPath3 = UtilityManager.getAppSetting("ICCconfiguration2"); string configurationPath4 = UtilityManager.getAppSetting("ICCconfiguration3"); OutputIntent outputIntent = new OutputIntent(configurationPath1, configurationPath2, configurationPath3, configurationPath4, iccProfile); _document.OutputIntents.Add(outputIntent); // Patryk Prepress _document.Trapped = Trapped.False; // Patryk Prepress _writableY = _margineUP; //Creo il PDF this.createFont(); this.addPage(); #endregion } private void SetTemplate(ImportedPage p) { p.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("REPORT " + _document.Title.ToUpper(), 38, 43, 250, 12, _verdanaBold, 11, ceTe.DynamicPDF.CmykColor.Red)); p.Elements.Add(new PageNumberingLabel("pagina %%SP%% di %%ST%%", 0, 820, 542, 12, _verdana, 7, ceTe.DynamicPDF.TextAlign.Right)); } public void insertCliente() { this.setPageFooterNomeCliente(_page); } public ImportedPage getCurrentPage() { return _page; } public float getSectionSpace() { return _sectionSpace; } private void createFont() { // Create a TrueType font class. _verdana = Globals.OpenTypeFontVerdana; _verdanaBold = Globals.OpenTypeFontVerdanaB; _verdanaItalic = Globals.OpenTypeFontVerdanaZ; _verdanaBoldItalic = Globals.OpenTypeFontVerdanaZ; } /// /// Stampo le note aggiunte alla pagina (document). /// Stampo solamente quelle con posizionamento a "PičDiPagina" e Stato "DaStampare" /// /// Questa funzione č richiamata dal metodo addPage. A differenza dell'altro overload di StampaNote,questo č richiamato quando non c'č salto pagina della tabella. /// public void StampaNote() { // stampo le note a pič di pagina prima di aggiungerne una nuova. //Ordinamento _note.Sort(delegate (Nota nota, Nota nota2) { return nota.NumeroAsterisco.CompareTo(nota2.NumeroAsterisco); }); _note.Reverse(); // distinct sul numero di asterischi. ListaNote newList = new ListaNote(); foreach (Nota objNota in _note) { if (newList.Find(delegate (Nota nota) { return nota.NumeroAsterisco == objNota.NumeroAsterisco; }) == null) newList.Insert(objNota); } _note = newList; foreach (Nota objNota in _note.FindAll(delegate (Nota t) { return t.Posizionamento == Nota.TipologiaPosizionamento.PičDiPagina && t.Stato == Nota.StatoNota.DaStampare; })) { // Per ora abbiamo solo note che sono o inferiori a 200 caratteri o di 254 (nota var proxato) // se la lunghezza delle note a pič di pagina dovesse cambiare questa gestione va rivista. if (objNota.Testo.Length > 200) _ynotapiedipagina -= 10; writeText(42, _ynotapiedipagina, objNota.Testo, 7, 512); objNota.Stato = Nota.StatoNota.Stampata; // Imposto la nota come gią stampata if (objNota.Testo.Length < 200) _ynotapiedipagina -= 12; else _ynotapiedipagina -= 22; } } /// /// Stampo le note aggiunte alla pagina (document). /// Stampo solamente quelle con posizionamento a PičDiPagina /// Stampo le note delle tabelle che stanno effettuando il saltopagina. /// /// Qusta funzione č richiamata solo quando una tabella sta effettuando il "saltopagina" non imposto quindi lo Stato della Nota su "Stampata". /// /// public void StampaNote(string idtabella) { // stampo le note a pič di pagina prima di aggiungerne una nuova. //Ordinamento _note.Sort(delegate (Nota nota, Nota nota2) { return nota.NumeroAsterisco.CompareTo(nota2.NumeroAsterisco); }); _note.Reverse(); // distinct sul numero di asterischi. ListaNote newList = new ListaNote(); foreach (Nota objNota in _note) { if (newList.Find(delegate (Nota nota) { return nota.NumeroAsterisco == objNota.NumeroAsterisco; }) == null) newList.Insert(objNota); } _note = newList; foreach (Nota objNota in _note.FindAll(delegate (Nota t) { return t.Posizionamento == Nota.TipologiaPosizionamento.PičDiPagina; })) { // Per ora abbiamo solo note che sono o inferiori a 200 caratteri o di 254 (nota var proxato) // se la lunghezza delle note a pič di pagina dovesse cambiare questa gestione va rivista. if (objNota.Testo.Length > 200) _ynotapiedipagina -= 10; writeText(42, _ynotapiedipagina, objNota.Testo, 7, 512); if (objNota.Testo.Length < 200) _ynotapiedipagina -= 12; else _ynotapiedipagina -= 22; } } private void addGlossario() { TemplateGenerator tg = new TemplateGenerator(); ImportedPage[] glox = tg.getGlossario(_dataThread.TipoReport.ToUpper(), _dataThread.Rete.ToUpper(), _dataThread.TipoContratto); foreach (ImportedPage p in glox) { this.SetTemplate(p); this.setPageFooter(p); this.setPageFooterNomeCliente(p); _document.Pages.Add(p); } #region vecchio glossario //string pdfRelativePath = null; ////V Provvisorio in attesa di montare la nuova gestione del glossario anche per diagnosi //ImportedPage temp = null; //if (_dataThread.Rete.ToUpper() == "F") // if(_dataThread.TipoReport.ToUpper() == "DIAGNOSI") // pdfRelativePath = UtilityManager.getAppSetting("GlossarioBF"); // else { // temp = tg.getGlossario(_dataThread.TipoReport.ToUpper(), _dataThread.Rete.ToUpper()); // } // //pdfRelativePath = UtilityManager.getAppSetting("GlossarioBF_Monitoraggio"); //else // if (_dataThread.TipoReport.ToUpper() == "DIAGNOSI") // pdfRelativePath = UtilityManager.getAppSetting("GlossarioSP"); // else // { // temp = tg.getGlossario(_dataThread.TipoReport.ToUpper(), _dataThread.Rete.ToUpper()); // } // //pdfRelativePath = UtilityManager.getAppSetting("GlossarioSP_Monitoraggio"); //System.Reflection.Assembly thisExe; //System.IO.Stream file = null; //if (pdfRelativePath != null) //GLOSSARIO DIAGNOSI Lo recupero dal template statico //{ // thisExe = System.Reflection.Assembly.GetExecutingAssembly(); // file = thisExe.GetManifestResourceStream(pdfRelativePath); // //PdfDocument PPP = new PdfDocument("C:\\Templ_avvertenzeBF.pdf"); // PdfDocument pp = new PdfDocument(file); // ImportedPage pg = null; // for (int _indicePagina = 1; _indicePagina <= pp.Pages.Count; _indicePagina++) // { // pg = new ImportedPage(pp.GetPage(_indicePagina)); // this.SetTemplate(pg); // this.setPageFooter(pg); // this.setPageFooterNomeCliente(pg); // _document.Pages.Add(pg); // } //} //else //Glossario Monitoraggio generato dinamicamente //{ // ImportedPage pg = temp; // this.SetTemplate(pg); // this.setPageFooter(pg); // this.setPageFooterNomeCliente(pg); // _document.Pages.Add(pg); //} //thisExe = System.Reflection.Assembly.GetExecutingAssembly(); //if (_dataThread.Rete == "F") // pdfRelativePath = UtilityManager.getAppSetting("TemplateAvvertenzeBF"); //else // pdfRelativePath = UtilityManager.getAppSetting("TemplateAvvertenzeSP"); //file = thisExe.GetManifestResourceStream(pdfRelativePath); #endregion //PdfDocument pp1 = new PdfDocument(file); ImportedPage pg1 = tg.getAvvertenze(_dataThread.TipoReport.ToUpper(), _dataThread.Rete.ToUpper(), _dataThread.TipoContratto);//= new ImportedPage(pp1.GetPage(1)); this.SetTemplate(pg1); this.setPageFooter(pg1); this.setPageFooterNomeCliente(pg1); _document.Pages.Add(pg1); _index.Add(_indice); _indiceY = _margineUP + 30; _activeIndex = true; _indexPage++; _indiceY = _margineUP; } //private void addNavigatore() //{ // string startDir = UtilityManager.getAppSetting("Path"); // string pdfRelativePath; // if (_rete == "F") // switch (_tipoReport.Trim()) // { // case "DIAGNOSI": // pdfRelativePath = UtilityManager.getAppSetting("NavigatoreBFDiagnosi"); // break; // case "PIANIFICAZIONE": // pdfRelativePath = UtilityManager.getAppSetting("NavigatoreBFPianificazione"); // break; // case "PROPOSTA": // pdfRelativePath = UtilityManager.getAppSetting("NavigatoreBFProposta"); // break; // case "MONITORAGGIO": // pdfRelativePath = UtilityManager.getAppSetting("NavigatoreBFMonitoraggio"); // break; // default: // pdfRelativePath = UtilityManager.getAppSetting("NavigatoreBFDiagnosi"); // break; // } // else // switch (_tipoReport.Trim()) // { // case "DIAGNOSI": // pdfRelativePath = UtilityManager.getAppSetting("NavigatoreSPDiagnosi"); // break; // case "PIANIFICAZIONE": // pdfRelativePath = UtilityManager.getAppSetting("NavigatoreSPPianificazione"); // break; // case "PROPOSTA": // pdfRelativePath = UtilityManager.getAppSetting("NavigatoreSPProposta"); // break; // case "MONITORAGGIO": // pdfRelativePath = UtilityManager.getAppSetting("NavigatoreSPMonitoraggio"); // break; // default: // pdfRelativePath = UtilityManager.getAppSetting("NavigatoreSPDiagnosi"); // break; // } // PdfDocument pp = new PdfDocument(startDir + pdfRelativePath); // for (int _indicePagina = 1; _indicePagina <= pp.Pages.Count; _indicePagina++) // { // ImportedPage pg = new ImportedPage(pp.GetPage(_indicePagina)); // //this.SetTemplate(pg); // //this.setPageFooter(pg); // //this.setPageFooterNomeCliente(pg); // _index.Add(pg); // _indexPage++; // } //} /// /// Scrive nel Db lo streaming PDF come array di byte /// /// /// restituisce l'array di byte[] inserito nel db /// public void deleteReportSuFileSystem(int idReport, string nomefile) { string targetFolder = getPdfForlder(); string file = @targetFolder + idReport + "_" + nomefile + ".pdf"; if (Directory.Exists(System.IO.Path.GetDirectoryName(file))) { File.Delete(file); } } public bool scriviSuFileSystem(int idReport) { string targetFolder = ""; string tipoSalvataggioReport = UtilityManager.getAppSetting("SavePDFtoDISK"); bool retValue = false; try { //Todo GEstione idReport = - 1 o = 0 ...errore in fase inserimento in GEstione_PDF_FTP switch (tipoSalvataggioReport) { case "0": // Salvataggio su DataBase ReportManager // Parametro Attualmente Gestito nel metodo DocumentPDF.insertIntoDb() retValue = true; break; case "1": // Salvataggio su File SYstem // Gestione test in locale e/o Generazione Campione targetFolder = UtilityManager.getAppSetting("SavePDFtoDISK_Folder"); _documentoFinale.Draw(@targetFolder + _dataThread.TipoReport + "_" + _dataThread.CodiceFiscale + "_" + _dataThread.Rete + ".pdf"); retValue = true; break; case "2": //_documentoFinale.Draw(@targetFolder + _dataThread.TipoReport + "_" + _dataThread.CodiceFiscale + "_" + _dataThread.Rete + ".pdf"); targetFolder = getPdfForlder(); _documentoFinale.Draw(@targetFolder + idReport + "_" + _dataThread.NomeFileReport + ".pdf"); retValue = true; break; default: break; } return retValue; } catch (Exception ex) { try { logger.Error(String.Concat(ex.Message, " ", idReport.ToString())); } catch { } return false; } } public int insertIntoDB() { //if (UtilityManager.getAppSetting("SavePDFtoDISK") == "1") // return 0; string saveToDisk = UtilityManager.getAppSetting("SavePDFtoDISK"); switch (saveToDisk) { case "1": return 0; case "2": //pk dave //break; return 0; default: return 0; //break; } List listaParametri = new List(); Parametro CodiceContratto = new Parametro(); CodiceContratto.ParameterName = "CodiceContratto"; CodiceContratto.DbType = DbType.String; CodiceContratto.Value = _dataThread.CodiceContratto; listaParametri.Add(CodiceContratto); Parametro Rete = new Parametro(); Rete.ParameterName = "Rete"; Rete.DbType = DbType.String; Rete.Value = _dataThread.Rete; listaParametri.Add(Rete); Parametro idCliente = new Parametro(); idCliente.ParameterName = "CodiceFiscale"; idCliente.DbType = DbType.String; idCliente.Value = _dataThread.CodiceFiscale; listaParametri.Add(idCliente); Parametro NomeCliente = new Parametro(); NomeCliente.ParameterName = "NomeCliente"; NomeCliente.DbType = DbType.String; NomeCliente.Value = _dataThread.NomeCliente; listaParametri.Add(NomeCliente); Parametro CognomeCliente = new Parametro(); CognomeCliente.ParameterName = "CognomeCliente"; CognomeCliente.DbType = DbType.String; CognomeCliente.Value = _dataThread.CognomeCliente; listaParametri.Add(CognomeCliente); Parametro utente = new Parametro(); utente.ParameterName = "TipoReport"; utente.DbType = DbType.String; utente.Value = _reportType.Descrizione; listaParametri.Add(utente); //V Inserito per i metadati Parametro codReport = new Parametro(); codReport.ParameterName = "codReport"; codReport.DbType = DbType.Int32; codReport.Value = _reportType.IdReport; listaParametri.Add(codReport); // Parametro img = new Parametro(); img.ParameterName = "img"; img.DbType = DbType.Binary; img.Value = this.getData(); listaParametri.Add(img); Parametro CodicePB = new Parametro(); CodicePB.ParameterName = "CodicePB"; CodicePB.DbType = DbType.String; CodicePB.Value = _dataThread.Agente; listaParametri.Add(CodicePB); Parametro NomePB = new Parametro(); NomePB.ParameterName = "NomePB"; NomePB.DbType = DbType.String; NomePB.Value = _dataThread.NomeAgente; listaParametri.Add(NomePB); Parametro CognomePB = new Parametro(); CognomePB.ParameterName = "CognomePB"; CognomePB.DbType = DbType.String; CognomePB.Value = _dataThread.CognomeAgente; listaParametri.Add(CognomePB); Parametro NumeroPagine = new Parametro(); NumeroPagine.ParameterName = "NumeroPagine"; NumeroPagine.DbType = DbType.Int32; NumeroPagine.Value = _documentoFinale.Pages.Count; listaParametri.Add(NumeroPagine); Parametro Identificativo = new Parametro(); Identificativo.ParameterName = "Identificativo"; Identificativo.DbType = DbType.Int32; Identificativo.Value = _reportType.TipoReport == TipoReport.DIAGNOSI ? _dataThread.IdReportPDFDiagnosi : _dataThread.IdReportPDFMonitoraggio; listaParametri.Add(Identificativo); string queryInserimento = UtilityManager.getAppSetting("QueryInserimento"); return Convert.ToInt32(DataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServer, queryInserimento, listaParametri)); // return DataAccess.ExecuteNonQueryStoredProcedure(DBProvider.SqlServer, queryInserimento, listaParametri); //else //{ // //V if it is daily run save always on the reporting online db // if (UtilityManager.getAppSetting("Periodico") != "1") // return DataAccess.ExecuteNonQueryStoredProcedure(DBProvider.SqlServer, queryInserimento, listaParametri); // else // return DataAccess.ExecuteNonQueryStoredProcedure(DBProvider.SqlServerStampeC6, queryInserimento, listaParametri); //} } public void inserisciLettera() { byte[] pdf = this.getData(); // Create two PDF document objects PdfDocument pdfA; GestoreLettera letter = new GestoreLettera(_dataThread.DataAccess); letter.RestGestoreLettera(); if (UtilityManager.getAppSetting("Periodico") != "1") { if (_dataThread.AdesioneSuccessivaAvanzato || _dataThread.ContrattoOld) pdfA = new PdfDocument(letter.componiLetteraBenvenuto(_dataThread.CodiceFiscale, _dataThread.Rete, TipoLettera.LetteraAccettazioneAttivazioneSeiPosticipata, _dataThread.TipoContratto, LetteraAccompagnamento.TipoReport.Diagnosi)); else pdfA = new PdfDocument(letter.componiLetteraBenvenuto(_dataThread.CodiceFiscale, _dataThread.Rete, TipoLettera.LetteraAccettazioneConAttivazioneSei, _dataThread.TipoContratto, LetteraAccompagnamento.TipoReport.Diagnosi)); } else { if (_dataThread.TipoReport.ToUpper().Trim() == "DIAGNOSI") pdfA = new PdfDocument(letter.componiLetteraAccompagnamento(_dataThread.CodiceFiscale, _dataThread.Rete, _dataThread.TipoContratto, LetteraAccompagnamento.TipoReport.Diagnosi)); else pdfA = new PdfDocument(letter.componiLetteraAccompagnamento(_dataThread.CodiceFiscale, _dataThread.Rete, _dataThread.TipoContratto, LetteraAccompagnamento.TipoReport.Monitoraggio)); } PdfDocument pdfB = new PdfDocument(pdf); //pdfA = new PdfDocument(LetteraBA.GetLetteraBA(_dataThread)); // Merge the two documents _documentoFinale = MergeDocument.Merge(pdfA, pdfB); // Save the PDF _data = _documentoFinale.Draw(); //if ((UtilityManager.getAppSetting("SavePDFtoDISK") == "1")) //{// solo quando scrivo sul File System // string targetFolder = UtilityManager.getAppSetting("SavePDFtoDISK_Folder"); // _documentoFinale.Draw(@targetFolder + _dataThread.TipoReport + "_" + _dataThread.CodiceFiscale + "_" + _dataThread.Rete + ".pdf"); //} // ToDo FC : spostato dopo inserimento in tabella GESTIONE_PDF_FTP // Gestione Salvataggio report file PDF //string targetFolder = ""; //string nomeFileReport =""; //string tipoSalvataggioReport = UtilityManager.getAppSetting("SavePDFtoDISK"); //switch (tipoSalvataggioReport) //{ // case "0": // // Salvataggio su DataBase ReportManager // // Parametro Attualmente Gestito nel metodo DocumentPDF.insertIntoDb() // break; // case "1": // // Salvataggio su File SYstem // // Gestione test in locale e/o Generazione Campione // targetFolder = UtilityManager.getAppSetting("SavePDFtoDISK_Folder"); // _documentoFinale.Draw(@targetFolder + _dataThread.TipoReport + "_" + _dataThread.CodiceFiscale + "_" + _dataThread.Rete + ".pdf"); // break; // case "2": // //_documentoFinale.Draw(@targetFolder + _dataThread.TipoReport + "_" + _dataThread.CodiceFiscale + "_" + _dataThread.Rete + ".pdf"); // targetFolder = getPdfForlder(); // _documentoFinale.Draw(@targetFolder + _dataThread.NomeFileReport + ".pdf"); // break; // default: // break; //} } public int getIdentityReport(string rete, string codicefiscale, string tipoReport) { List parametri = new List(); Parametro parametro = new Parametro(); parametro.ParameterName = "Rete"; parametro.DbType = DbType.AnsiStringFixedLength; parametro.Value = rete; parametri.Add(parametro); parametro = new Parametro(); parametro.ParameterName = "CodiceFiscale"; parametro.DbType = DbType.String; parametro.Value = codicefiscale; parametri.Add(parametro); //FC Gestione Parallelizzazione Processi // idReport č gestito dalla SP inserimento Gestione_Pdf_Ftp parametro = new Parametro(); parametro.ParameterName = "TipoReport"; parametro.DbType = DbType.String; parametro.Value = tipoReport; parametri.Add(parametro); string queryInserimento = UtilityManager.getAppSetting("GetIdReport"); //DataAccess.ExecuteNonQueryStoredProcedure(DBProvider.SqlServerStampeC6, queryInserimento, parametri); try { return Convert.ToInt32(_dataThread.DataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServerStampeC6, queryInserimento, parametri)); } catch (Exception ex) { try { logger.Error(String.Concat(ex.Message, " ", codicefiscale.ToString())); } catch { } return -1; } } private string getNomeFileReport(string pathFolder) { try { string nomeFile = pathFolder; //string tipoReport = ""; //switch (_dataThread.TipoReport) //{ // case "D": // tipoReport = "DP"; // break; // case "M": // tipoReport = "MP"; // break; // default: // break; //} nomeFile = nomeFile + "_" + _dataThread.CodiceFiscale; //nomeFile = tipoReport; return nomeFile; } catch (Exception e) { try { logger.Error(String.Concat(e.Message, " ", pathFolder.ToString())); } catch { } throw e; } } private static string getPdfForlder() { string pdfForder = ""; try { pdfForder = UtilityManager.getAppSetting("pathFolder"); //Da utilizzare solo se prevista gestione piu cartelle //string sPathPdf = UtilityManager.getAppSetting("pathFolder"); //string sDataLotto = DateTime.Now.ToString("yyyyMMdd"); //string prefissoFolder = UtilityManager.getAppSetting("prefissoFolder"); //string suffissoFolrder = UtilityManager.getAppSetting("suffissoFolder"); //string pdfForder = sPathPdf + "\\" + prefissoFolder + "_" + sDataLotto + "_" + suffissoFolrder; //if (!Directory.Exists(pdfForder)) // Directory.CreateDirectory(pdfForder); return pdfForder; } catch (Exception e) { try { logger.Error(String.Concat(e.Message, " ", pdfForder.ToString())); } catch { } throw e; } } /// /// ok /// /// private byte[] getData() { if (_data == null) { //if (_tipologia == "report") //{ this.completeIndice(); //} for (int i = 0; i < _indexPage; i++) { _document.Pages.Add((ImportedPage)_index[i]); } for (int i = 0; i < _core.Count; i++) { _document.Pages.Add((ImportedPage)_core[i]); } if (_glossario) this.addGlossario(); _document.InitialPage = 1; //genero i byte _data = _document.Draw(); } return _data; } //public void renderPDF() //{ // this.renderPDF(_document.Title + ".pdf"); //} //public void renderPDF(string downloadAsFileName) //{ // byte[] data = this.getData(); // PdfDocument pdfDoc = new PdfDocument(data); // MergeDocument mDoc = new MergeDocument(pdfDoc); // mDoc.CompressionLevel = 9; // if (downloadAsFileName == null) // mDoc.DrawToWeb(); // else // mDoc.DrawToWeb(downloadAsFileName); //} //public void renderPDFFromDB(int identificativo) //{ // this.renderPDFFromDB(identificativo, null); //} //public void renderPDFFromDB(int identificativo, string downloadAsFileName) //{ // PdfDocument pdfDoc = new PdfDocument(this.getDataFromDB(identificativo)); // MergeDocument mDoc = new MergeDocument(pdfDoc); // mDoc.CompressionLevel = 9; // if (downloadAsFileName == null) // mDoc.DrawToWeb(); // else // mDoc.DrawToWeb(downloadAsFileName); //} //private byte[] getDataFromDB(int identificativo) //{ // List listaParametri = new List(); // Parametro id = new Parametro(); // id.ParameterName = "id"; // id.DbType = DbType.Int32; // id.Value = identificativo; // listaParametri.Add(id); // return (byte[])DataAccess.ExecuteScalarStoredProcedure(DBProvider.SqlServer, "sp_readPDFImage_New", listaParametri); //} //============================================================== public float getMargineLeft() { return _margineLEFT; } //============================================================== private float getMargineRight() { return _margineRIGHT; } //============================================================== public float getLastPos() { if (_writableYPot != 0) this.setLastPos(_writableYPot); return _writableY; } public float getLastPos(string combo) { //if(_writableYPot != 0; // this.setLastPos(_writableYPot); //_writableYPot = 0; return _writableY; } //============================================================== public void setLastPos(float y) { //aggiorna la posizione da cui si puņ scrivere if (_saltoPagina && _currentPage < _corePage) { _page = _backPage; _currentPage = _corePage; _writableY = _margineUP + _writableYPot + _sectionSpace; } else { if (_writableYPot > y && y > 0) _writableY += (_writableYPot + _sectionSpace); else _writableY += (y + _sectionSpace); } _writableYold = _writableY; _saltoPagina = false; _writableYPot = 0; } //============================================================== public void setPotenzialeLastPos(float y, bool salto) { //aggiorna la posizione da cui si puņ scrivere _writableYPot = (y); _saltoPagina = salto; } //============================================================== public void returnLastPage() { //ritorno alla penultima pagina. Utile per il disegno delle sezioni in modalitą combo _writableY = _writableYold; _backPage = _page; _currentPage--; _page = (ImportedPage)_core[_core.Count - 2]; } //============================================================== public void creaIndice() { string pdfRelativePath; //if (_tipologia != "report") //{ // if (_rete == "F") // pdfRelativePath = UtilityManager.getAppSetting("Template"); // else // pdfRelativePath = UtilityManager.getAppSetting("TemplateSP"); //} //else //{ System.Reflection.Assembly thisExe; thisExe = System.Reflection.Assembly.GetExecutingAssembly(); if (_dataThread.Rete == "F") pdfRelativePath = UtilityManager.getAppSetting("TemplateReport"); else pdfRelativePath = UtilityManager.getAppSetting("TemplateReportSP"); //} System.IO.Stream file = thisExe.GetManifestResourceStream(pdfRelativePath); PdfDocument pp = new PdfDocument(file); _indice = new ImportedPage(pp.GetPage(1)); _indice.Elements.Add(new ceTe.DynamicPDF.PageElements.Rectangle(37, 122, 330, 13, 0, ceTe.DynamicPDF.CmykColor.Red)); _indice.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Indice", 50, 119, 100, 8, _verdanaBold, 15, ceTe.DynamicPDF.CmykColor.White)); this.SetTemplate(_indice); this.setPageFooter(_indice); this.setPageFooterNomeCliente(_indice); _index.Add(_indice); _indiceY = _margineUP + 30; _activeIndex = true; } //============================================================== private void completeIndice() { _margineDOWN = 105; if (_activeIndex) { ImportedPage app = (ImportedPage)_index[_indexPage]; //int indexCount = _indexPage + 1; //uno per le avvertenze sistemare //V int indexCount = _indexPage; // //if (_strutturaIndice.VoceIndice.Rows.Count > 25) // //Era 2 // indexCount += 2; //else indexCount += 1; _indexPage++; int FontSizeIndice = 10;//12 int interline = 14;//20 //completa _indice foreach (DataSetIndice.VoceIndiceRow newVoce in _strutturaIndice.VoceIndice) { if (_indiceY > (_pageHeight - (_margineDOWN + 50))) { this.creaIndice(); _indexPage++; app = (ImportedPage)_index[_indexPage - 1]; } if (newVoce.Tipologia == "chapter") { app.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(newVoce.Titolo, 50, _indiceY, 500, 12, _verdanaBold)); app.Elements.Add(new PageNumberingLabel(Convert.ToString(newVoce.Pagina + indexCount), 0, _indiceY, 550, 12, _verdanaBold, FontSizeIndice, ceTe.DynamicPDF.TextAlign.Right)); } else { app.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(newVoce.Titolo, 80, _indiceY, 500, 12, _verdana, FontSizeIndice - 1));//11 app.Elements.Add(new PageNumberingLabel(Convert.ToString(newVoce.Pagina + indexCount), 0, _indiceY, 550, 12, _verdana, FontSizeIndice, ceTe.DynamicPDF.TextAlign.Right)); } _indiceY += interline;//20 } if (_glossario) { app.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Glossario", 50, _indiceY, 500, 12, _verdanaBold)); //app.Elements.Add(new PageNumberingLabel(Convert.ToString(_core.Count + indexCount + 2), 0, _indiceY, 550, 12, _verdanaBold, 12, ceTe.DynamicPDF.TextAlign.Right)); app.Elements.Add(new PageNumberingLabel(Convert.ToString(_core.Count + indexCount + 1), 0, _indiceY, 550, 12, _verdanaBold, FontSizeIndice, ceTe.DynamicPDF.TextAlign.Right)); } } //else // addNavigatore(); ///Aggiungo pagina delle AVVERTENZE ///V //string pdfRelativePath; //System.Reflection.Assembly thisExe; //thisExe = System.Reflection.Assembly.GetExecutingAssembly(); //if (_dataThread.Rete == "F") // pdfRelativePath = UtilityManager.getAppSetting("TemplateAvvertenzeBF"); //else // pdfRelativePath = UtilityManager.getAppSetting("TemplateAvvertenzeSP"); //System.IO.Stream file = thisExe.GetManifestResourceStream(pdfRelativePath); //PdfDocument pp = new PdfDocument(file); //_indice = new ImportedPage(pp.GetPage(1)); //this.SetTemplate(_indice); //this.setPageFooter(_indice); //this.setPageFooterNomeCliente(_indice); //_index.Add(_indice); //_indiceY = _margineUP + 30; //_activeIndex = true; //_indexPage++; //_indiceY = _margineUP; //V } //============================================================== public void creaCopertina(string report, bool withName) { string pdfRelativePath; FormatNum conv = new FormatNum(); System.Reflection.Assembly thisExe; thisExe = System.Reflection.Assembly.GetExecutingAssembly(); if (_dataThread.Rete == "F") pdfRelativePath = UtilityManager.getAppSetting("Copertina"); else pdfRelativePath = UtilityManager.getAppSetting("CopertinaSP"); System.IO.Stream file = thisExe.GetManifestResourceStream(pdfRelativePath); ImportedPage app; PdfDocument pp = new PdfDocument(file); app = new ImportedPage(pp.GetPage(1)); app.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(report.ToUpper(), 157, 231, 220, 8, _verdanaBold, 18, ceTe.DynamicPDF.TextAlign.Right, ceTe.DynamicPDF.CmykColor.White)); if (withName) { if (UtilityManager.getAppSetting("Periodico") == "1") app.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Report prodotto " + _dataThread.DataFineTrimestreCorrente.ToLongDateString() + " per ", 88, 265, 300, 8, _verdana, 9, ceTe.DynamicPDF.TextAlign.Right, ceTe.DynamicPDF.CmykColor.Black)); else app.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Report prodotto " + DateTime.Now.ToLongDateString() + " per ", 88, 265, 300, 8, _verdana, 9, ceTe.DynamicPDF.TextAlign.Right, ceTe.DynamicPDF.CmykColor.Black)); if (_dataThread.CodiceFiscale.Length == 11) { //persona giuridica app.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(conv.CapitalizeText(_dataThread.CognomeCliente) + " " + conv.CapitalizeText(_dataThread.NomeCliente), 88, 280, 300, 8, _verdanaBold, 9, ceTe.DynamicPDF.TextAlign.Right, ceTe.DynamicPDF.CmykColor.Black)); } else { if (_dataThread.CodiceFiscale.Contains("@")) { // Fiduciaria string[] codiceMandato = _dataThread.CodiceFiscale.Split('@'); app.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(conv.CapitalizeText(_dataThread.CognomeCliente) + " " + conv.CapitalizeText(_dataThread.NomeCliente.Replace("$", "") + " - " + codiceMandato[1].ToString()), 88, 280, 300, 8, _verdanaBold, 9, ceTe.DynamicPDF.TextAlign.Right, ceTe.DynamicPDF.CmykColor.Black)); } else { //persona fisica app.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(conv.CapitalizeText(_dataThread.NomeCliente) + " " + conv.CapitalizeText(_dataThread.CognomeCliente), 88, 280, 300, 8, _verdanaBold, 9, ceTe.DynamicPDF.TextAlign.Right, ceTe.DynamicPDF.CmykColor.Black)); } } } else app.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Report prodotto " + DateTime.Now.ToLongDateString(), 88, 265, 300, 8, _verdana, 9, ceTe.DynamicPDF.TextAlign.Right, ceTe.DynamicPDF.CmykColor.Black)); _index.Add(app); _indexPage++; //_copertina = true; } public void setPageTitolo(string label) { if (_writableY != _margineUP) this.addPage(); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Rectangle(_margineLEFT - 5, 122, 400, 17, 0, ceTe.DynamicPDF.CmykColor.Red)); if (_activeIndex) { _chapterNum++; _sectionNum = 1; updateIndice(label, "chapter"); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(_chapterNum + ". " + label, _margineLEFT, 120, 400, 8, _verdanaBold, 14, ceTe.DynamicPDF.CmykColor.White)); } else { //if (_tipologia != "report") _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(label, _margineLEFT, 120, 400, 8, _verdanaBold, 14, ceTe.DynamicPDF.CmykColor.White)); //else //{ // _chapterNum++; // _sectionNum = 1; // _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(_chapterNum + ". " + label, _margineLEFT, 120, 400, 8, _verdanaBold, 14, ceTe.DynamicPDF.CmykColor.White)); //} } } /// /// /// /// /// public void setPageTitolo(string label, bool eliminaspaziatura) { setPageTitolo(label); if (eliminaspaziatura) _writableY = 150; } public void setChapterTitolo(string label) { if ((_writableY + 100) > (_pageHeight - _margineDOWN)) this.addPage(); ///PER ALLINEARE IL TITOLO ALLA RIGA DELLA PAGINA if (_writableY == _margineUP) _writableY = 142; _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Rectangle(_margineLEFT - 5, _writableY - 20, 400, 17, 0, ceTe.DynamicPDF.CmykColor.Red)); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Rectangle(_margineLEFT - 5, _writableY - 20, 522, 0.4F, 0, ceTe.DynamicPDF.CmykColor.Red)); if (_activeIndex) { _chapterNum++; _sectionNum = 1; updateIndice(label, "chapter"); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(_chapterNum + ". " + label, _margineLEFT, _writableY - 22, 400, 8, _verdanaBold, 14, ceTe.DynamicPDF.CmykColor.White)); } else { //if (_tipologia != "report") // _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(label, _margineLEFT, _writableY - 22, 400, 8, _verdanaBold, 14, ceTe.DynamicPDF.CmykColor.White)); //else //{ _chapterNum++; _sectionNum = 1; _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(_chapterNum + ". " + label, _margineLEFT, _writableY - 22, 400, 8, _verdanaBold, 14, ceTe.DynamicPDF.CmykColor.White)); //} } _writableY += 20; } /// /// E' il titolo della pagina scritto bianco su sfondo rosso. /// A differenza di setPageTitolo si posiziona a seconda della posizione del cursore. /// il parametro Height č lo spazio necessario al disegno del titolo capitolo piu la prima sezione. /// /// /// public void setChapterTitolo(string label, float Height, bool eliminaspaziatura) { this.setChapterTitolo(label, Height); if (eliminaspaziatura) _writableY -= 10; } public void setChapterTitolo(string label, float Height) { if ((_writableY + Height + 50) > (_pageHeight - _margineDOWN)) this.addPage(); ///PER ALLINEARE IL TITOLO ALLA RIGA DELLA PAGINA if (_writableY == _margineUP) _writableY = 142; _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Rectangle(_margineLEFT - 5, _writableY - 20, 400, 17, 0, ceTe.DynamicPDF.CmykColor.Red)); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Rectangle(_margineLEFT - 5, _writableY - 20, 522, 0.4F, 0, ceTe.DynamicPDF.CmykColor.Red)); if (_activeIndex) { _chapterNum++; _sectionNum = 1; updateIndice(label, "chapter"); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(_chapterNum + ". " + label, _margineLEFT, _writableY - 22, 400, 8, _verdanaBold, 14, ceTe.DynamicPDF.CmykColor.White)); } else { //if (_tipologia != "report") // _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(label, _margineLEFT, _writableY - 22, 400, 8, _verdanaBold, 14, ceTe.DynamicPDF.CmykColor.White)); //else //{ _chapterNum++; _sectionNum = 1; _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(_chapterNum + ". " + label, _margineLEFT, _writableY - 22, 400, 8, _verdanaBold, 14, ceTe.DynamicPDF.CmykColor.White)); //} } _writableY += 20; } public void setChapterHeader(string label) { int m = (int)((float)label.Length / 135) + 2; if (this.checkMargin((m - 1) * 20)) this.addPage(); FormattedTextArea text = new FormattedTextArea(label, _margineLEFT - 5, _writableY - 10, 520, m, new FontFamily("pipp", _verdana, _verdanaBold, _verdanaItalic, _verdanaBoldItalic), 9, false); text.Height = text.GetRequiredHeight(); text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; _page.Elements.Add(text); _writableY += text.Height + 10; } /// /// Stampa il testo del paragrafo e elimina lo spazio tra il titolo del capitolo e il testo che viene stampato. /// Usato solo per la S57 /// /// public void setChapterHeader(string label, bool eliminaspaziatura) { setChapterHeader(label); if (eliminaspaziatura) _writableY -= 10; } public void setChapterHeader(string label, float height) { if (label != string.Empty) { int m = (int)((float)label.Length / 135) + 2; if (this.checkMargin((m - 1) * 20 + height)) this.addPage(); FormattedTextArea text = new FormattedTextArea(label, _margineLEFT - 5, _writableY - 10, 520, m, new FontFamily("pipp", _verdana, _verdanaBold, _verdanaItalic, _verdanaBoldItalic), 9, false); text.Height = text.GetRequiredHeight(); text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; _page.Elements.Add(text); _writableY += text.Height + 10; } } public void setChapterHeader(string label, int x, int width, float font) { int m = (int)((float)label.Length / 135) + 2; if (this.checkMargin((m - 1) * 20)) this.addPage(); FormattedTextArea text = new FormattedTextArea(label, _margineLEFT - 5 + x, _writableY - 10, width, m, new FontFamily("pipp", _verdana, _verdanaBold, _verdanaItalic, _verdanaBoldItalic), font, false); text.Height = text.GetRequiredHeight(); text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; _page.Elements.Add(text); _writableY += text.Height + 10; } private void setPageFooterNomeCliente(ImportedPage pp) { FormatNum conv = new FormatNum(); ////LATO SX //if (_modalitaAnonima == 1) //{ //if (_tipologia != "report") // pp.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Scheda prodotta " + DateTime.Now.ToLongDateString() + " sui dati di ", _margineLEFT - 5, _pageHeight - _margineDOWN + 15, 300, 8, _verdana, 8, ceTe.DynamicPDF.CmykColor.Black)); //else if (UtilityManager.getAppSetting("Periodico") == "1") pp.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Report prodotto " + _dataThread.DataFineTrimestreCorrente.ToLongDateString() + " per ", _margineLEFT - 5, _pageHeight - _margineDOWN + 15, 300, 8, _verdana, 8, ceTe.DynamicPDF.CmykColor.Black)); else pp.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Report prodotto " + DateTime.Now.ToLongDateString() + " per ", _margineLEFT - 5, _pageHeight - _margineDOWN + 15, 300, 8, _verdana, 8, ceTe.DynamicPDF.CmykColor.Black)); if (_dataThread.CodiceFiscale.Length == 11)//persona giuridica pp.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(conv.CapitalizeText(_dataThread.CognomeCliente) + " " + conv.CapitalizeText(_dataThread.NomeCliente), _margineLEFT - 5, _pageHeight - _margineDOWN + 25, 300, 8, _verdanaBold, 8, ceTe.DynamicPDF.CmykColor.Black)); else { if (_dataThread.CodiceFiscale.Contains("@")) // Fiduciaria { string[] codiceMandato = _dataThread.CodiceFiscale.Split('@'); pp.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(conv.CapitalizeText(_dataThread.CognomeCliente) + " - " + codiceMandato[1], _margineLEFT - 5, _pageHeight - _margineDOWN + 25, 300, 8, _verdanaBold, 8, ceTe.DynamicPDF.CmykColor.Black)); } else //persona fisica pp.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(conv.CapitalizeText(_dataThread.NomeCliente) + " " + conv.CapitalizeText(_dataThread.CognomeCliente), _margineLEFT - 5, _pageHeight - _margineDOWN + 25, 300, 8, _verdanaBold, 8, ceTe.DynamicPDF.CmykColor.Black)); } //} //else //{ // if (_tipologia != "report") // pp.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Scheda prodotta " + DateTime.Now.ToLongDateString(), _margineLEFT - 5, _pageHeight - _margineDOWN + 15, 300, 8, _verdana, 8, ceTe.DynamicPDF.CmykColor.Black)); // else // pp.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Report prodotto " + DateTime.Now.ToLongDateString(), _margineLEFT - 5, _pageHeight - _margineDOWN + 15, 300, 8, _verdana, 8, ceTe.DynamicPDF.CmykColor.Black)); //} } public void setNotaPičDiPagina(string label) { FormattedTextArea text = new FormattedTextArea(label, _margineLEFT - 5, _pageHeight - _margineDOWN, 520, 20, new FontFamily("pipp", _verdana), 7, false); text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; text.Height = text.GetRequiredHeight(); text.Y -= text.Height - 10; _page.Elements.Add(text); _margineDOWN += text.Height; } public void setNotaPičDiPagina(string label, string id) { FormattedTextArea text = new FormattedTextArea(label, _margineLEFT - 5, _pageHeight - _margineDOWN, 520, 20, new FontFamily("pipp", _verdana), 7, false); text.ID = id; text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; text.Height = text.GetRequiredHeight(); text.Y -= text.Height - 10; //se l'elemento č stato gia inserito nella pagina non lo inserisco. PageElement element = null; element = _page.Elements.GetPageElementByID(id); if (element == null) _page.Elements.Add(text); _margineDOWN += text.Height; } private void setPageFooter(ImportedPage pp) { FormatNum conv = new FormatNum(); //LATO DX pp.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Private Banker", _margineRIGHT, _pageHeight - _margineDOWN + 15, 300, 8, _verdanaBold, 8, ceTe.DynamicPDF.TextAlign.Right, ceTe.DynamicPDF.CmykColor.Black)); //V string temp = ClsFunzioniGeneriche.FormattaIndirizzo(_dataThread.IndirizzoAgente); pp.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(conv.CapitalizeText(_dataThread.NomeAgente) + " " + conv.CapitalizeText(_dataThread.CognomeAgente), _margineRIGHT, _pageHeight - _margineDOWN + 25, 300, 8, _verdanaBold, 8, ceTe.DynamicPDF.TextAlign.Right, ceTe.DynamicPDF.CmykColor.Black)); pp.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(temp + " - " + _dataThread.CapAgente + " " + _dataThread.CittaAgente, _margineRIGHT, _pageHeight - _margineDOWN + 35, 300, 8, _verdana, 8, ceTe.DynamicPDF.TextAlign.Right, ceTe.DynamicPDF.CmykColor.Black)); pp.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Tel " + _dataThread.TelefonoAgente, _margineRIGHT, _pageHeight - _margineDOWN + 45, 300, 8, _verdana, 8, ceTe.DynamicPDF.TextAlign.Right, ceTe.DynamicPDF.CmykColor.Black)); } private void updateIndice(string label, string type) { DataSetIndice.VoceIndiceRow newVoce = _strutturaIndice.VoceIndice.NewVoceIndiceRow(); //aggiorna _indice if (type == "chapter") { newVoce.Tipologia = "chapter"; newVoce.Titolo = _chapterNum + ". " + label; newVoce.Pagina = _corePage; } else { newVoce.Tipologia = "Section"; newVoce.Titolo = _chapterNum + "." + _sectionNum + " " + label; newVoce.Pagina = _corePage; } _strutturaIndice.VoceIndice.AddVoceIndiceRow(newVoce); } public void setSezHeader(string label) { int m = (int)((float)label.Length / 100) + 1; if (this.checkMargin((m - 1) * 20)) this.addPage(); FormattedTextArea text = new FormattedTextArea(label, _margineLEFT - 5, _writableY - 10, 520, m * 20, new FontFamily("pipp", _verdana, _verdanaBold, _verdanaItalic, _verdanaBoldItalic), 9, false); text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; text.Height = text.GetRequiredHeight(); _page.Elements.Add(text); _writableY += text.Height + 10; } public void setSezFooter(string label, float y) { if (_writableYPot > y) y = _writableYPot; int m = (int)((float)label.Length / 100) + 1; FormattedTextArea text = new FormattedTextArea(label, _margineLEFT - 5, _writableY + y, 520, m * 20, new FontFamily("pipp", _verdana), 7, false); text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; _page.Elements.Add(text); _writableY += (m * 10); } public void setSezFooter(string label, float y, float spaceX) { int m = (int)((float)label.Length / 100) + 1; FormattedTextArea text = new FormattedTextArea(label, _margineLEFT - 5 + spaceX, _writableY + y, 520 - spaceX, m * 20, new FontFamily("pipp", _verdana), 7, false); text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; _page.Elements.Add(text); _writableY += (m * 10); } public void setSezFooter(string label, float y, float spaceX, float font) { int m = (int)((float)label.Length / 100) + 1; FormattedTextArea text = new FormattedTextArea(label, _margineLEFT - 5 + spaceX, _writableY + y, 520 - spaceX, m * 20, new FontFamily("pipp", _verdana), font, false); text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; _page.Elements.Add(text); _writableY += (m * 10); } public void setHeaderSpace(int space) { _writableY += space; } //============================================================== public void setSezTitoloDiagnosi(string label) { if (this.checkMargin(50)) this.addPage(); if (label != " " && label != "") { if (_activeIndex) { updateIndice(label, "section"); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(_chapterNum + "." + _sectionNum + " " + label, _margineLEFT, _writableY - 15, 530, 12, _verdanaBold, 12, ceTe.DynamicPDF.CmykColor.Black)); _sectionNum++; } else { //if (_tipologia != "report") // _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(label, _margineLEFT, _writableY - 15, 530, 12, _verdanaBold, 12, ceTe.DynamicPDF.CmykColor.Black)); //else _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(_chapterNum + "." + _sectionNum + " " + label, _margineLEFT, _writableY - 15, 530, 12, _verdanaBold, 12, ceTe.DynamicPDF.CmykColor.Black)); _sectionNum++; } _writableY += 25; } } public void setSezTitolo(string label) { if (this.checkMargin(50)) this.addPage(); if (label != " " && label != "") { if (_activeIndex) { updateIndice(label, "section"); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(_chapterNum + "." + _sectionNum + " " + label, _margineLEFT, _writableY - 15, 530, 12, _verdanaBold, 11, ceTe.DynamicPDF.CmykColor.Black)); _sectionNum++; } else { //if (_tipologia != "report") // _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(label, _margineLEFT, _writableY - 15, 530, 12, _verdanaBold, 12, ceTe.DynamicPDF.CmykColor.Black)); //else _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(_chapterNum + "." + _sectionNum + " " + label, _margineLEFT, _writableY - 15, 530, 12, _verdanaBold, 11, ceTe.DynamicPDF.CmykColor.Black)); _sectionNum++; } //_writableY += 25; _writableY += 15; } } /// /// Scrive il titolo della sezione senza aggiungere l'indicizzazione. /// usato nella 102 /// /// public void setSezTitoloWithoutNumber(string label) { if (this.checkMargin(50)) this.addPage(); if (label != " " && label != "") _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(label, _margineLEFT, _writableY - 15, 530, 12, _verdanaBold, 10, ceTe.DynamicPDF.CmykColor.Black)); _writableY += 15; } /// /// Scrive il titolo del paragrafo in modalitą indicizzata. /// Elimina la spaziatura di 25 pixel tra il titolo e il testo successivo e lascia uno spazio di 10 pixel. /// /// public void setSezTitolo(string label, bool eliminaspaziatura) { this.setSezTitolo(label); if (eliminaspaziatura) _writableY -= 15; } public void setSezTitolo(string label, float Height) { if ((_writableY + Height + 20) > (_pageHeight - _margineDOWN)) this.addPage(); this.setSezTitolo(label); } //============================================================== public void setTitolo(string label, float Height) { if (label != string.Empty) { if ((_writableY + Height + 20) > (_pageHeight - _margineDOWN)) this.addPage(); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(label, _margineLEFT - 5, _writableY - 15, 530, 12, _verdanaBold, 12, ceTe.DynamicPDF.CmykColor.Black)); _writableY += 25; } } //============================================================== /// /// Scrive il titolo del paragrafo in modalitą non indicizzata. /// Aggiunge 25 pixel di spazio sulla Y. /// /// public void setTitolo(string label) { if (this.checkMargin(60)) this.addPage(); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(label, _margineLEFT - 5, _writableY - 15, 530, 12, _verdanaBold, 12, ceTe.DynamicPDF.CmykColor.Black)); _writableY += 25; } /// /// Scrive sulla pagina il testo passato in input. /// Il tipo di carattere usato č quello del testo introduttivo delle sezioni. /// Dimensione del carattere prefissata a 7 /// /// testo da scrivere /// y su cui verrą scritto il testo /// larghezza della label su cui verrą scritto il testo. public void writeText(string label, float y, float spaceX) { int m = (int)((float)label.Length / 100) + 1; FormattedTextArea text = new FormattedTextArea(label, _margineLEFT - 5 + spaceX, y, 520 - spaceX, m * 20, new FontFamily("pipp", _verdana), 7, false); text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; _page.Elements.Add(text); } public void writeText(float x, float y, string label, float size, float larghezzalabel, ceTe.DynamicPDF.TextAlign align) { int m = (int)((float)label.Length / 100) + 1; FormattedTextArea text = new FormattedTextArea(label, x, y, larghezzalabel, m * 20, new FontFamily("pipp", _verdana), size, false); text.Style.Paragraph.Align = align; _page.Elements.Add(text); } /// /// Scrive sulla pagina il testo passato in input. /// Il tipo di carattere usato č quello del testo introduttivo delle sezioni. /// Larghezza della label su cui verrą scritto il testo fissato a 200 /// /// x /// y /// testo da scrivere /// dimensione del testo public void writeText(float x, float y, string label, float size) { int m = (int)((float)label.Length / 100) + 1; FormattedTextArea text = new FormattedTextArea(label, x, y, 200, m * 20, new FontFamily("pipp", _verdana), size, false); text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; _page.Elements.Add(text); } /// /// Scrive sulla pagina il testo passato in input. /// Il tipo di carattere usato č quello del testo introduttivo delle sezioni. /// Larghezza della label su cui verrą scritto il testo fissato a 200 /// /// x /// y /// testo da scrivere /// dimensione del testo /// larghezza della label su cui viene scritto il testo. public void writeText(float x, float y, string label, float size, float larghezzalabel) { int m = (int)((float)label.Length / 100) + 1; FormattedTextArea text = new FormattedTextArea(label, x, y, larghezzalabel, m * 20, new FontFamily("pipp", _verdana), size, false); text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify; _page.Elements.Add(text); } public void InsertGraficoS96(Chart grafico, float x, float y) { try { _imgGrafico = new System.IO.MemoryStream(); //Preserve the orginal width and height for the Chart float w = (float)(grafico.Width.Value); float h = (float)grafico.Height.Value; //Set the sutiable chart resoltion -- default is 96 DPI grafico.ImageResolution = 300; //save the chart as image grafico.Save(_imgGrafico, ChartImageFormat.Png); Image img = new Image(_imgGrafico, x, y, 1); //set the orginal width and height to the chart image img.Width = w; img.Height = h; _page.Elements.Add(img); } catch (Exception ex) { try { logger.Error(String.Concat(ex.Message, " ", grafico.ToString())); } catch { } } finally { grafico.Dispose(); } } public void InsertGraficoS169(Chart grafico, float x, float y) { try { _imgGrafico = new System.IO.MemoryStream(); //Preserve the orginal width and height for the Chart float w = (float)(grafico.Width.Value); float h = (float)grafico.Height.Value; //Set the sutiable chart resoltion -- default is 96 DPI grafico.ImageResolution = 300; //save the chart as image grafico.Save(_imgGrafico, ChartImageFormat.Png); Image img = new Image(_imgGrafico, x, y, 1); //set the orginal width and height to the chart image img.Width = w; img.Height = h; _page.Elements.Add(img); } catch (Exception ex) { try { logger.Error(String.Concat(ex.Message, " ", grafico.ToString())); } catch { } } finally { grafico.Dispose(); } } public void InsertGraficoS132(Chart grafico, float x, float y) { try{ _imgGrafico = new System.IO.MemoryStream(); //Preserve the orginal width and height for the Chart float w = (float)(grafico.Width.Value); float h = (float)grafico.Height.Value; //Set the sutiable chart resoltion -- default is 96 DPI grafico.ImageResolution = 300; //save the chart as image grafico.Save(_imgGrafico, ChartImageFormat.Png); Image img = new Image(_imgGrafico, x, y, 1); //set the orginal width and height to the chart image img.Width = w; img.Height = h; _page.Elements.Add(img); } catch (Exception ex) { try { logger.Error(String.Concat(ex.Message, " ", grafico.ToString())); } catch { } } finally { grafico.Dispose(); } } public void InsertGrafico(Chart grafico, float x, float y, int resolution) { try { Image img = null; //Preserve the orginal width and height for the Chart float w = (float)(grafico.Width.Value); float h = (float)grafico.Height.Value; //Set the sutiable chart resoltion -- default is 96 DPI grafico.ImageResolution = resolution; using (System.IO.Stream _imgGrafico_ = new System.IO.MemoryStream()) { //save the chart as image grafico.Save(_imgGrafico_, ChartImageFormat.Png); //grafico.Save(@"C:\Ftp\a"+Guid.NewGuid().ToString()+".png", ChartImageFormat.Png); //Thread.Sleep(100); img = new Image(_imgGrafico_, x, y, 1); img.Width = w; img.Height = h; } //set the orginal width and height to the chart image _page.Elements.Add(img); } catch (Exception ex) { try { logger.Error(String.Concat(ex.Message, " ", grafico.ToString())); } catch { } } finally { grafico.Dispose(); } } public void InsertGrafico(Chart grafico, float x, float y) { _imgGrafico = new System.IO.MemoryStream(); grafico.Save(_imgGrafico, ChartImageFormat.Png); Image img = new Image(_imgGrafico, x, y, 1); //img.SetDpi(300); _page.Elements.Add(img); } public void Grilia(int R) { float X = 0; float Y = -3; string str = " 0" + new string('-', 300); for (int i = 0; i < 100; i++) { str = " " + (Y + 3) + new string('-', 300); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(str, X, getLastPos() + Y, 900F, 50F, Globals.OpenTypeFontVerdana, 4)); Y += 2; str = " " + new string('-', 300); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(str, X, getLastPos() + Y, 900F, 50F, Globals.OpenTypeFontVerdana, 4)); Y += 2; } X -= 1; for (int i = 0; i < 100; i++) { _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("|" + X.ToString(), getMargineLeft() + X, getLastPos() + R, 900F, 50F, Globals.OpenTypeFontVerdana, 4)); X += 5; _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("|", getMargineLeft() + X, getLastPos() + R + 3, 900F, 50F, Globals.OpenTypeFontVerdana, 4)); X += 5; } } public void InsertTable(PageElement elem) { _page.Elements.Add(elem); } public void changePage(int x, float y) { //disegna freccia pił scritta. _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("continua alla pagina successiva", x - 75, _pageHeight - _margineDOWN - 6, 200, 12, _verdana, 7, ceTe.DynamicPDF.CmykColor.Black)); string relativePath = UtilityManager.getAppSetting("ChangePage"); System.Reflection.Assembly thisExe; thisExe = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream file = thisExe.GetManifestResourceStream(relativePath); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, x + _margineLEFT, _pageHeight - _margineDOWN - 5, 0.2F)); this.addPage(); } /// /// Disegna la frecce e il testo "continua alla pagina successiva" di rimando del salto pagina delle tabelle. /// X e Y sono gia definite. /// X=435,Y=719. /// public void changePage() { int y = 730; if (_notaPieDiPagina.Length > 0) y -= 23; //disegna freccia pił scritta. _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("continua alla pagina successiva", 450, y, 200, 12, _verdana, 7, ceTe.DynamicPDF.CmykColor.Black)); string relativePath = UtilityManager.getAppSetting("ChangePage"); System.Reflection.Assembly thisExe; thisExe = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream file = thisExe.GetManifestResourceStream(relativePath); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, 435, y - 1, 0.2F)); this.addPage(); } /// /// Disegna la frecce e il testo "continua alla pagina successiva" di rimando del salto pagina delle tabelle. /// Disegna le note con posizionamento "PičDiPagina" aggiunte alla pagina(document). /// X fissata a 435, la Y č variabile a seconda delle Note presenti a pič di pagina. (Decremento di 15 pixel per ogni nota presente o di 30 a seconda della lunghezza della nota.) /// Utilizzato solo dalla classe Tabella. /// Non sono all'ultima pagina della tabella ma sto ancora facendo il saltopagina. /// public void changePage(string idtabella) { int y = 739; //_note.RemoveAll(delegate(Nota t) { return t.IdTabellaAssociata != idtabella; }); // rimuovo le note non appartenenti alla tabella che sto stampando. // in caso di presenza di note a pič di pagina decremento la y su cui stampo la label di cambio pagina. foreach (Nota objNota in _note.FindAll(delegate (Nota t) { return t.Posizionamento == Nota.TipologiaPosizionamento.PičDiPagina; })) { if (objNota.Testo.Length < 200) y -= 15; else y -= 30; } //disegna freccia pił scritta. _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("continua alla pagina successiva", 450, y, 200, 12, _verdana, 7, ceTe.DynamicPDF.CmykColor.Black)); string relativePath = UtilityManager.getAppSetting("ChangePage"); System.Reflection.Assembly thisExe; thisExe = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream file = thisExe.GetManifestResourceStream(relativePath); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, 435, y - 1, 0.2F)); // aggiungo la pagina this.addPage(idtabella, false); // se passa sicuramente la tabella sta facendo il saltopagina } public void nextPage(float x) { _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("continua dalla pagina precedente", x + 10, _margineUP - 31, 200, 12, _verdana, 7, ceTe.DynamicPDF.CmykColor.Black)); string relativePath = UtilityManager.getAppSetting("ChangePage"); System.Reflection.Assembly thisExe; thisExe = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream file = thisExe.GetManifestResourceStream(relativePath); _page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, x - 5, _margineUP - 33, 0.2F)); _writableY += 5; } //============================================================== /// /// Aggiunge una nuova pagina al documento /// /// /// public void addPage() { StampaNote(); // stampo tutte le note aggiunte al documento prima di aggiungere una nuova pagina _margineDOWN = 105; _note.Clear(); // azzero la collezione delle note. _ynotapiedipagina = 740; if (_corePage == _currentPage) { this.setFilePath(); this.SetTemplate(_page); this.setPageFooter(_page); //if (_nomeCliente) this.setPageFooterNomeCliente(_page); //this.setDisclaimer(page); _corePage++; _currentPage = _corePage; _writableYold = _writableY; _writableY = _margineUP; } else { _page = _backPage; _currentPage = _corePage; _writableY = _margineUP; } if (!_saltoPagina) _writableYPot = 0; } /// /// Aggiunge una nuova pagina al documento. /// Utilizzato solo quando si sta stampando una tabella e questa ha il saltopagina. /// Questa funzione č richiamata solo dalla funzione "changePage" ovvero solo quando la tabella sta effettuando il saltopagina. /// /// /// private void addPage(string idtabella, bool eliminaNote) { StampaNote(idtabella); _ynotapiedipagina = 740; #region Aggiungo la pagina al documento _margineDOWN = 105; if (_corePage == _currentPage) { this.setFilePath(); this.SetTemplate(_page); this.setPageFooter(_page); this.setPageFooterNomeCliente(_page); //this.setDisclaimer(page); _corePage++; _currentPage = _corePage; _writableYold = _writableY; _writableY = _margineUP; } else { _page = _backPage; _currentPage = _corePage; _writableY = _margineUP; } if (!_saltoPagina) _writableYPot = 0; #endregion // in questo caso le note associate alla tabella (che sta facendo il saltopagina) solo quelle con posizionamento a PičDiPagina // e vanno riportate anche nella nuova pagina. // Rimuovo tutte le note perche sono state gią stampate e lascio quelle associate alla tabella che fa il saltopagina. if (eliminaNote) _note.Clear(); else _note.RemoveAll(delegate (Nota obj) { return (obj.IdTabellaAssociata != idtabella); }); } public void RemoveLastPage(int index) { _core.RemoveAt(index); //int c = _index.Count; //int v = _indexPage; } /// /// OK /// /// private void setFilePath() { string relativePath = ""; //if (_tipologia != "report") //{ System.Reflection.Assembly thisExe; thisExe = System.Reflection.Assembly.GetExecutingAssembly(); if (_dataThread.Rete == "F") { //FC 26062015 Aggionamento nuova Ragione Sociale //_banca = "Banca Fideuram"; _banca = "Fideuram"; relativePath = UtilityManager.getAppSetting("TemplateReport"); } else { _banca = "Sanpaolo Invest"; relativePath = UtilityManager.getAppSetting("TemplateReportSP"); } System.IO.Stream file = thisExe.GetManifestResourceStream(relativePath); //} //else //{ // if (_rete == "F") // { // _banca = "Banca Fideuram"; // relativePath = UtilityManager.getAppSetting("TemplateReport"); // } // else // { // _banca = "Sanpaolo Invest"; // relativePath = UtilityManager.getAppSetting("TemplateReportSP"); // } //} PdfDocument pp = new PdfDocument(file); _page = new ImportedPage(pp.GetPage(1)); if (!(_page == null)) _core.Add(_page); } //============================================================== //============================================================== /// /// /// /// /// public Boolean checkMargin(float heightSection) { //controlla se la sezione puņ essere scritta nella pagina corrente return ((_writableY + heightSection) >= (_pageHeight - _margineDOWN)); } /// /// Verifica se a partire dalla posizione y passata in input, l'altezza heightSection entra /// nella pagina corrente. /// /// /// /// public Boolean checkMargin(float y, float heightSection) { //controlla se la sezione puņ essere scritta nella pagina corrente return ((y + heightSection) >= (_pageHeight - _margineDOWN)); } public int getWritableRow(float heightRow, bool header) { float heightSection = 0; if (header) heightSection += heightRow; int cont = 0; while ((_writableY + cont * heightRow + heightSection) < (_pageHeight - _margineDOWN)) { cont++; } //controlla se la sezione puņ essere scritta nella pagina corrente return cont - 1; } public int NumLastPage { get { return _numlastpage; } set { _numlastpage = value; } } /// /// Indica se la nota a pič di pagina č presente. /// public bool FlagNotaPieDiPagina { get { return _flagnotaPieDiPagina; } set { _flagnotaPieDiPagina = value; } } public int CurrentPage { get { return _currentPage; } set { _currentPage = value; } } public string AsteriscoVarProxati { get { return _AsteriscoVarProxato; } set { _AsteriscoVarProxato = value; } } public string AsteriscoGradoCopertura { get { return _AsteriscoGradoCopertura; } set { _AsteriscoGradoCopertura = value; } } public int NumNotePiePaginaVarProxato { get { return _numNotePiePaginaVarProxato; } set { _numNotePiePaginaVarProxato = value; } } /// /// Imposta o ottiene la lista di note presenti nel documento. /// public ListaNote Note { get { return _note; } set { _note = value; } } public string TipologiaDocumento { get { return _tipologia; } set { _tipologia = value; } } public string Banca { get { return _banca; } set { _banca = value; } } public int NumPage { get { return _documentoFinale.Pages.Count; } } //public bool Navigatore //{ // get // { // return _navigatore; // } // set // { // _navigatore = value; // } //} //public string TipoReport //{ // get // { // return _tipoReport; // } // set // { // _tipoReport = value; // } //} public bool Glossario { get { return _glossario; } set { _glossario = value; } } //public int ModalitąAnonima //{ // get // { // return _modalitaAnonima; // } // set // { // _modalitaAnonima = value; // } //} public string NotaPieDiPagina { get { return _notaPieDiPagina; } set { _notaPieDiPagina = value; } } } public enum TipoNota { VarProxato, GradoCopertura } /// /// Rappresentazione dell'oggetto nota. /// public class Nota { /// /// Lista della tipologia delle possibili note da aggiungere al documento. /// public enum TipologiaNota { NonImpostato, GradoCopertura, VarProxato, RendimentoSottoscrizione_Maggiore_1_Anno, RendimentoSottoscrizione_Minore_1_Anno, RendimentoSottoscrizione_Maggiore_E_Minore_1Anno } /// /// Lista delle tipologie di posizionamento dell'oggetto nota. /// public enum TipologiaPosizionamento { NonImpostato, PičDiPagina, PičDiSezione } /// /// Lista del tipo di stato della Nota. Indica se la Nota č da stampare o se č stata stampata. /// public enum StatoNota { DaStampare, Stampata } private TipologiaNota _tiponota; private TipologiaPosizionamento _posizionamento; private StatoNota _stato; private string _testo = string.Empty; private int _numeroasterisco = 0; private string _idtabellaassociata; /// /// Testo /// public string Testo { get { return _testo; } set { _testo = value; } } /// /// Imposta o ottiente il posizionamento dell'oggetto Nota /// public TipologiaPosizionamento Posizionamento { get { return _posizionamento; } set { _posizionamento = value; } } /// /// Imposta o ottiente il numero di asterischi. /// Ogni Asterisco che viene aggiunto alla collezione di Nota attraverso il metodo Add, viene incrementato automaticamente di 1 /// public int NumeroAsterisco { get { return _numeroasterisco; } set { _numeroasterisco = value; } } /// /// Imposta o ottiene la tipologia della Nota /// public TipologiaNota TipoNota { get { return _tiponota; } set { _tiponota = value; } } /// /// Id della tabella associata alla nota. /// public string IdTabellaAssociata { get { return _idtabellaassociata; } set { _idtabellaassociata = value; } } /// /// Stato della Nota. /// public StatoNota Stato { get { return _stato; } set { _stato = value; } } /// /// Costruttore /// /// /// public Nota(TipologiaNota tiponota, string idtabellaassociata) { _tiponota = tiponota; _idtabellaassociata = idtabellaassociata; _stato = StatoNota.DaStampare; } /// /// Costruttore /// /// /// /// public Nota(TipologiaNota tiponota, string idtabellaassociata, string testo) : this(tiponota, idtabellaassociata) { _testo = testo; } /// /// Ritorna la rappresentazione in stringa del numero di asterisci impostato nella proprietą NumeroAsterisco. /// public new string ToString() { string strReturn = string.Empty; for (int i = 0; i < _numeroasterisco; i++) strReturn += "*"; return strReturn; } } /// /// Collezione dell'oggetto Nota. /// public class ListaNote : List { /// /// Aggiunge un oggetto Nota alla collezione Note e incrementa la proprietą NumeroAsterisco dell'oggetto Nota. /// /// public new void Add(Nota item) { Nota objFound = base.Find(delegate (Nota t) { return t.TipoNota == item.TipoNota; }); if (objFound == null) { item.NumeroAsterisco = recuperaNumeroAsterisco(); item.Testo = "(" + item.ToString() + ") " + item.Testo; if (item.TipoNota == Nota.TipologiaNota.GradoCopertura) item.Posizionamento = Nota.TipologiaPosizionamento.PičDiSezione; else item.Posizionamento = Nota.TipologiaPosizionamento.PičDiPagina; } else { item.NumeroAsterisco = objFound.NumeroAsterisco; item.Testo = objFound.Testo; item.Posizionamento = objFound.Posizionamento; } base.Add(item); } /// /// /// /// public void Insert(Nota item) { base.Add(item); } /// /// Recupera il numero di asterischi pił basso disponibile tra quelli gia inseriti nella lista di note. /// /// private int recuperaNumeroAsterisco() { int result = 1; foreach (Nota nota in this) { if (this.Exists(delegate (Nota t) { return t.NumeroAsterisco == result; })) result++; } return result; } /// /// Ricerca all'interno della collezione di Note, l'oggetto avente la TipologiaAsterisco passata in input. /// /// public Nota Find(Nota.TipologiaNota tipoNota) { if (base.Count > 0) return base.Find(delegate (Nota t) { return t.TipoNota == tipoNota; }); else return new Nota(Nota.TipologiaNota.NonImpostato, null); } /// /// Ricerca all'interno della collezione di Note, /// l'oggetto avente la TipologiaNota passata in input, e l'id del /// /// tipo di nota da ricercare /// id della tabellaassociata alla nota da ricercare /// public Nota Find(Nota.TipologiaNota tipoNota, string IdTabellaAssociata) { if (base.Count > 0) { Nota nota = base.Find(delegate (Nota t) { return t.TipoNota == tipoNota && t.IdTabellaAssociata == IdTabellaAssociata; }); if (nota != null) return nota; else return new Nota(Nota.TipologiaNota.NonImpostato, null); } else return new Nota(Nota.TipologiaNota.NonImpostato, null); } } }