Ejemplo n.º 1
0
        public static response_item_type[] FillForm(pdf_stamper_request request,string mapping_root_path,string template_root_path, string output_root_path, DataTable data, string fonts_root_path, bool force_unc) {
            lock (_lock) {
                try {

                    List<Item> items_with_path = new List<Item>();
                    mappings mapping = new mappings();
                    if (File.Exists(mapping_root_path))
                        mapping = File.ReadAllText(mapping_root_path).DeserializeXml2<mappings>();

                    FileInfo mapping_path  = new FileInfo(mapping_root_path);
                    /*
                    string fox_helper_path = Path.Combine(mapping_path.DirectoryName, "Fox.txt");
                    if (!File.Exists(fox_helper_path)) {
                        StringBuilder b = new StringBuilder();
                        b.Append(@"
DIMENSION laArray[30,2]
laArray[1,1] = 'Obrazac1'
laArray[2,1] = 'Obrazac2'
laArray[3,1] = 'Obrazac3'
laArray[4,1] = 'Obrazac4'
laArray[5,1] = 'Obrazac5'
laArray[6,1] = 'Obrazac6'
laArray[7,1] = 'Obrazac7'
laArray[8,1] = 'Obrazac8'
laArray[9,1] = 'Obrazac9'
laArray[10,1] ='Obrazac10'
laArray[11,1] = 'Obrazac11'
laArray[12,1] = 'Obrazac12'
laArray[13,1] = 'Obrazac13'
laArray[14,1] = 'Obrazac14'
laArray[15,1] = 'Obrazac15'
laArray[16,1] = 'Obrazac16'
laArray[17,1] = 'Obrazac17'
laArray[18,1] = 'Obrazac18'
laArray[19,1] = 'Obrazac19'
laArray[20,1] ='Obrazac20'
laArray[21,1] = 'Obrazac21'
laArray[22,1] = 'Obrazac22'
laArray[23,1] = 'Obrazac23'
laArray[24,1] = 'Obrazac24'
laArray[25,1] = 'Obrazac25'
laArray[26,1] = 'Obrazac26'
laArray[27,1] = 'Obrazac27'
laArray[28,1] = 'Obrazac28'
laArray[29,1] = 'Obrazac29'
laArray[30,1] ='Obrazac30'
");
                        int current_index = -1;
                        foreach (var item in mapping.mapping_item) {
                            current_index = Int32.Parse(item.pdf_template.ToString().Replace("Obrazac", ""));
                            string source_document_path = item.file_path.Replace("@root", template_root_path);
                            FileInfo info = new FileInfo(source_document_path);
                            string value = string.Format("laArray[{0},2] = '{1}'", current_index, info.Name.Replace(info.Extension,String.Empty));
                            b.AppendLine(value);                            
                        }
                        File.WriteAllText(fox_helper_path,b.ToString());     
                     
                    }
                    */
                    if (data.Rows.Count == 0) {
                        Logging.Singleton.WriteDebug("There is no data in the provided data table!");

                        foreach (var template in request.pdf_template_list) {
                            mapping_item_type selected = mapping.mapping_item.Where(p => p.pdf_template == template).First();

                            string source_document_path = selected.file_path.Replace("@root", template_root_path);
                            items_with_path.Add(new Item() { Path = source_document_path, PdfTemplate = template });
                        }
                        if (request.merge_output == true) {
                            string merged_document_path = Path.Combine(output_root_path, String.Format("{0}_{1}{2}", "merged", DateTime.Now.ToFileTimeUtc().ToString(), ".pdf"));

                            PdfMerge merge = new PdfMerge();
                            foreach (var item in items_with_path) {
                                merge.AddDocument(item.Path);
                            }
                            merge.EnablePagination = false;
                            merge.Merge(merged_document_path);
                            string result = Convert.ToBase64String(File.ReadAllBytes(merged_document_path));
                            return new response_item_type[] { new response_item_type() { pdf_template = template.MergedContent, data = force_unc? string.Empty : result, unc_path=merged_document_path } };
                        }
                        else {
                            List<response_item_type> items = new List<response_item_type>();
                            foreach (var item in items_with_path) {
                                var temp = new response_item_type() { pdf_template = item.PdfTemplate, data = force_unc ? string.Empty : Convert.ToBase64String(File.ReadAllBytes(item.Path)), unc_path = item.Path };
                                items.Add(temp);
                            }
                            return items.ToArray();
                        }
                    }
                    else {

                        DataRow row = data.Rows[0];
                        string id_pog = string.Empty;
                        if (data.Columns.Contains("id_pog"))
                            id_pog = row["id_pog"].ToString();

                        if (request.debug_mode) {
                            foreach (DataColumn column in data.Columns) {
                                Logging.Singleton.WriteDebugFormat("Data column [{0}] has a value [{1}]", column.ToString(), row[column].ToString());
                            }
                        }

                        foreach (var template in request.pdf_template_list) {
                            mapping_item_type selected = mapping.mapping_item.Where(p => p.pdf_template == template).First();

                            string source_document_path = selected.file_path.Replace("@root", template_root_path);
                            FileInfo f = new FileInfo(source_document_path);

                            string destination_document_path = Path.Combine(output_root_path,
                                String.Format("{0}_{1}_{2}{3}",
                                id_pog.Replace("/","-").Trim(),
                                f.Name.Replace(f.Extension, ""),
                                DateTime.Now.ToFileTimeUtc().ToString(),
                                f.Extension)
                                );

                            items_with_path.Add(new Item() { Path = destination_document_path, PdfTemplate = template });

                            PdfReader reader = new PdfReader(source_document_path);
                            using (PdfStamper stamper = new PdfStamper(reader, new FileStream(destination_document_path, FileMode.Create))) {
                                AcroFields fields = stamper.AcroFields;


                                //Full path to the Unicode Arial file
                                //string ARIALUNI_TFF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF");

                                //Create a base font object making sure to specify IDENTITY-H
                                //BaseFont bf = BaseFont.CreateFont(ARIALUNI_TFF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

                                //Create a specific font object
                                //Font f = new Font(bf, 12, Font.NORMAL);
                                iTextSharp.text.pdf.BaseFont baseFont  = iTextSharp.text.pdf.BaseFont.CreateFont(Path.Combine(fonts_root_path,"arial.ttf"),"Windows-1250", true);

                                fields.AddSubstitutionFont(baseFont);
                                if (request.debug_mode) {
                                    foreach (var key in fields.Fields.Keys) {
                                        Logging.Singleton.WriteDebugFormat("Pdf field [{0}]. Data type [{1}]", key, fields.GetFieldType(key));
                                    }
                                }

                                foreach (var key in fields.Fields.Keys) {

                                    var items = selected.mapping.Where(p => p.data_field == key);
                                    if (items.Count() == 1) {
                                        var item = items.First();
                                        if (item.column_name == UNKNOWN)
                                            continue;
                                        if (data.Columns.Contains(item.column_name)) {
                                            string value = row[item.column_name].ToString();

                                            if (item.field_type == data_field_type.CheckBox) {
                                                int int_value = 0;
                                                bool boolean_value = false;
                                                if(Int32.TryParse(value, out int_value))
                                                {
                                                    value = int_value == 0? "No" : "Yes";
                                                }
                                                else if (Boolean.TryParse(value, out boolean_value))
                                                {
                                                    value = boolean_value == false? "No" : "Yes";
                                                }
                                                else
                                                {
                                                    throw new NotImplementedException(string.Format("Invalid Value [{0}] was provided for Check box type field!", value));
                                                }
                                            }
                                            fields.SetField(key, value);
                                        }
                                        else {
                                            Logging.Singleton.WriteDebugFormat("Column {0} does not belong to table {1}! Check your mappings for template {2}", item.column_name, data.TableName, template);
                                        }
                                    }
                                    else if (items.Count() == 0) {

                                        var current = selected.mapping.ToList();

                                        data_field_type field_type = data_field_type.Text;
                                        if (key.Contains("Check"))
                                            field_type = data_field_type.CheckBox;
                                        else if (key.Contains("Radio"))
                                            field_type = data_field_type.RadioButton;

                                        current.Add(new mapping_type() { column_name = UNKNOWN, data_field = key, field_type = field_type });

                                        selected.mapping = current.ToArray();

                                        File.WriteAllText(mapping_root_path, mapping.SerializeXml());
                                    }
                                    else {
                                        throw new NotImplementedException();
                                    }
                                }
                                // flatten form fields and close document
                                if (request.read_only || (request.merge_output && request.pdf_template_list.Length > 1)) {
                                    Logging.Singleton.WriteDebugFormat("Form flattening requested... Read only {0}, Merge output {1}, Template list count {2}", request.read_only, request.merge_output, request.pdf_template_list.Length);
                                    stamper.FormFlattening = true;
                                }

                                stamper.Close();
                            }
                        }
                        if (items_with_path.Count() == 1) {
                            string path = items_with_path.First().Path;
                            var bytes = File.ReadAllBytes(path);
                            string result = Convert.ToBase64String(bytes);
                            Logging.Singleton.WriteDebugFormat("Response lenght is {0} bytes", bytes.Length);
                            return new response_item_type[] { new response_item_type() { pdf_template = items_with_path.First().PdfTemplate, data = force_unc ? string.Empty : result, unc_path = path } };
                            //return new response_item_type[] { new response_item_type() { pdf_template = items_with_path.First().PdfTemplate, data = Convert.ToBase64String(new byte[] {1,2,3,4,5,6,7,8,9}) } };
                        }
                        else {
                            if (request.merge_output == true) {
                                string merged_document_path = Path.Combine(output_root_path, String.Format("{0}_{1}{2}{3}", id_pog.Replace("/","-").Trim(), "merged", DateTime.Now.ToFileTimeUtc().ToString(), ".pdf"));

                                //List<string> file_names = new List<string>();
                                //foreach (var item in items_with_path) {
                                //    file_names.Add(item.Path);
                                //}
                                //var path = MergePdfForms(file_names, merged_document_path);

                                PdfMerge merge = new PdfMerge();
                                foreach (var item in items_with_path) {
                                    merge.AddDocument(item.Path);
                                }



                                merge.EnablePagination = false;
                                merge.Merge(merged_document_path);
                                //using (FileStream file = new FileStream(merged_document_path, FileMode.Create, System.IO.FileAccess.Write)) {
                                //    byte[] bytes = new byte[stream.Length];
                                //    stream.Read(bytes, 0, (int)stream.Length);
                                //    file.Write(bytes, 0, bytes.Length);
                                //    stream.Close();
                                //}

                                var bytes = File.ReadAllBytes(merged_document_path);
                                string result = Convert.ToBase64String(bytes);
                                Logging.Singleton.WriteDebugFormat("Response lenght is {0} bytes", bytes.Length);
                                return new response_item_type[] { new response_item_type() { pdf_template = template.MergedContent, data = force_unc ? string.Empty : result, unc_path = merged_document_path } };
                            }
                            else {
                                List<response_item_type> items = new List<response_item_type>();
                                foreach (var item in items_with_path) {
                                    var bytes = File.ReadAllBytes(item.Path);
                                    string result = Convert.ToBase64String(bytes);
                                    Logging.Singleton.WriteDebugFormat("Response lenght is {0} bytes", bytes.Length);
                                    var temp = new response_item_type() { pdf_template = item.PdfTemplate, data = force_unc ? string.Empty : result, unc_path = item.Path };
                                    //var temp = new response_item_type() { pdf_template = item.PdfTemplate, data = Convert.ToBase64String(new byte[] {1,2,3,4,5,6,7,8,9}) };
                                    items.Add(temp);
                                }

                                return items.ToArray();
                            }
                        }
                    }                    
                }
                catch (Exception ex) {
                    string message = Logging.CreateExceptionMessage(ex);
                    Logging.Singleton.WriteDebug(message);
                    return null;
                }
            }
        }
Ejemplo n.º 2
0
        public static response_item_type[] FillForm(pdf_stamper_request request, string mapping_root_path, string template_root_path, string output_root_path, DataTable data, string fonts_root_path, bool force_unc)
        {
            lock (_lock) {
                try {
                    List <Item> items_with_path = new List <Item>();
                    mappings    mapping         = new mappings();
                    if (File.Exists(mapping_root_path))
                    {
                        mapping = File.ReadAllText(mapping_root_path).DeserializeXml2 <mappings>();
                    }

                    FileInfo mapping_path = new FileInfo(mapping_root_path);

                    /*
                     * string fox_helper_path = Path.Combine(mapping_path.DirectoryName, "Fox.txt");
                     * if (!File.Exists(fox_helper_path)) {
                     *  StringBuilder b = new StringBuilder();
                     *  b.Append(@"
                     * DIMENSION laArray[30,2]
                     * laArray[1,1] = 'Obrazac1'
                     * laArray[2,1] = 'Obrazac2'
                     * laArray[3,1] = 'Obrazac3'
                     * laArray[4,1] = 'Obrazac4'
                     * laArray[5,1] = 'Obrazac5'
                     * laArray[6,1] = 'Obrazac6'
                     * laArray[7,1] = 'Obrazac7'
                     * laArray[8,1] = 'Obrazac8'
                     * laArray[9,1] = 'Obrazac9'
                     * laArray[10,1] ='Obrazac10'
                     * laArray[11,1] = 'Obrazac11'
                     * laArray[12,1] = 'Obrazac12'
                     * laArray[13,1] = 'Obrazac13'
                     * laArray[14,1] = 'Obrazac14'
                     * laArray[15,1] = 'Obrazac15'
                     * laArray[16,1] = 'Obrazac16'
                     * laArray[17,1] = 'Obrazac17'
                     * laArray[18,1] = 'Obrazac18'
                     * laArray[19,1] = 'Obrazac19'
                     * laArray[20,1] ='Obrazac20'
                     * laArray[21,1] = 'Obrazac21'
                     * laArray[22,1] = 'Obrazac22'
                     * laArray[23,1] = 'Obrazac23'
                     * laArray[24,1] = 'Obrazac24'
                     * laArray[25,1] = 'Obrazac25'
                     * laArray[26,1] = 'Obrazac26'
                     * laArray[27,1] = 'Obrazac27'
                     * laArray[28,1] = 'Obrazac28'
                     * laArray[29,1] = 'Obrazac29'
                     * laArray[30,1] ='Obrazac30'
                     * ");
                     *  int current_index = -1;
                     *  foreach (var item in mapping.mapping_item) {
                     *      current_index = Int32.Parse(item.pdf_template.ToString().Replace("Obrazac", ""));
                     *      string source_document_path = item.file_path.Replace("@root", template_root_path);
                     *      FileInfo info = new FileInfo(source_document_path);
                     *      string value = string.Format("laArray[{0},2] = '{1}'", current_index, info.Name.Replace(info.Extension,String.Empty));
                     *      b.AppendLine(value);
                     *  }
                     *  File.WriteAllText(fox_helper_path,b.ToString());
                     *
                     * }
                     */
                    if (data.Rows.Count == 0)
                    {
                        Logging.Singleton.WriteDebug("There is no data in the provided data table!");

                        foreach (var template in request.pdf_template_list)
                        {
                            mapping_item_type selected = mapping.mapping_item.Where(p => p.pdf_template == template).First();

                            string source_document_path = selected.file_path.Replace("@root", template_root_path);
                            items_with_path.Add(new Item()
                            {
                                Path = source_document_path, PdfTemplate = template
                            });
                        }
                        if (request.merge_output == true)
                        {
                            string merged_document_path = Path.Combine(output_root_path, String.Format("{0}_{1}{2}", "merged", DateTime.Now.ToFileTimeUtc().ToString(), ".pdf"));

                            PdfMerge merge = new PdfMerge();
                            foreach (var item in items_with_path)
                            {
                                merge.AddDocument(item.Path);
                            }
                            merge.EnablePagination = false;
                            merge.Merge(merged_document_path);
                            string result = Convert.ToBase64String(File.ReadAllBytes(merged_document_path));
                            return(new response_item_type[] { new response_item_type()
                                                              {
                                                                  pdf_template = template.MergedContent, data = force_unc? string.Empty : result, unc_path = merged_document_path
                                                              } });
                        }
                        else
                        {
                            List <response_item_type> items = new List <response_item_type>();
                            foreach (var item in items_with_path)
                            {
                                var temp = new response_item_type()
                                {
                                    pdf_template = item.PdfTemplate, data = force_unc ? string.Empty : Convert.ToBase64String(File.ReadAllBytes(item.Path)), unc_path = item.Path
                                };
                                items.Add(temp);
                            }
                            return(items.ToArray());
                        }
                    }
                    else
                    {
                        DataRow row    = data.Rows[0];
                        string  id_pog = string.Empty;
                        if (data.Columns.Contains("id_pog"))
                        {
                            id_pog = row["id_pog"].ToString();
                        }

                        if (request.debug_mode)
                        {
                            foreach (DataColumn column in data.Columns)
                            {
                                Logging.Singleton.WriteDebugFormat("Data column [{0}] has a value [{1}]", column.ToString(), row[column].ToString());
                            }
                        }

                        foreach (var template in request.pdf_template_list)
                        {
                            mapping_item_type selected = mapping.mapping_item.Where(p => p.pdf_template == template).First();

                            string   source_document_path = selected.file_path.Replace("@root", template_root_path);
                            FileInfo f = new FileInfo(source_document_path);

                            string destination_document_path = Path.Combine(output_root_path,
                                                                            String.Format("{0}_{1}_{2}{3}",
                                                                                          id_pog.Replace("/", "-").Trim(),
                                                                                          f.Name.Replace(f.Extension, ""),
                                                                                          DateTime.Now.ToFileTimeUtc().ToString(),
                                                                                          f.Extension)
                                                                            );

                            items_with_path.Add(new Item()
                            {
                                Path = destination_document_path, PdfTemplate = template
                            });

                            PdfReader reader = new PdfReader(source_document_path);
                            using (PdfStamper stamper = new PdfStamper(reader, new FileStream(destination_document_path, FileMode.Create))) {
                                AcroFields fields = stamper.AcroFields;


                                //Full path to the Unicode Arial file
                                //string ARIALUNI_TFF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF");

                                //Create a base font object making sure to specify IDENTITY-H
                                //BaseFont bf = BaseFont.CreateFont(ARIALUNI_TFF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

                                //Create a specific font object
                                //Font f = new Font(bf, 12, Font.NORMAL);
                                iTextSharp.text.pdf.BaseFont baseFont = iTextSharp.text.pdf.BaseFont.CreateFont(Path.Combine(fonts_root_path, "arial.ttf"), "Windows-1250", true);

                                fields.AddSubstitutionFont(baseFont);
                                if (request.debug_mode)
                                {
                                    foreach (var key in fields.Fields.Keys)
                                    {
                                        Logging.Singleton.WriteDebugFormat("Pdf field [{0}]. Data type [{1}]", key, fields.GetFieldType(key));
                                    }
                                }

                                foreach (var key in fields.Fields.Keys)
                                {
                                    var items = selected.mapping.Where(p => p.data_field == key);
                                    if (items.Count() == 1)
                                    {
                                        var item = items.First();
                                        if (item.column_name == UNKNOWN)
                                        {
                                            continue;
                                        }
                                        if (data.Columns.Contains(item.column_name))
                                        {
                                            string value = row[item.column_name].ToString();

                                            if (item.field_type == data_field_type.CheckBox)
                                            {
                                                int  int_value     = 0;
                                                bool boolean_value = false;
                                                if (Int32.TryParse(value, out int_value))
                                                {
                                                    value = int_value == 0? "No" : "Yes";
                                                }
                                                else if (Boolean.TryParse(value, out boolean_value))
                                                {
                                                    value = boolean_value == false? "No" : "Yes";
                                                }
                                                else
                                                {
                                                    throw new NotImplementedException(string.Format("Invalid Value [{0}] was provided for Check box type field!", value));
                                                }
                                            }
                                            fields.SetField(key, value);
                                        }
                                        else
                                        {
                                            Logging.Singleton.WriteDebugFormat("Column {0} does not belong to table {1}! Check your mappings for template {2}", item.column_name, data.TableName, template);
                                        }
                                    }
                                    else if (items.Count() == 0)
                                    {
                                        var current = selected.mapping.ToList();

                                        data_field_type field_type = data_field_type.Text;
                                        if (key.Contains("Check"))
                                        {
                                            field_type = data_field_type.CheckBox;
                                        }
                                        else if (key.Contains("Radio"))
                                        {
                                            field_type = data_field_type.RadioButton;
                                        }

                                        current.Add(new mapping_type()
                                        {
                                            column_name = UNKNOWN, data_field = key, field_type = field_type
                                        });

                                        selected.mapping = current.ToArray();

                                        File.WriteAllText(mapping_root_path, mapping.SerializeXml());
                                    }
                                    else
                                    {
                                        throw new NotImplementedException();
                                    }
                                }
                                // flatten form fields and close document
                                if (request.read_only || (request.merge_output && request.pdf_template_list.Length > 1))
                                {
                                    Logging.Singleton.WriteDebugFormat("Form flattening requested... Read only {0}, Merge output {1}, Template list count {2}", request.read_only, request.merge_output, request.pdf_template_list.Length);
                                    stamper.FormFlattening = true;
                                }

                                stamper.Close();
                            }
                        }
                        if (items_with_path.Count() == 1)
                        {
                            string path   = items_with_path.First().Path;
                            var    bytes  = File.ReadAllBytes(path);
                            string result = Convert.ToBase64String(bytes);
                            Logging.Singleton.WriteDebugFormat("Response lenght is {0} bytes", bytes.Length);
                            return(new response_item_type[] { new response_item_type()
                                                              {
                                                                  pdf_template = items_with_path.First().PdfTemplate, data = force_unc ? string.Empty : result, unc_path = path
                                                              } });
                            //return new response_item_type[] { new response_item_type() { pdf_template = items_with_path.First().PdfTemplate, data = Convert.ToBase64String(new byte[] {1,2,3,4,5,6,7,8,9}) } };
                        }
                        else
                        {
                            if (request.merge_output == true)
                            {
                                string merged_document_path = Path.Combine(output_root_path, String.Format("{0}_{1}{2}{3}", id_pog.Replace("/", "-").Trim(), "merged", DateTime.Now.ToFileTimeUtc().ToString(), ".pdf"));

                                //List<string> file_names = new List<string>();
                                //foreach (var item in items_with_path) {
                                //    file_names.Add(item.Path);
                                //}
                                //var path = MergePdfForms(file_names, merged_document_path);

                                PdfMerge merge = new PdfMerge();
                                foreach (var item in items_with_path)
                                {
                                    merge.AddDocument(item.Path);
                                }



                                merge.EnablePagination = false;
                                merge.Merge(merged_document_path);
                                //using (FileStream file = new FileStream(merged_document_path, FileMode.Create, System.IO.FileAccess.Write)) {
                                //    byte[] bytes = new byte[stream.Length];
                                //    stream.Read(bytes, 0, (int)stream.Length);
                                //    file.Write(bytes, 0, bytes.Length);
                                //    stream.Close();
                                //}

                                var    bytes  = File.ReadAllBytes(merged_document_path);
                                string result = Convert.ToBase64String(bytes);
                                Logging.Singleton.WriteDebugFormat("Response lenght is {0} bytes", bytes.Length);
                                return(new response_item_type[] { new response_item_type()
                                                                  {
                                                                      pdf_template = template.MergedContent, data = force_unc ? string.Empty : result, unc_path = merged_document_path
                                                                  } });
                            }
                            else
                            {
                                List <response_item_type> items = new List <response_item_type>();
                                foreach (var item in items_with_path)
                                {
                                    var    bytes  = File.ReadAllBytes(item.Path);
                                    string result = Convert.ToBase64String(bytes);
                                    Logging.Singleton.WriteDebugFormat("Response lenght is {0} bytes", bytes.Length);
                                    var temp = new response_item_type()
                                    {
                                        pdf_template = item.PdfTemplate, data = force_unc ? string.Empty : result, unc_path = item.Path
                                    };
                                    //var temp = new response_item_type() { pdf_template = item.PdfTemplate, data = Convert.ToBase64String(new byte[] {1,2,3,4,5,6,7,8,9}) };
                                    items.Add(temp);
                                }

                                return(items.ToArray());
                            }
                        }
                    }
                }
                catch (Exception ex) {
                    string message = Logging.CreateExceptionMessage(ex);
                    Logging.Singleton.WriteDebug(message);
                    return(null);
                }
            }
        }