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);
}