public Stream FillForm(Stream inputStream, Models.PDF.Invoice model) { Stream outStream = new MemoryStream(); PdfReader pdfReader = null; PdfStamper pdfStamper = null; Stream inStream = null; try { pdfReader = new PdfReader(inputStream); pdfStamper = new PdfStamper(pdfReader, outStream); AcroFields form = pdfStamper.AcroFields; Font font = GetTHSarabunNew(); foreach (string key in form.Fields.Keys) { form.SetFieldProperty(key, "textfont", font.BaseFont, null); form.RegenerateField(key); } form.SetField("txt_CustomerName", "เจนวิทย์ เพ็ญจำรัส"); // form.SetField("rdb_ans_1","Choice1"); // form.SetField("txt_CardName", model.CardName); //form.SetField("txt_DocNum", model.Docnum); // set this if you want the result PDF to not be editable. pdfStamper.FormFlattening = true; return(outStream); } finally { pdfStamper?.Close(); pdfReader?.Close(); inStream?.Close(); } }
// --------------------------------------------------------------------------- /** * Manipulates a PDF file src with the file dest as result * @param src the original PDF */ public byte[] ManipulatePdf(byte[] src) { PdfReader reader = new PdfReader(src); using (MemoryStream ms = new MemoryStream()) { using (PdfStamper stamper = new PdfStamper(reader, ms)) { AcroFields form = stamper.AcroFields; form.SetField("text_1", "Bruno Lowagie"); form.SetFieldProperty("text_2", "fflags", 0, null); form.SetFieldProperty("text_2", "bordercolor", BaseColor.RED, null); form.SetField("text_2", "bruno"); form.SetFieldProperty("text_3", "clrfflags", TextField.PASSWORD, null); form.SetFieldProperty("text_3", "setflags", PdfAnnotation.FLAGS_PRINT, null); form.SetField("text_3", "12345678", "xxxxxxxx"); form.SetFieldProperty("text_4", "textsize", 12f, null); form.RegenerateField("text_4"); } return(ms.ToArray()); } }
/// <summary> /// Utility method that fills out the blank blue card /// </summary> /// <param name="inputStream">The blank blue card</param> /// <param name="model">The merit badge student that contains the data</param> /// <param name="numberOfPDFs">The number of PDFs we are going to generate for the student</param> /// <param name="writeVoid">Whether VOID should be written on unused blue cards</param> /// <returns>A Stream containing the filled out PDF</returns> private static Stream FillForm(Stream inputStream, MeritBadgeStudentViewModel model, int numberOfPDFs, bool writeVoid) { Stream outStream = new MemoryStream(); PdfReader pdfReader = null; PdfStamper pdfStamper = null; try { pdfReader = new PdfReader(inputStream); pdfStamper = new PdfStamper(pdfReader, outStream); AcroFields form = pdfStamper.AcroFields; // Name BaseFont bf = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.EMBEDDED); var studentName = model.FirstName + " " + model.LastName; form.SetField(BlueCardFields.StudentName, studentName); float fontSize = 250 / studentName.Length; if (fontSize > 12) { fontSize = 12; } if (fontSize < 5) { fontSize = 5; } form.SetFieldProperty(BlueCardFields.StudentName, "textsize", fontSize, null); form.SetFieldProperty(BlueCardFields.StudentName, "textfont", bf, null); form.RegenerateField(BlueCardFields.StudentName); form.SetField(BlueCardFields.Address, model.Address ?? ""); form.SetField(BlueCardFields.CityStateZip, string.Concat(model.City, " ", model.State, " ", model.ZipCode)); form.SetField(BlueCardFields.UnitTypeRB, model.UnitType); form.SetField(BlueCardFields.UnitType, model.UnitType); form.SetField(BlueCardFields.UnitNumber, model.UnitNumber.ToString()); form.SetField(BlueCardFields.District, model.District ?? ""); form.SetField(BlueCardFields.Council, model.Council ?? ""); var mbcclasses = model.StudentClassEntries.ToList(); for (var i = 1; i + 3 * (numberOfPDFs - 1) <= model.StudentClassEntries.Count() && i <= 3; i++) { var mbcclass = mbcclasses[i + 3 * (numberOfPDFs - 1) - 1]; var number = i.ToString(); if (i == 3) { number = ""; } form.SetField(BlueCardFields.MeritBadgeName + number, mbcclass.MeritBadgeClass.ClassName); form.SetFieldProperty(BlueCardFields.MeritBadgeName + number, "textfont", bf, null); form.RegenerateField(BlueCardFields.MeritBadgeName + number); form.SetField(BlueCardFields.DateApplied + number, ""); if (mbcclass.MeritBadgeClass.Counselor != null) { if (mbcclass.IsComplete && mbcclass.MeritBadgeClass.Counselor.DisplayName != null) { form.SetField(BlueCardFields.Counselor + number, mbcclass.MeritBadgeClass.Counselor.FirstName + " " + mbcclass.MeritBadgeClass.Counselor.LastName); } form.SetField(BlueCardFields.CounselorAddress + number, mbcclass.MeritBadgeClass.Counselor.Address); form.SetField(BlueCardFields.CounselorCityStateZip + number, $"{mbcclass.MeritBadgeClass.Counselor.City} {mbcclass.MeritBadgeClass.Counselor.State} {mbcclass.MeritBadgeClass.Counselor.ZipCode}"); form.SetField(BlueCardFields.CounselorPhone + number, mbcclass.MeritBadgeClass.Counselor.Telephone); } var requirementTitleList = mbcclass.RequirementList.Select(r => r.RequirementTitle).ToList(); var requirementList = mbcclass.RequirementList.ToList(); for (var j = 1; j <= requirementTitleList.Count; j++) { var appendString = number + "." + j.ToString("00"); form.SetField(BlueCardFields.Requirement + appendString, requirementTitleList[j - 1]); var fieldString = BlueCardFields.RequirementDate + appendString; var req = requirementList[j - 1]; form.SetField(fieldString, req.IsComplete ? req.CompletionDate.ToString("MM/dd/yyyy") : ""); form.SetFieldProperty(fieldString, "textsize", (float)6, null); form.RegenerateField(fieldString); var counselorInitials = string.Empty; if (mbcclass.MeritBadgeClass.Counselor != null) { counselorInitials = mbcclass.MeritBadgeClass.Counselor.FirstName.ElementAt(0).ToString().ToUpperInvariant() + mbcclass.MeritBadgeClass.Counselor.LastName.ElementAt(0).ToString().ToUpperInvariant(); } form.SetField(BlueCardFields.RequirementInitials + appendString, req.IsComplete ? counselorInitials : ""); } if (mbcclass.IsComplete) { form.SetField(BlueCardFields.DateCompleted + number, mbcclass.CompletionDate.ToString("MM/dd/yyyy")); } if (!string.IsNullOrWhiteSpace(mbcclass.Remarks)) { form.SetField(BlueCardFields.Remarks + number, mbcclass.Remarks); } } if (writeVoid && numberOfPDFs * 3 - mbcclasses.Count > 0) { form.SetField(BlueCardFields.BlueCardVoid1, "VOID"); if (numberOfPDFs * 3 - mbcclasses.Count > 1) { form.SetField(BlueCardFields.BlueCardVoid2, "VOID"); } } pdfStamper.FormFlattening = true; return(outStream); } finally { pdfStamper?.Close(); pdfReader?.Close(); } }