I am working on trying to limit the size of the file generated in my code:
I believe one of my issues is that the fonts are being included on each page of the document and not the overall document itself.
Any suggestions would be appreciated. I am not using images on this form. Just tables and textframes.
Here is the code I am using:
Code:
private byte[] Combine(List<Student> students)
{
if (students.Count != 0)
{
using var ms = new MemoryStream();
using (var doc = new PdfDocument())
{
foreach (var student in students)
{
using var pdfStream = new MemoryStream(Generate(student));
using var pdf = PdfReader.Open(pdfStream, PdfDocumentOpenMode.Import);
foreach (var page in pdf.Pages)
{
doc.AddPage(page);
}
}
doc.Save(ms);
}
return ms.ToArray();
}
throw new Exception("No students were provided.");
}
private byte[] Generate(Student student)
{
var document = new Document();
var styleHeader = document.Styles.AddStyle("fntTableFontHdr", "Normal");
styleHeader.Font.Name = "Tinos";
styleHeader.Font.Size = 14;
styleHeader.Font.Bold = true;
var styleRegular = document.Styles.AddStyle("fntTableFont", "Normal");
styleRegular.Font.Name = "Tinos";
styleRegular.Font.Size = 12;
styleRegular.Font.Bold = false;
// Add a section to the document
var section = document.AddSection();
// Set the section to portrait orientation explicitly
section.PageSetup.Orientation = Orientation.Portrait;
// Set the page size to 8.5 x 11 inches
section.PageSetup.PageWidth = Unit.FromInch(8.5);
section.PageSetup.PageHeight = Unit.FromInch(11);
// Set custom margins (units are points, 72 points = 1 inch)
section.PageSetup.TopMargin = Unit.FromMillimeter(16);
section.PageSetup.LeftMargin = Unit.FromMillimeter(7);
section.PageSetup.RightMargin = Unit.FromMillimeter(0);
section.PageSetup.BottomMargin = Unit.FromMillimeter(0);
//Add page content below
GeneratePage1Header(section, student);
GenerateBlockCodeInfo(section, student);
GenerateFormTitleAndYear(section);
GenerateSessionInfo(section, student);
GenerateStudentInfo(section, student);
GenerateCourseSelections(section, student);
GeneratePage1Footer(section);
section.AddPageBreak();//methods below are for the second page
GeneratePage2Header(section, student);
GenerateHighSchoolCoursesInfo(section, student);
GenerateStemInterest(section, student);
GenerateInterestSurvey(section, student);
GenerateApCourseInfo(section, student);
GenerateCollegeCoursesTakenInfo(section, student);
//End of adding Data
var pdfRenderer = new PdfDocumentRenderer()
{
Document = document
};
pdfRenderer.RenderDocument();
// Before saving the document, modify the viewer preferences
// Check if ViewerPreferences exists, if not, create it and turn off print scaling.
pdfRenderer.PdfDocument.Internals.Catalog.Elements["/ViewerPreferences"] ??= new PdfDictionary(pdfRenderer.PdfDocument);
var viewerPreferences = (PdfDictionary)pdfRenderer.PdfDocument.Internals.Catalog.Elements["/ViewerPreferences"]!;
viewerPreferences.Elements["/PrintScaling"] = new PdfName("/None");
using MemoryStream ms = new();
pdfRenderer.PdfDocument.Save(ms, false);
return ms.ToArray();
}