diff --git a/PeriTAB/PeriTAB.csproj b/PeriTAB/PeriTAB.csproj index 1a2e81a..beda574 100644 --- a/PeriTAB/PeriTAB.csproj +++ b/PeriTAB/PeriTAB.csproj @@ -33,7 +33,7 @@ C:\Users\gustavo.gvs.PF\OneDrive - Polícia Federal\PCF Gustavo\Visual Studio\PeriTAB\publicacoes\ pt-BR - 1.1.2.0 + 1.1.3.0 false true 0 diff --git a/PeriTAB/Properties/AssemblyInfo.cs b/PeriTAB/Properties/AssemblyInfo.cs index a366ac1..d627316 100644 --- a/PeriTAB/Properties/AssemblyInfo.cs +++ b/PeriTAB/Properties/AssemblyInfo.cs @@ -33,6 +33,6 @@ // É possível especificar todos os valores ou usar como padrão os Números da Versão e da Revisão // utilizando o "*" como mostrado abaixo: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.1.2.*")] +[assembly: AssemblyVersion("1.1.3.*")] //[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/PeriTAB/Ribbon1.Designer.cs b/PeriTAB/Ribbon1.Designer.cs index 11aba9b..f281db6 100644 --- a/PeriTAB/Ribbon1.Designer.cs +++ b/PeriTAB/Ribbon1.Designer.cs @@ -54,10 +54,10 @@ private void InitializeComponent() this.button_alinha_legenda = this.Factory.CreateRibbonButton(); this.button_destaca_imagem = this.Factory.CreateRibbonButton(); this.button_numera_paragrafos = this.Factory.CreateRibbonButton(); + this.toggleButton_estilos = this.Factory.CreateRibbonToggleButton(); this.group_estilos = this.Factory.CreateRibbonGroup(); this.button_importa_estilos = this.Factory.CreateRibbonButton(); this.button_limpa_estilos = this.Factory.CreateRibbonButton(); - this.toggleButton_estilos = this.Factory.CreateRibbonToggleButton(); this.group_campos = this.Factory.CreateRibbonGroup(); this.menu2 = this.Factory.CreateRibbonMenu(); this.button_inserir_sumario = this.Factory.CreateRibbonButton(); @@ -162,6 +162,7 @@ private void InitializeComponent() this.group_formatacao.Items.Add(this.button_alinha_legenda); this.group_formatacao.Items.Add(this.button_destaca_imagem); this.group_formatacao.Items.Add(this.button_numera_paragrafos); + this.group_formatacao.Items.Add(this.toggleButton_estilos); this.group_formatacao.Label = "Formatação"; this.group_formatacao.Name = "group_formatacao"; // @@ -193,11 +194,20 @@ private void InitializeComponent() this.button_numera_paragrafos.Visible = false; this.button_numera_paragrafos.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.button_numera_paragrafos_Click); // + // toggleButton_estilos + // + this.toggleButton_estilos.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge; + this.toggleButton_estilos.Image = global::PeriTAB.Properties.Resources.download3; + this.toggleButton_estilos.Label = "Painel de Estilos"; + this.toggleButton_estilos.Name = "toggleButton_estilos"; + this.toggleButton_estilos.ShowImage = true; + this.toggleButton_estilos.SuperTip = "Abre Painel de Estilos"; + this.toggleButton_estilos.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.toggleButton_estilos_Click); + // // group_estilos // this.group_estilos.Items.Add(this.button_importa_estilos); this.group_estilos.Items.Add(this.button_limpa_estilos); - this.group_estilos.Items.Add(this.toggleButton_estilos); this.group_estilos.Label = "Estilos"; this.group_estilos.Name = "group_estilos"; // @@ -221,16 +231,6 @@ private void InitializeComponent() this.button_limpa_estilos.Visible = false; this.button_limpa_estilos.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.button_limpa_estilos_Click); // - // toggleButton_estilos - // - this.toggleButton_estilos.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge; - this.toggleButton_estilos.Image = global::PeriTAB.Properties.Resources.download3; - this.toggleButton_estilos.Label = "Painel de Estilos"; - this.toggleButton_estilos.Name = "toggleButton_estilos"; - this.toggleButton_estilos.ShowImage = true; - this.toggleButton_estilos.SuperTip = "Abre Painel de Estilos"; - this.toggleButton_estilos.Click += new Microsoft.Office.Tools.Ribbon.RibbonControlEventHandler(this.toggleButton_estilos_Click); - // // group_campos // this.group_campos.Items.Add(this.menu2); diff --git a/PeriTAB/Ribbon1.cs b/PeriTAB/Ribbon1.cs index 176fc0a..4de7f6b 100644 --- a/PeriTAB/Ribbon1.cs +++ b/PeriTAB/Ribbon1.cs @@ -33,6 +33,7 @@ using System.Security.Authentication; using System.Runtime.InteropServices; using System.Diagnostics; +using System.Threading; namespace PeriTAB { @@ -43,14 +44,14 @@ public class Variables private static string var1 = Path.GetTempPath() + "PeriTAB_Template_tmp.dotm"; private static string var2 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "PeriTAB"); private static string var3, var4; - private static X509Certificate2 var_cert = null; - private static IExternalSignature var_sig = null; + //private static X509Certificate2 var_cert = null; + //private static IExternalSignature var_sig = null; public static string caminho_template { get { return var1; } set { } } public static string caminho_AppData_Roaming_PeriTAB { get { return var2; } set { } } public static string editBox_largura_Text { get { return var3; } set { var3 = value; } } public static string editBox_altura_Text { get { return var4; } set { var4 = value; } } - public static X509Certificate2 cert { get { return var_cert; } set { var_cert = value; } } - public static IExternalSignature sig { get { return var_sig; } set { var_sig = value; } } + //public static X509Certificate2 cert { get { return var_cert; } set { var_cert = value; } } + //public static IExternalSignature sig { get { return var_sig; } set { var_sig = value; } } } const string quote = "\""; @@ -331,16 +332,19 @@ private void button_renomeia_documento_Click(object sender, RibbonControlEventAr private void button_gerar_pdf_Click(object sender, RibbonControlEventArgs e) { - PdfReader inputPdf = null; - bool inputPdf_open = false; - string path = Globals.ThisAddIn.Application.ActiveDocument.FullName; - string localpath = GetLocalPath(path); - if (localpath == null) { MessageBox.Show("Não foi possível gerar o PDF."); return; } - string path_pdf = localpath.Substring(0, localpath.LastIndexOf(".")) + ".pdf"; + new Thread(() => + { + + PdfReader inputPdf = null; + bool inputPdf_open = false; + string path = Globals.ThisAddIn.Application.ActiveDocument.FullName; + string localpath = GetLocalPath(path); + if (localpath == null) { MessageBox.Show("Não foi possível gerar o PDF."); return; } + string path_pdf = localpath.Substring(0, localpath.LastIndexOf(".")) + ".pdf"; //Globals.ThisAddIn.Application.ActiveDocument.ExportAsFixedFormat(localpath.Substring(0, localpath.LastIndexOf(".")), WdExportFormat.wdExportFormatPDF, UseISO19005_1: true); //try { Globals.ThisAddIn.Application.ActiveDocument.ExportAsFixedFormat(localpath.Substring(0, localpath.LastIndexOf(".")), WdExportFormat.wdExportFormatPDF, UseISO19005_1: true); } catch (COMException ex) { MessageBox.Show("O PDF está aberto. Feche-o para gerar um novo PDF."); return; } - Globals.ThisAddIn.Application.ActiveDocument.ExportAsFixedFormat(Path.Combine(Path.GetTempPath(),"tmp_pdf_PeriTAB"), WdExportFormat.wdExportFormatPDF, UseISO19005_1: true); + Globals.ThisAddIn.Application.ActiveDocument.ExportAsFixedFormat(Path.Combine(Path.GetTempPath(),"tmp_pdf_PeriTAB"), WdExportFormat.wdExportFormatPDF, UseISO19005_1: true); //if (File.Exists(Path.Combine(Path.GetTempPath(), "tmp_pdf_PeriTAB.pdf"))) @@ -350,72 +354,108 @@ private void button_gerar_pdf_Click(object sender, RibbonControlEventArgs e) //} //else { MessageBox.Show("Não foi possível gerar o PDF."); return; } - if (Globals.Ribbons.Ribbon1.checkBox_assinar.Checked) - { - string path_pdf_assinado = localpath.Substring(0, localpath.LastIndexOf(".")) + "_assinado.pdf"; - - X509Certificate2 certClient = null; - X509Store st = new X509Store(StoreName.My, StoreLocation.CurrentUser); - st.Open(OpenFlags.MaxAllowed); - IExternalSignature s; - foreach (X509Certificate2 c in st.Certificates) + if (Globals.Ribbons.Ribbon1.checkBox_assinar.Checked) { - if (c.Verify() == false) { st.Remove(c); continue; } //Elimina certificado não validados - try { s = new X509Certificate2Signature(c, "SHA-256"); } catch { st.Remove(c); } //Elimina certificado que não se pode pegar a assinatura - } - - switch (st.Certificates.Count) - { - case 0: - MessageBox.Show("Nenhum certificado válido encontrado."); - goto del_temp; - case 1: - certClient = st.Certificates[0]; - break; - default: - X509Certificate2Collection collection = X509Certificate2UI.SelectFromCollection(st.Certificates, "Escolha o certificado:", "", X509SelectionFlag.SingleSelection); - if (collection.Count > 0) - { - certClient = collection[0]; - } - else - { - MessageBox.Show("Nenhum certificado foi selecionado."); + string path_pdf_assinado = localpath.Substring(0, localpath.LastIndexOf(".")) + "_assinado.pdf"; + + X509Certificate2 certClient = null; + X509Store st = new X509Store(StoreName.My, StoreLocation.CurrentUser); + st.Open(OpenFlags.MaxAllowed); + IExternalSignature s; + //MessageBox.Show("1"); + foreach (X509Certificate2 c in st.Certificates) + { + if (c.Verify() == false) { st.Remove(c); continue; } //Elimina certificado não validados + try { s = new X509Certificate2Signature(c, "SHA-256"); } catch { st.Remove(c); } //Elimina certificado que não se pode pegar a assinatura + } + //MessageBox.Show("2"); + switch (st.Certificates.Count) + { + case 0: + MessageBox.Show("Nenhum certificado válido encontrado."); goto del_temp; - } - break; - } + case 1: + certClient = st.Certificates[0]; + break; + default: + X509Certificate2Collection collection = X509Certificate2UI.SelectFromCollection(st.Certificates, "Escolha o certificado:", "", X509SelectionFlag.SingleSelection); + if (collection.Count > 0) + { + certClient = collection[0]; + } + else + { + MessageBox.Show("Nenhum certificado foi selecionado."); + goto del_temp; + } + break; + } - Variables.cert = certClient; + //Variables.cert = certClient; - st.Close(); + st.Close(); //Debug.WriteLine("1"); //Get Cert Chain - IList chain = new List(); - X509Chain x509Chain = new X509Chain(); - x509Chain.Build(certClient); - foreach (X509ChainElement x509ChainElement in x509Chain.ChainElements) - { - chain.Add(DotNetUtilities.FromX509Certificate(x509ChainElement.Certificate)); - } + IList chain = new List(); + + X509Chain x509Chain = new X509Chain(); + //MessageBox.Show("3"); + x509Chain.Build(certClient); + + + + //new Thread(() => + //{ + // x509Chain.Build(certClient); + //}).Start(); + + + + //System.Threading.Tasks.Task t = System.Threading.Tasks.Task.Factory.StartNew(() => + //{ + // x509Chain.Build(certClient); + //}); + //t.Wait(); + + //bool thread_finnished = false; + //new Thread(() => + //{ + // x509Chain.Build(certClient); + // thread_finnished = true; + //}).Start(); + + //while (true) + //{ + // if (thread_finnished) break; + //} + + + + //MessageBox.Show("4"); + foreach (X509ChainElement x509ChainElement in x509Chain.ChainElements) + { + chain.Add(DotNetUtilities.FromX509Certificate(x509ChainElement.Certificate)); + } + //Debug.WriteLine("2"); //PdfReader inputPdf = new PdfReader(path_pdf); //PdfReader inputPdf = new PdfReader(Path.Combine(Path.GetTempPath(), "tmp_pdf_PeriTAB.pdf")); - inputPdf = new PdfReader(Path.Combine(Path.GetTempPath(), "tmp_pdf_PeriTAB.pdf")); - inputPdf_open = true; + inputPdf = new PdfReader(Path.Combine(Path.GetTempPath(), "tmp_pdf_PeriTAB.pdf")); + inputPdf_open = true; - FileStream signedPdf = null; - try { signedPdf = new FileStream(path_pdf_assinado, FileMode.Create); } catch (IOException ex) { MessageBox.Show("O PDF está aberto. Feche-o para gerar um novo PDF."); goto del_temp; } + FileStream signedPdf = null; + try { signedPdf = new FileStream(path_pdf_assinado, FileMode.Create); } catch (IOException ex) { MessageBox.Show("O PDF está aberto. Feche-o para gerar um novo PDF."); goto del_temp; } - PdfStamper pdfStamper = PdfStamper.CreateSignature(inputPdf, signedPdf, '\0'); + PdfStamper pdfStamper = PdfStamper.CreateSignature(inputPdf, signedPdf, '\0'); //Debug.WriteLine("3"); - IExternalSignature externalSignature = new X509Certificate2Signature(certClient, "SHA-256"); + + IExternalSignature externalSignature = new X509Certificate2Signature(certClient, "SHA-256"); - PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; + PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; //signatureAppearance.SignatureGraphic = Image.GetInstance(pathToSignatureImage); //signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(0, 00, 250, 150), inputPdf.NumberOfPages, "Signature"); - signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; + signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; //Debug.WriteLine("4"); //RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); @@ -427,46 +467,47 @@ private void button_gerar_pdf_Click(object sender, RibbonControlEventArgs e) //RSACryptoServiceProvider rsa2 = new RSACryptoServiceProvider(cspp); //rsa.PersistKeyInCsp = true; - (new RSACryptoServiceProvider()).PersistKeyInCsp = true; //Define chave persistente. Só pede a senha da primeira vez. - - try { MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS); } catch (CryptographicException ex) - { - //Cancelamento da senha do token - signedPdf.Close(); - File.Delete(path_pdf_assinado); - goto del_temp; - } + (new RSACryptoServiceProvider()).PersistKeyInCsp = true; //Define chave persistente. Só pede a senha da primeira vez. + + try { MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS); } catch (CryptographicException ex) + { + //Cancelamento da senha do token + signedPdf.Close(); + File.Delete(path_pdf_assinado); + goto del_temp; + } //inputPdf.Close(); - pdfStamper.Close(); - if (File.Exists(path_pdf_assinado)) - { - Globals.ThisAddIn.Application.DisplayStatusBar = true; Globals.ThisAddIn.Application.StatusBar = "PDF gerado com sucesso."; + pdfStamper.Close(); + if (File.Exists(path_pdf_assinado)) + { + Globals.ThisAddIn.Application.DisplayStatusBar = true; Globals.ThisAddIn.Application.StatusBar = "PDF gerado com sucesso."; //if (File.Exists(path_pdf)) { File.Delete(path_pdf); } - if (Globals.Ribbons.Ribbon1.checkBox_abrir.Checked) { System.Diagnostics.Process.Start(path_pdf_assinado); } + if (Globals.Ribbons.Ribbon1.checkBox_abrir.Checked) { System.Diagnostics.Process.Start(path_pdf_assinado); } + } + else + { + Globals.ThisAddIn.Application.DisplayStatusBar = true; Globals.ThisAddIn.Application.StatusBar = "A geração do PDF falhou."; + } } else { - Globals.ThisAddIn.Application.DisplayStatusBar = true; Globals.ThisAddIn.Application.StatusBar = "A geração do PDF falhou."; - } - } - else - { - if (File.Exists(Path.Combine(Path.GetTempPath(), "tmp_pdf_PeriTAB.pdf"))) - { - if (File.Exists(path_pdf)) { try { File.Delete(path_pdf); } catch (IOException ex) { MessageBox.Show("O PDF está aberto. Feche-o para gerar um novo PDF."); goto del_temp; } } - File.Move(Path.Combine(Path.GetTempPath(), "tmp_pdf_PeriTAB.pdf"), path_pdf); - Globals.ThisAddIn.Application.DisplayStatusBar = true; Globals.ThisAddIn.Application.StatusBar = "PDF gerado com sucesso."; - if (Globals.Ribbons.Ribbon1.checkBox_abrir.Checked) { System.Diagnostics.Process.Start(path_pdf); } - } - else - { - MessageBox.Show("Não foi possível gerar o PDF."); - } + if (File.Exists(Path.Combine(Path.GetTempPath(), "tmp_pdf_PeriTAB.pdf"))) + { + if (File.Exists(path_pdf)) { try { File.Delete(path_pdf); } catch (IOException ex) { MessageBox.Show("O PDF está aberto. Feche-o para gerar um novo PDF."); goto del_temp; } } + File.Move(Path.Combine(Path.GetTempPath(), "tmp_pdf_PeriTAB.pdf"), path_pdf); + Globals.ThisAddIn.Application.DisplayStatusBar = true; Globals.ThisAddIn.Application.StatusBar = "PDF gerado com sucesso."; + if (Globals.Ribbons.Ribbon1.checkBox_abrir.Checked) { System.Diagnostics.Process.Start(path_pdf); } + } + else + { + MessageBox.Show("Não foi possível gerar o PDF."); + } - } - del_temp: - if (inputPdf_open) inputPdf.Close(); - if (File.Exists(Path.Combine(Path.GetTempPath(), "tmp_pdf_PeriTAB.pdf"))) { File.Delete(Path.Combine(Path.GetTempPath(), "tmp_pdf_PeriTAB.pdf")); } //Deleta tmp.pdf + } + del_temp: + if (inputPdf_open) inputPdf.Close(); + if (File.Exists(Path.Combine(Path.GetTempPath(), "tmp_pdf_PeriTAB.pdf"))) { File.Delete(Path.Combine(Path.GetTempPath(), "tmp_pdf_PeriTAB.pdf")); } //Deleta tmp.pdf + }).Start(); } private string GetLocalPath(string path)