Skip to content

Commit cb7d036

Browse files
committed
2.0.0
1 parent 4fd4551 commit cb7d036

22 files changed

+510
-327
lines changed

ArrayToPdf.sln

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio Version 16
4-
VisualStudioVersion = 16.0.29709.97
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.0.31825.309
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ArrayToPdf", "ArrayToPdf\ArrayToPdf.csproj", "{EFB148C8-AE5F-41C9-B4C0-408E7A8CC602}"
77
EndProject
8-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestConsoleApp", "TestConsoleApp\TestConsoleApp.csproj", "{3ADEAC09-75EB-45B1-B2AC-E7ACBEFEA81E}"
9-
EndProject
108
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{CCA9C452-C78D-4C97-B4C0-2E730CF4B30C}"
119
ProjectSection(SolutionItems) = preProject
1210
.gitignore = .gitignore
1311
README.md = README.md
1412
EndProjectSection
1513
EndProject
14+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example.ConsoleApp", "Examples\Example.ConsoleApp\Example.ConsoleApp.csproj", "{F1C034BD-B3CE-47BB-BD6D-043947BE5F6B}"
15+
EndProject
1616
Global
1717
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1818
Debug|Any CPU = Debug|Any CPU
@@ -23,10 +23,10 @@ Global
2323
{EFB148C8-AE5F-41C9-B4C0-408E7A8CC602}.Debug|Any CPU.Build.0 = Debug|Any CPU
2424
{EFB148C8-AE5F-41C9-B4C0-408E7A8CC602}.Release|Any CPU.ActiveCfg = Release|Any CPU
2525
{EFB148C8-AE5F-41C9-B4C0-408E7A8CC602}.Release|Any CPU.Build.0 = Release|Any CPU
26-
{3ADEAC09-75EB-45B1-B2AC-E7ACBEFEA81E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27-
{3ADEAC09-75EB-45B1-B2AC-E7ACBEFEA81E}.Debug|Any CPU.Build.0 = Debug|Any CPU
28-
{3ADEAC09-75EB-45B1-B2AC-E7ACBEFEA81E}.Release|Any CPU.ActiveCfg = Release|Any CPU
29-
{3ADEAC09-75EB-45B1-B2AC-E7ACBEFEA81E}.Release|Any CPU.Build.0 = Release|Any CPU
26+
{F1C034BD-B3CE-47BB-BD6D-043947BE5F6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27+
{F1C034BD-B3CE-47BB-BD6D-043947BE5F6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
28+
{F1C034BD-B3CE-47BB-BD6D-043947BE5F6B}.Release|Any CPU.ActiveCfg = Release|Any CPU
29+
{F1C034BD-B3CE-47BB-BD6D-043947BE5F6B}.Release|Any CPU.Build.0 = Release|Any CPU
3030
EndGlobalSection
3131
GlobalSection(SolutionProperties) = preSolution
3232
HideSolutionNode = FALSE

ArrayToPdf.snk

596 Bytes
Binary file not shown.

ArrayToPdf/ArrayToPdf.cs

+57-58
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
1-
using System;
1+
using MigraDoc.DocumentObjectModel;
2+
using MigraDoc.DocumentObjectModel.Tables;
3+
using MigraDoc.Rendering;
4+
using System;
25
using System.Collections.Generic;
3-
using System.Diagnostics;
46
using System.IO;
57
using System.Linq;
6-
using System.Reflection;
78
using System.Text;
8-
using MigraDoc.DocumentObjectModel;
9-
using MigraDoc.DocumentObjectModel.Tables;
10-
using MigraDoc.Rendering;
11-
using PdfSharp;
129

13-
namespace RandomSolutions
10+
namespace ArrayToPdf
1411
{
1512
public class ArrayToPdf
1613
{
@@ -21,19 +18,19 @@ static ArrayToPdf()
2118
}
2219
#endif
2320

24-
public static byte[] CreatePdf<T>(IEnumerable<T> items, Action<ArrayToPdfScheme<T>> schemeBuilder = null)
21+
public static byte[] CreatePdf<T>(IEnumerable<T> items, Action<SchemaBuilder<T>>? schema = null)
2522
{
26-
var scheme = new ArrayToPdfScheme<T>();
27-
schemeBuilder?.Invoke(scheme);
28-
return _createPdf(items, scheme);
23+
var builder = new SchemaBuilder<T>(items);
24+
schema?.Invoke(builder);
25+
return _createPdf(builder.Schema);
2926
}
3027

31-
static byte[] _createPdf<T>(IEnumerable<T> items, ArrayToPdfScheme<T> scheme)
28+
static byte[] _createPdf(Schema schema)
3229
{
3330
using (var ms = new MemoryStream())
3431
{
3532
var renderer = new PdfDocumentRenderer(true);
36-
renderer.Document = _createDocument(items, scheme);
33+
renderer.Document = _createDocument(schema);
3734
renderer.RenderDocument();
3835
renderer.PdfDocument.Save(ms);
3936
return ms.ToArray();
@@ -42,22 +39,22 @@ static byte[] _createPdf<T>(IEnumerable<T> items, ArrayToPdfScheme<T> scheme)
4239

4340
static readonly int _tableLeftBias = -1;
4441

45-
static Document _createDocument<T>(IEnumerable<T> items, ArrayToPdfScheme<T> scheme)
42+
static Document _createDocument(Schema schema)
4643
{
4744
var document = new Document();
4845
document.UseCmykColor = true;
49-
document.Info.Title = scheme.Title;
50-
document.Info.Subject = scheme.Subject;
51-
document.Info.Author = scheme.Author;
52-
53-
document.DefaultPageSetup.PageFormat = (PageFormat)scheme.PageFormat;
54-
document.DefaultPageSetup.Orientation = (Orientation)scheme.PageOrientation;
55-
document.DefaultPageSetup.HeaderDistance = Unit.FromMillimeter(scheme.PageMarginTop);
56-
document.DefaultPageSetup.FooterDistance = Unit.FromMillimeter(scheme.PageMarginBottom);
57-
document.DefaultPageSetup.TopMargin = Unit.FromMillimeter(scheme.PageMarginTop + (string.IsNullOrWhiteSpace(scheme.Header) ? 0 : scheme.HeaderHeight));
58-
document.DefaultPageSetup.RightMargin = Unit.FromMillimeter(scheme.PageMarginRight + _tableLeftBias);
59-
document.DefaultPageSetup.BottomMargin = Unit.FromMillimeter(scheme.PageMarginBottom + (string.IsNullOrWhiteSpace(scheme.Footer) ? 0 : scheme.FooterHeight));
60-
document.DefaultPageSetup.LeftMargin = Unit.FromMillimeter(scheme.PageMarginLeft - _tableLeftBias);
46+
document.Info.Title = schema.Title;
47+
document.Info.Subject = schema.Subject;
48+
document.Info.Author = schema.Author;
49+
50+
document.DefaultPageSetup.PageFormat = (PageFormat)schema.PageFormat;
51+
document.DefaultPageSetup.Orientation = (Orientation)schema.PageOrientation;
52+
document.DefaultPageSetup.HeaderDistance = Unit.FromMillimeter(schema.PageMarginTop);
53+
document.DefaultPageSetup.FooterDistance = Unit.FromMillimeter(schema.PageMarginBottom);
54+
document.DefaultPageSetup.TopMargin = Unit.FromMillimeter(schema.PageMarginTop + (string.IsNullOrWhiteSpace(schema.Header) ? 0 : schema.HeaderHeight));
55+
document.DefaultPageSetup.RightMargin = Unit.FromMillimeter(schema.PageMarginRight + _tableLeftBias);
56+
document.DefaultPageSetup.BottomMargin = Unit.FromMillimeter(schema.PageMarginBottom + (string.IsNullOrWhiteSpace(schema.Footer) ? 0 : schema.FooterHeight));
57+
document.DefaultPageSetup.LeftMargin = Unit.FromMillimeter(schema.PageMarginLeft - _tableLeftBias);
6158

6259
Unit width, height;
6360
PageSetup.GetPageSize(document.DefaultPageSetup.PageFormat, out width, out height);
@@ -68,9 +65,9 @@ static Document _createDocument<T>(IEnumerable<T> items, ArrayToPdfScheme<T> sch
6865

6966
_addStyles(document, innerWidth);
7067
_addSection(document);
71-
_addHeader(document, innerWidth, scheme);
72-
_addFooter(document, innerWidth, scheme);
73-
_addTable(document, innerWidth, items, scheme);
68+
_addHeader(document, innerWidth, schema);
69+
_addFooter(document, innerWidth, schema);
70+
_addTable(document, innerWidth, schema);
7471

7572
return document;
7673
}
@@ -90,41 +87,41 @@ static void _addSection(Document document)
9087
section.PageSetup = document.DefaultPageSetup.Clone();
9188
}
9289

93-
static void _addHeader<T>(Document document, Unit innerWidth, ArrayToPdfScheme<T> scheme)
90+
static void _addHeader(Document document, Unit innerWidth, Schema schema)
9491
{
95-
if (string.IsNullOrWhiteSpace(scheme.Header))
92+
if (string.IsNullOrWhiteSpace(schema.Header))
9693
return;
9794

9895
var header = document.LastSection.Headers.Primary;
9996
var paragraph = header.AddParagraph();
10097
paragraph.Format.LeftIndent = Unit.FromMillimeter(_tableLeftBias);
101-
paragraph.Format.Alignment = (ParagraphAlignment)scheme.HeaderAlignment;
102-
paragraph.Format.Font.Size = scheme.HeaderFontSize;
103-
paragraph.Format.Font.Bold = scheme.HeaderFontBold;
104-
_addTmpText(paragraph, scheme.Header, scheme);
98+
paragraph.Format.Alignment = (ParagraphAlignment)schema.HeaderAlignment;
99+
paragraph.Format.Font.Size = schema.HeaderFontSize;
100+
paragraph.Format.Font.Bold = schema.HeaderFontBold;
101+
_addTmpText(paragraph, schema.Header, schema);
105102
}
106103

107-
static void _addFooter<T>(Document document, Unit innerWidth, ArrayToPdfScheme<T> scheme)
104+
static void _addFooter(Document document, Unit innerWidth, Schema schema)
108105
{
109-
if (string.IsNullOrWhiteSpace(scheme.Footer))
106+
if (string.IsNullOrWhiteSpace(schema.Footer))
110107
return;
111108

112109
var footer = document.LastSection.Footers.Primary;
113110
var paragraph = footer.AddParagraph();
114111
paragraph.Format.LeftIndent = Unit.FromMillimeter(_tableLeftBias);
115-
paragraph.Format.Alignment = (ParagraphAlignment)scheme.FooterAlignment;
116-
paragraph.Format.Font.Size = scheme.FooterFontSize;
117-
paragraph.Format.Font.Bold = scheme.FooterFontBold;
118-
_addTmpText(paragraph, scheme.Footer, scheme);
112+
paragraph.Format.Alignment = (ParagraphAlignment)schema.FooterAlignment;
113+
paragraph.Format.Font.Size = schema.FooterFontSize;
114+
paragraph.Format.Font.Bold = schema.FooterFontBold;
115+
_addTmpText(paragraph, schema.Footer, schema);
119116
}
120117

121-
static void _addTmpText<T>(Paragraph paragraph, string template, ArrayToPdfScheme<T> scheme)
118+
static void _addTmpText(Paragraph paragraph, string? template, Schema schema)
122119
{
123120
foreach (var part in template.Split(new[] { '{', '}' }, StringSplitOptions.RemoveEmptyEntries))
124121
switch (part)
125122
{
126123
case "TITLE":
127-
paragraph.AddText(scheme.Title ?? string.Empty);
124+
paragraph.AddText(schema.Title ?? string.Empty);
128125
break;
129126
case "PAGE":
130127
paragraph.AddPageField();
@@ -138,23 +135,23 @@ static void _addTmpText<T>(Paragraph paragraph, string template, ArrayToPdfSchem
138135
}
139136
}
140137

141-
static void _addTable<T>(Document document, Unit innerWidth, IEnumerable<T> items, ArrayToPdfScheme<T> scheme)
138+
static void _addTable(Document document, Unit innerWidth, Schema schema)
142139
{
143-
if (scheme.Columns.Count == 0)
140+
if (schema.Columns.Count == 0)
144141
return;
145142

146143
var table = new Table();
147-
table.Format.Font.Size = Unit.FromPoint(scheme.TableFontSize);
144+
table.Format.Font.Size = Unit.FromPoint(schema.TableFontSize);
148145
table.Borders.Width = 0.5;
149146

150147

151-
var colWidth = Unit.FromPoint(innerWidth / scheme.Columns.Count);
152-
var settedWidth = scheme.Columns.Sum(x => x.Width ?? 0);
153-
var autoWidthCount = scheme.Columns.Count(x => !x.Width.HasValue);
148+
var colWidth = Unit.FromPoint(innerWidth / schema.Columns.Count);
149+
var settedWidth = schema.Columns.Sum(x => x.Width ?? 0);
150+
var autoWidthCount = schema.Columns.Count(x => !x.Width.HasValue);
154151
var autoWidth = (innerWidth.Millimeter - settedWidth) / (autoWidthCount > 0 ? autoWidthCount : 1);
155152

156153
// create columns
157-
scheme.Columns.ForEach(x => table.AddColumn(Unit.FromMillimeter(x.Width ?? autoWidth)).Format.Alignment = (ParagraphAlignment)(x.Alignment ?? scheme.TableAlignment));
154+
schema.Columns.ForEach(x => table.AddColumn(Unit.FromMillimeter(x.Width ?? autoWidth)).Format.Alignment = (ParagraphAlignment)(x.Alignment ?? schema.TableAlignment));
158155

159156
// add header
160157
var row = table.AddRow();
@@ -164,21 +161,23 @@ static void _addTable<T>(Document document, Unit innerWidth, IEnumerable<T> item
164161
row.Format.Font.Bold = true;
165162
row.Shading.Color = Colors.LightGray;
166163
row.VerticalAlignment = VerticalAlignment.Center;
167-
scheme.Columns.ForEach(x => row.Cells[x.Index].AddParagraph(x.Name ?? string.Empty));
164+
165+
var colIndex = 0;
166+
schema.Columns.ForEach(x => row.Cells[colIndex++].AddParagraph(x.Name ?? string.Empty));
168167

169168
// add rows
170-
//var itemsCount = 0;
171-
foreach (var item in items)
169+
foreach (var item in schema.Items)
172170
{
173-
//itemsCount++;
174171
row = table.AddRow();
175172
row.TopPadding = 1;
176173
row.BottomPadding = 1;
177174
row.VerticalAlignment = VerticalAlignment.Center;
178-
foreach (var col in scheme.Columns)
175+
176+
colIndex = 0;
177+
foreach (var col in schema.Columns)
179178
{
180-
var value = col.ValueFn(item);
181-
var cell = row.Cells[col.Index];
179+
var value = col.Value?.Invoke(item);
180+
var cell = row.Cells[colIndex++];
182181
cell.AddParagraph(value?.ToString() ?? string.Empty);
183182
}
184183
}

ArrayToPdf/ArrayToPdf.csproj

+12-12
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
5-
<AssemblyName>RandomSolutions.ArrayToPdf</AssemblyName>
6-
<RootNamespace>RandomSolutions</RootNamespace>
7-
<SignAssembly>true</SignAssembly>
8-
<AssemblyOriginatorKeyFile>key.pfx</AssemblyOriginatorKeyFile>
9-
10-
<AssemblyVersion>1.0.1</AssemblyVersion>
11-
<FileVersion>1.0.1</FileVersion>
12-
<Version>1.0.1</Version>
13-
<Company></Company>
4+
<TargetFrameworks>net45;netstandard2.0</TargetFrameworks>
5+
<LangVersion>latest</LangVersion>
6+
<Nullable>enable</Nullable>
7+
<SignAssembly>True</SignAssembly>
8+
<AssemblyOriginatorKeyFile>..\ArrayToPdf.snk</AssemblyOriginatorKeyFile>
9+
<AssemblyVersion>2.0.0</AssemblyVersion>
10+
<FileVersion>2.0.0</FileVersion>
11+
<Version>2.0.0</Version>
12+
<Company></Company>
1413
<Authors>Leonid Salavatov</Authors>
15-
<Copyright>Leonid Salavatov 2020</Copyright>
14+
<Copyright>Leonid Salavatov 2021</Copyright>
1615
<PackageId>ArrayToPdf</PackageId>
1716
<Product>ArrayToPdf</Product>
1817
<Title>ArrayToPdf</Title>
1918
<Description>Create PDF from Array</Description>
20-
<PackageTags>array pdf array2pdf arraytopdf convert map mapping c# csharp</PackageTags>
19+
<PackageTags>array pdf array2pdf arraytopdf convert map mapping dotnet</PackageTags>
2120
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
2221
<PackageProjectUrl>https://github.com/mustaddon/ArrayToPdf</PackageProjectUrl>
2322
<RepositoryUrl>https://github.com/mustaddon/ArrayToPdf</RepositoryUrl>
2423
<RepositoryType>git</RepositoryType>
2524
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
25+
<PackageLicenseExpression>MIT</PackageLicenseExpression>
2626
<NeutralLanguage />
2727
<PackageReleaseNotes></PackageReleaseNotes>
2828
</PropertyGroup>

ArrayToPdf/ArrayToPdfScheme.cs

-96
This file was deleted.

0 commit comments

Comments
 (0)