Skip to content

Instantly share code, notes, and snippets.

@NDiiong
Last active June 2, 2021 02:14
Show Gist options
  • Save NDiiong/efacf67fdbb785240f2d7083d9e98434 to your computer and use it in GitHub Desktop.
Save NDiiong/efacf67fdbb785240f2d7083d9e98434 to your computer and use it in GitHub Desktop.
Pattern Builder
public enum PdfPageSize
{
A0,
A1,
A2,
A3,
A4
}
public class DocumentPreferencesBuilder
{
public DocumentMargins _margins {get;set;}
public void DefaultDocumentMargins(DocumentMargins margins)
{
_margins = margins;
}
public void PageSize(PdfPageSize size)
{
_pdfReport.DataBuilder.DefaultPageSize(size.ToRectangle());
}
}
public class DocumentPreferencesBuilder
{
readonly PdfReport _pdfReport;
public DocumentPreferencesBuilder(PdfReport pdfReport)
{
_pdfReport = pdfReport;
}
public void DocumentMargins(DocumentMargins margins)
{
_pdfReport.DataBuilder.DefaultDocumentMargins(margins);
}
}
public class PagesHeaderBuilder
{
readonly PdfReport _pdfReport;
public PagesHeaderBuilder(PdfReport pdfReport)
{
_pdfReport = pdfReport;
}
public void InlineHeader(Action<InlineHeaderProviderBuilder> inlineHeaderProviderBuilder)
{
var builder = new InlineHeaderProviderBuilder();
inlineHeaderProviderBuilder(builder);
_pdfReport.DataBuilder.SetHeader(builder.InlineHeaderProvider);
}
}
public class PdfReport
{
internal DataBuilder DataBuilder { set; get; }
public PdfReport()
{
DataBuilder = new DataBuilder();
}
public PdfReport DocumentPreferences(Action<DocumentPreferencesBuilder> pdfRptPagePreferencesBuilder)
{
var builder = new DocumentPreferencesBuilder(this);
pdfRptPagePreferencesBuilder(builder);
return this;
}
public PdfReport PagesHeader(Action<PagesHeaderBuilder> pagesHeaderBuilder)
{
var builder = new PagesHeaderBuilder(this);
pagesHeaderBuilder(builder);
return this;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment