using ReportGeneration.Interface; using System; using System.IO; using System.Text; using Microsoft.VisualBasic.CompilerServices; namespace ReportGeneration.Abstract; public abstract class DocumentGeneratorBase : StreamWriterBase, IDocumentGenerator { /// protected DocumentGeneratorBase() { } /// protected DocumentGeneratorBase(Stream stream) : base(stream) { } /// protected DocumentGeneratorBase(string filePath) : base(File.Open(filePath, FileMode.Create, FileAccess.Write)) { } /// protected DocumentGeneratorBase(Stream stream, Encoding encoding) : base(stream, encoding) { } #region Writing /// public virtual IDocumentGenerator Append(string? text = default) { Write(text); return this; } /// public virtual IDocumentGenerator AppendLine(string? text = default) { WriteLine(text); return this; } /// public abstract IDocumentGenerator AppendHeading(int level, string text); /// public abstract IDocumentGenerator AppendParagraph(string? text = default); /// public IDocumentGenerator AppendTable(int columns, Action table) { Write(() => MakeTable(columns, new MemoryStream()), table); return this; } protected abstract ITableGenerator MakeTable(int columns, Stream stream); #endregion /// public abstract string FormatImage(string path, IBounds? bounds = default); }