10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/Assets/Moder DOS 437.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tossnet/Blazor-PDF/4a97bff1990c600d7e79e9236948d0b99d8f245e/Blazor-PDF/Blazor-PDF/Assets/Moder DOS 437.ttf
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/Blazor-PDF.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net6.0
5 | Blazor_PDF
6 | enable
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/Helpers/Extensions.cs:
--------------------------------------------------------------------------------
1 | namespace Blazor_PDF
2 | {
3 | public static class Extensions
4 | {
5 | public static float ToDpi(this float centimeter)
6 | {
7 | var inch = centimeter / 2.54;
8 | return (float)(inch * 72);
9 | }
10 | }
11 | }
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/PDF/PDFHeaderFooter.cs:
--------------------------------------------------------------------------------
1 | using iTextSharp.text;
2 | using iTextSharp.text.pdf;
3 |
4 | namespace Blazor_PDF.PDF
5 | {
6 | public class PDFHeaderFooter : PdfPageEventHelper
7 | {
8 | // write on top of document
9 | public override void OnOpenDocument(PdfWriter writer, Document document)
10 | {
11 | base.OnOpenDocument(writer, document);
12 |
13 | PdfPTable header = new PdfPTable(1)
14 | {
15 | SpacingAfter = 30F,
16 | TotalWidth = PageSize.A4.Width - document.LeftMargin -document.RightMargin,
17 | LockedWidth = true
18 | };
19 |
20 | var fontStyle = FontFactory.GetFont("Arial", 16, BaseColor.White);
21 |
22 | var labelHeader = new Chunk("Header Blazor PDF", fontStyle);
23 |
24 | PdfPCell cell = new PdfPCell(new Phrase(labelHeader))
25 | {
26 | BackgroundColor = new BaseColor(133, 76, 199),
27 | Border = 0,
28 | HorizontalAlignment = Element.ALIGN_CENTER,
29 | VerticalAlignment = Element.ALIGN_TOP
30 | };
31 |
32 | header.AddCell(cell);
33 |
34 | header.WriteSelectedRows(0, -1, document.LeftMargin, document.Top, writer.DirectContent);
35 |
36 | //var f = FontFactory.GetFont("Arial", 16, BaseColor.Green);
37 | //Paragraph p = new Paragraph("ESZRFGZSEFGZEF", f);
38 | //document.Add(p);
39 | }
40 |
41 | // write on start of each page
42 | public override void OnStartPage(PdfWriter writer, Document document)
43 | {
44 | base.OnStartPage(writer, document);
45 | }
46 |
47 | // write on end of each page
48 | public override void OnEndPage(PdfWriter writer, Document document)
49 | {
50 | base.OnEndPage(writer, document);
51 | PdfPTable tabFot = new PdfPTable(new float[] { 1F });
52 | PdfPCell cell;
53 | tabFot.TotalWidth = 300F;
54 | cell = new PdfPCell(new Phrase("Footer"));
55 | tabFot.AddCell(cell);
56 | tabFot.WriteSelectedRows(0, -1, 150, document.Bottom, writer.DirectContent);
57 | }
58 |
59 | //write on close of document
60 | public override void OnCloseDocument(PdfWriter writer, Document document)
61 | {
62 | base.OnCloseDocument(writer, document);
63 | }
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/PDF/page1.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using iTextSharp.text;
3 | using iTextSharp.text.pdf;
4 |
5 | namespace Blazor_PDF.PDF
6 | {
7 | public class Page1
8 | {
9 | private readonly static string _lopsem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas dictum felis ut turpis viverra, a ultrices nisi tempor. Aliquam suscipit dui sit amet facilisis aliquam. In scelerisque sem ut elit molestie tempor. In finibus sagittis nulla, vitae vestibulum ante tristique sit amet. Phasellus facilisis rhoncus nunc id scelerisque. Praesent cursus erat nec turpis interdum condimentum. Aenean ut facilisis eros. Nam semper tincidunt libero in porttitor. Praesent nec dui vitae leo vulputate varius ut non risus. Quisque imperdiet euismod ipsum facilisis finibus. Duis ac felis eget leo malesuada gravida id at felis. Cras posuere, tortor sit amet bibendum tincidunt, augue lectus pulvinar nisl, ac blandit velit arcu sed nulla. Mauris id venenatis turpis, ut fringilla nunc. Aenean commodo fermentum nulla, non porta sapien viverra sed. Sed sed risus interdum, maximus sapien ac, bibendum diam.";
10 |
11 | public static void PageText(Document pdf)
12 | {
13 | var title = new Paragraph("Text and Paragraphe", new Font(Font.HELVETICA, 20, Font.BOLD));
14 | title.SpacingAfter = 18f;
15 |
16 | pdf.Add(title);
17 |
18 | Font _fontStyle = FontFactory.GetFont("Tahoma", 8f, Font.ITALIC);
19 |
20 | var phrase = new Phrase(_lopsem, _fontStyle);
21 | pdf.Add(phrase);
22 |
23 | // Create and add a Paragraph
24 | var p = new Paragraph("Paragraph On the Right", _fontStyle);
25 | p.SpacingBefore = 20f;
26 | p.SetAlignment("RIGHT");
27 |
28 | pdf.Add(p);
29 |
30 |
31 | float margeborder = 1.5f;
32 | float widhtColumn = 8.5f;
33 | float space = 1.0f;
34 |
35 | MultiColumnText columns = new MultiColumnText();
36 | columns.AddSimpleColumn(margeborder.ToDpi(),
37 | pdf.PageSize.Width - margeborder.ToDpi() - space.ToDpi() - widhtColumn.ToDpi());
38 | columns.AddSimpleColumn(margeborder.ToDpi() + widhtColumn.ToDpi() + space.ToDpi(),
39 | pdf.PageSize.Width - margeborder.ToDpi());
40 |
41 | Paragraph para = new Paragraph(_lopsem, new Font(Font.HELVETICA, 8f));
42 | para.SpacingAfter = 9f;
43 | para.Alignment = Element.ALIGN_JUSTIFIED;
44 |
45 | columns.AddElement(para);
46 |
47 | pdf.Add(columns);
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/PDF/page2.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using iTextSharp.text;
3 | using iTextSharp.text.pdf;
4 |
5 | namespace Blazor_PDF.PDF
6 | {
7 | public class Page2
8 | {
9 | private readonly static string _lopsem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas dictum felis ut turpis viverra, a ultrices nisi tempor. Aliquam suscipit dui sit amet facilisis aliquam. In scelerisque sem ut elit molestie tempor. In finibus sagittis nulla, vitae vestibulum ante tristique sit amet. Phasellus facilisis rhoncus nunc id scelerisque. Praesent cursus erat nec turpis interdum condimentum. Aenean ut facilisis eros. Nam semper tincidunt libero in porttitor. Praesent nec dui vitae leo vulputate varius ut non risus. Quisque imperdiet euismod ipsum facilisis finibus. Duis ac felis eget leo malesuada gravida id at felis. Cras posuere, tortor sit amet bibendum tincidunt, augue lectus pulvinar nisl, ac blandit velit arcu sed nulla. Mauris id venenatis turpis, ut fringilla nunc. Aenean commodo fermentum nulla, non porta sapien viverra sed. Sed sed risus interdum, maximus sapien ac, bibendum diam.";
10 |
11 | public static void PageBookmark(Document pdf)
12 | {
13 | float indentation = 20;
14 | Font _fontStyle = FontFactory.GetFont("Tahoma", 8f, Font.ITALIC);
15 | Font _linkStyle = FontFactory.GetFont("Tahoma", 8f, Font.UNDERLINE, BaseColor.Blue);
16 |
17 | Chapter chapter1 = new Chapter(new Paragraph("Bookmarks and Links"), 1)
18 | {
19 | BookmarkTitle = "Text & co",
20 | BookmarkOpen = true
21 | };
22 | chapter1.AddSection(indentation, "Section 1.1", 2);
23 |
24 | pdf.Add(chapter1);
25 |
26 |
27 | // Add a link to anchor
28 | var click = new Anchor("Click to an anchor-target in this document", _linkStyle)
29 | {
30 | Reference = "#target"
31 | };
32 | var paragraph1 = new Paragraph();
33 | paragraph1.IndentationLeft = indentation;
34 | paragraph1.Add(click);
35 |
36 | pdf.Add(paragraph1);
37 |
38 |
39 | // Add Paragraph
40 | var paragraph = new Paragraph(_lopsem, _fontStyle)
41 | {
42 | SpacingBefore = 10f,
43 | SpacingAfter = 10f,
44 | IndentationLeft = indentation,
45 | Alignment = Element.ALIGN_JUSTIFIED
46 | };
47 |
48 | pdf.Add(paragraph);
49 |
50 |
51 | // Add simple Link
52 | Anchor link = new Anchor("www.sodeasoft.com", _linkStyle)
53 | {
54 | Reference = "https://www.sodeasoft.com"
55 | };
56 | var paragraph3 = new Paragraph("Web link : ", _fontStyle)
57 | {
58 | IndentationLeft = indentation
59 | };
60 | paragraph3.Add(link);
61 |
62 | pdf.Add(paragraph3);
63 |
64 |
65 | // To add paragraph and add at the end the link:
66 | // paragraph.Add(link);
67 |
68 | Section section2 = chapter1.AddSection(indentation, "Section 1.2", 2);
69 | {
70 | section2.TriggerNewPage = false;
71 |
72 | Section subsection1 = section2.AddSection(indentation, "Subsection 1.2.1", 3);
73 | Section subsection2 = section2.AddSection(20f, "Subsection 1.2.2", 3);
74 | subsection2.AddSection(indentation, "Sub Subsection 1.2.2.1", 4);
75 |
76 | }
77 |
78 | pdf.Add(section2);
79 |
80 |
81 | Chapter chapter2 = new Chapter(new Paragraph("This is Chapter 2"), 2)
82 | {
83 | BookmarkOpen = false,
84 | TriggerNewPage = true
85 | };
86 |
87 | Section section3 = chapter2.AddSection("Section 2.1", 3);
88 | section3.AddSection("Subsection 2.1.1", 4);
89 | chapter2.AddSection("Section 2.2", 3);
90 |
91 |
92 | pdf.Add(chapter2);
93 |
94 | // Add the target from the Anchor above
95 | Anchor target = new Anchor("This is the Target");
96 | target.Name = "target";
97 | Paragraph paragraph2 = new Paragraph
98 | {
99 | target
100 | };
101 | pdf.Add(paragraph2);
102 | }
103 |
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/PDF/page3.cs:
--------------------------------------------------------------------------------
1 | using System.IO;
2 | using iTextSharp.text;
3 | using iTextSharp.text.pdf;
4 |
5 | namespace Blazor_PDF.PDF
6 | {
7 | public class Page3
8 | {
9 |
10 | public static void PageImage(Document pdf, PdfWriter writer)
11 | {
12 |
13 | string image = $"{Directory.GetCurrentDirectory()}{@"\wwwroot\images\Logo.png"}";
14 | Image img = Image.GetInstance(image);
15 |
16 | img.SetAbsolutePosition(
17 | (PageSize.A4.Width - img.ScaledWidth) / 2,
18 | (PageSize.A4.Height - img.ScaledHeight) / 2);
19 |
20 | pdf.Add(img);
21 |
22 |
23 | //PdfContentByte cb = writer.DirectContent;
24 | //cb.SetLineWidth(3f);
25 | //cb.MoveTo(50, 20);
26 | //cb.LineTo(20, 80);
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/PDF/page4.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using iTextSharp.text;
3 | using iTextSharp.text.pdf;
4 |
5 | namespace Blazor_PDF.PDF
6 | {
7 | public class Page4
8 | {
9 | public static void PageTable(Document pdf, PdfWriter writer)
10 | {
11 |
12 | // TABLES
13 | var title = new Paragraph("My First Table", new Font(Font.HELVETICA, 20, Font.BOLD));
14 | pdf.Add(title);
15 |
16 |
17 | Table datatable = new Table(3);
18 | datatable.Padding = 2;
19 | datatable.Spacing = 0;
20 |
21 | float[] headerwidths = { 6, 20, 32 };
22 |
23 | datatable.Widths = headerwidths;
24 | datatable.DefaultHorizontalAlignment = Element.ALIGN_LEFT;
25 |
26 | int m = 0;
27 | for (int i = 0; i < 12; i++)
28 | {
29 | m += i;
30 | datatable.AddCell(i.ToString());
31 | datatable.AddCell("Blazor is super simple.");
32 | datatable.AddCell("right?");
33 | }
34 |
35 |
36 | datatable.AddCell("=" + m.ToString());
37 | datatable.AddCell("Yes");
38 | datatable.AddCell("Strongly agree");
39 |
40 | pdf.Add(datatable);
41 |
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/PDF/page5.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Linq;
3 | using iTextSharp.text;
4 | using iTextSharp.text.pdf;
5 |
6 |
7 | namespace Blazor_PDF.PDF
8 | {
9 | public class Page5
10 | {
11 | public static void PageFonts(Document pdf, PdfWriter writer)
12 | {
13 |
14 | // FONTS
15 | var title = new Paragraph("Fonts standard", new Font(Font.HELVETICA, 20, Font.BOLD));
16 | pdf.Add(title);
17 |
18 |
19 | // --- TIMES ROMAN
20 | title = new Paragraph("Times Roman")
21 | {
22 | SpacingBefore = 18f,
23 | SpacingAfter = 9f
24 | };
25 | pdf.Add(title);
26 |
27 |
28 | BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, encoding:BaseFont.CP1252, embedded:false);
29 | Pattern(pdf, bfTimes);
30 |
31 |
32 | // --- COURIER
33 | title = new Paragraph("Courier")
34 | {
35 | SpacingBefore = 18f,
36 | SpacingAfter = 9f
37 | };
38 | pdf.Add(title);
39 |
40 | BaseFont bfCourier= BaseFont.CreateFont(BaseFont.COURIER, encoding: BaseFont.CP1252, embedded: false);
41 | Pattern(pdf, bfCourier);
42 |
43 |
44 | // --- HELVETICA
45 | title = new Paragraph("Helvetica")
46 | {
47 | SpacingBefore = 18f,
48 | SpacingAfter = 9f
49 | };
50 | pdf.Add(title);
51 |
52 | BaseFont bfHelvetica = BaseFont.CreateFont(BaseFont.HELVETICA, encoding: BaseFont.CP1252, embedded: false);
53 | Pattern(pdf, bfHelvetica);
54 |
55 |
56 | // --- SYMBOL
57 | title = new Paragraph("Symbol")
58 | {
59 | SpacingBefore = 18f,
60 | SpacingAfter = 9f
61 | };
62 | pdf.Add(title);
63 |
64 | BaseFont bSymbol = BaseFont.CreateFont(BaseFont.SYMBOL, encoding: BaseFont.CP1252, embedded: false);
65 | Pattern(pdf, bSymbol);
66 |
67 |
68 | // --- ZAPDINGBATS
69 | title = new Paragraph("ZapfDingBats®")
70 | {
71 | SpacingBefore = 18f,
72 | SpacingAfter = 9f
73 | };
74 | pdf.Add(title);
75 |
76 | BaseFont bZapfDingBats = BaseFont.CreateFont(BaseFont.ZAPFDINGBATS, encoding: BaseFont.CP1252, embedded: false);
77 | Pattern(pdf, bZapfDingBats);
78 |
79 |
80 | // BREAK RETURN : so easy ^^
81 | pdf.NewPage();
82 |
83 |
84 | // FONTS EMBEDDED INTO THE PDF
85 | title = new Paragraph("Font embedded", new Font(Font.HELVETICA, 20, Font.BOLD));
86 | pdf.Add(title);
87 |
88 | BaseFont myfont = BaseFont.CreateFont(@"Assets/Moder DOS 437.ttf", BaseFont.CP1252, BaseFont.EMBEDDED);
89 | Font font = new Font(myfont, 14);
90 |
91 | string s = "Add your own font in your document as here the Moder DOS";
92 |
93 | pdf.Add(new Paragraph(s, font));
94 |
95 |
96 | Table datatable = new Table(16);
97 | datatable.Padding = 2;
98 | datatable.Spacing = 0;
99 | datatable.Border = 0;
100 | float[] headerwidths = Enumerable.Range(0, 16).Select(i => 1.6f).ToArray();
101 | datatable.Widths = headerwidths;
102 | datatable.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
103 |
104 | int m = 9;
105 | string charater;
106 |
107 | for (int r = 0; r < 16; r++)
108 | {
109 | for (int c = 0; c < 16; c++)
110 | {
111 | if (m > 31)
112 | {
113 | charater = Convert.ToChar(m).ToString();
114 | datatable.AddCell(new Paragraph(charater, font));
115 | }
116 | m++;
117 | }
118 | }
119 | pdf.Add(datatable);
120 |
121 | }
122 |
123 |
124 |
125 | private static void Pattern(Document pdf, BaseFont basefont)
126 | {
127 | string text = "0123456789 ABDCEFGHIJKLMNOPQRSTXYWZ abcdefghijklmnopqrstuvwxyz @&*$€";
128 | float fontSize = 12;
129 |
130 | Font font = new Font(basefont, fontSize, Font.NORMAL, BaseColor.Black);
131 | var paragraph = new Paragraph(text, font);
132 | pdf.Add(paragraph);
133 |
134 |
135 | if (basefont.PostscriptFontName == BaseFont.SYMBOL) return;
136 | if (basefont.PostscriptFontName == BaseFont.ZAPFDINGBATS) return;
137 |
138 |
139 | font = new Font(basefont, fontSize, Font.BOLD, BaseColor.Black);
140 | paragraph = new Paragraph(text, font);
141 | pdf.Add(paragraph);
142 |
143 | font = new Font(basefont, fontSize, Font.ITALIC, BaseColor.Black);
144 | paragraph = new Paragraph(text, font);
145 | pdf.Add(paragraph);
146 |
147 | font = new Font(basefont, fontSize, Font.UNDERLINE, BaseColor.Black);
148 | paragraph = new Paragraph(text, font);
149 | pdf.Add(paragraph);
150 |
151 | font = new Font(basefont, fontSize, Font.BOLD + Font.ITALIC, BaseColor.Black);
152 | paragraph = new Paragraph(text, font);
153 | pdf.Add(paragraph);
154 |
155 | font = new Font(basefont, fontSize, Font.STRIKETHRU, BaseColor.Black);
156 | paragraph = new Paragraph(text, font);
157 | pdf.Add(paragraph);
158 | }
159 | }
160 | }
161 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/PDF/page6.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using iTextSharp.text;
3 | using iTextSharp.text.pdf;
4 |
5 | namespace Blazor_PDF.PDF
6 | {
7 | public class Page6
8 | {
9 |
10 | public static void PageList(Document pdf)
11 | {
12 | var list1 = new iTextSharp.text.List();
13 | list1.IndentationLeft = 12;
14 | list1.SetListSymbol("\u2022"); //Unicode Character 'BULLET'
15 | list1.Numbered = true;
16 | list1.Add(new ListItem("Value 1"));
17 | list1.Add(new ListItem("Value 2"));
18 | list1.Add(new ListItem("Value 3"));
19 | pdf.Add(list1);
20 |
21 | pdf.Add(new Chunk("\n")); //Tip to add Break Line
22 |
23 | list1 = new iTextSharp.text.List();
24 | list1.IndentationLeft = 20;
25 | list1.SetListSymbol("\u2022"); //Unicode Character 'BULLET'
26 | list1.Numbered = false;
27 | list1.Add(new ListItem("Value 1"));
28 | list1.Add(new ListItem("Value 2"));
29 | list1.Add(new ListItem("Value 3"));
30 | pdf.Add(list1);
31 |
32 | pdf.Add(new Chunk("\n")); //Tip to add Break Line
33 |
34 |
35 | Font _font = FontFactory.GetFont(BaseFont.ZAPFDINGBATS, 8f, Font.BOLD, BaseColor.Magenta);
36 |
37 | list1 = new iTextSharp.text.List();
38 | //list1.IndentationLeft = 18;
39 | list1.ListSymbol = new Chunk("H ", _font);
40 | list1.Numbered = false;
41 | list1.Add(new ListItem("Value 1"));
42 | list1.Add(new ListItem("Value 2"));
43 | list1.Add(new ListItem("Value 3"));
44 | pdf.Add(list1);
45 | }
46 |
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/PDF/page7.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Runtime.CompilerServices;
3 | using iTextSharp.text;
4 | using iTextSharp.text.pdf;
5 |
6 | namespace Blazor_PDF.PDF
7 | {
8 | public class page7
9 | {
10 | public static void PageShapes(Document pdf, PdfWriter writer)
11 | {
12 |
13 | PdfContentByte cb = writer.DirectContent;
14 |
15 |
16 | // LINES
17 | var title = new Paragraph("Lines", new Font(Font.HELVETICA, 20, Font.BOLD + Font.UNDERLINE));
18 | pdf.Add(title);
19 |
20 |
21 | cb.SetLineWidth(5);
22 | cb.SetColorStroke(new BaseColor(0, 140, 180));
23 |
24 | cb.MoveTo(40f, InverseY(120f));
25 | cb.LineTo(200f, InverseY(120f));
26 | cb.Stroke();
27 |
28 | cb.SetColorStroke(new BaseColor(10, 180, 80));
29 | cb.SetLineDash(20f,10f);
30 | cb.MoveTo(40f, InverseY(140f));
31 | cb.LineTo(200f, InverseY(140f));
32 |
33 | cb.Stroke();
34 |
35 | // Reset
36 | cb.SetLineWidth(1);
37 | cb.SetLineDash(0);
38 | cb.SetColorStroke(new BaseColor(0, 0, 0));
39 |
40 | // SHAPES
41 | ColumnText ct = new ColumnText(cb);
42 | Phrase ctitle = new Phrase("Shapes", new Font(Font.HELVETICA, 20, Font.BOLD + Font.UNDERLINE));
43 | ct.SetSimpleColumn(ctitle, 40f, 0, 580, InverseY(170f), 15, Element.ALIGN_LEFT);
44 | //lower-left-x
45 | //lower-left-y
46 | //upper-right-x(llx + width)
47 | //upper-right-y(lly + height)
48 | //leading(The amount of blank space between lines of print)
49 | ct.Go();
50 |
51 | //title = new Paragraph("Shapes", new Font(Font.HELVETICA, 20, Font.BOLD + Font.UNDERLINE));
52 | //pdf.Add(title);
53 |
54 |
55 | cb.Rectangle(40f, InverseY(200f), 120f, -50f);
56 | cb.Stroke();
57 |
58 | cb.SetColorStroke(BaseColor.Red);
59 | cb.Circle(200f, InverseY(230f), 30f);
60 | cb.Stroke();
61 |
62 | cb.SaveState();
63 | {
64 | PdfGState gs = new PdfGState();
65 | gs.FillOpacity = 0.5f;
66 | cb.SetGState(gs);
67 | cb.SetColorFill(BaseColor.Green);
68 | cb.Circle(220f, InverseY(240f), 30f);
69 | cb.Fill();
70 | }
71 | cb.RestoreState();
72 |
73 | cb.SetColorStroke(BaseColor.Blue);
74 | cb.Arc(300f, InverseY(220f), 360f, InverseY(280f), 45, 270);
75 | cb.Stroke();
76 | //
77 |
78 | }
79 |
80 |
81 |
82 | private static float InverseY(float Y)
83 | {
84 | // PDF uses a coordinate system which starts in the left corner at the BOTTOM of the page, not at the Top
85 | return PageSize.A4.Height - Y;
86 | }
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/PDF/report.cs:
--------------------------------------------------------------------------------
1 | using iTextSharp.text;
2 | using iTextSharp.text.pdf;
3 | using Microsoft.JSInterop;
4 |
5 | namespace Blazor_PDF.PDF;
6 |
7 | public class Report
8 | {
9 |
10 | private int _pagenumber;
11 |
12 | public void Generate(IJSRuntime js, int pagenumber, string filename = "report.pdf")
13 | {
14 | _pagenumber = pagenumber;
15 |
16 | js.InvokeVoidAsync("jsDownloadFile",
17 | filename,
18 | ReportPDF()
19 | );
20 | }
21 |
22 | public void OpenToIframe(IJSRuntime js, int pagenumber, string idiFrame)
23 | {
24 | _pagenumber = pagenumber;
25 |
26 | js.InvokeVoidAsync( "jsOpenToIframe",
27 | idiFrame,
28 | Convert.ToBase64String(ReportPDF())
29 | );
30 | }
31 | public void OpenNewTab(IJSRuntime js, int pagenumber, string filename = "report.pdf")
32 | {
33 | _pagenumber = pagenumber;
34 |
35 | js.InvokeVoidAsync( "jsOpenIntoNewTab",
36 | filename,
37 | Convert.ToBase64String(ReportPDF())
38 | );
39 | }
40 |
41 |
42 | private byte[] ReportPDF()
43 | {
44 | var memoryStream = new MemoryStream();
45 |
46 | // Marge in centimeter, then I convert with .ToDpi()
47 | float margeLeft = 1.5f;
48 | float margeRight= 1.5f;
49 | float margeTop = 1.0f;
50 | float margeBottom = 1.0f;
51 |
52 | Document pdf = new Document(
53 | PageSize.A4,
54 | margeLeft.ToDpi(),
55 | margeRight.ToDpi(),
56 | margeTop.ToDpi(),
57 | margeBottom.ToDpi()
58 | );
59 |
60 | pdf.AddTitle("Blazor-PDF");
61 | pdf.AddAuthor( "Christophe Peugnet");
62 | pdf.AddCreationDate();
63 | pdf.AddKeywords("blazor");
64 | pdf.AddSubject("Create a pdf file with iText");
65 |
66 | PdfWriter writer = PdfWriter.GetInstance(pdf, memoryStream);
67 |
68 | //HEADER and FOOTER
69 | var fontStyle = FontFactory.GetFont("Arial", 16, BaseColor.White);
70 | var labelHeader = new Chunk("Header Blazor PDF", fontStyle);
71 | HeaderFooter header = new HeaderFooter(new Phrase(labelHeader), false)
72 | {
73 | BackgroundColor = new BaseColor(133, 76, 199),
74 | Alignment = Element.ALIGN_CENTER,
75 | Border = Rectangle.NO_BORDER
76 | };
77 | //header.Border = Rectangle.NO_BORDER;
78 | pdf.Header = header;
79 |
80 |
81 | var labelFooter = new Chunk("Page", fontStyle);
82 | HeaderFooter footer = new HeaderFooter(new Phrase(labelFooter), true)
83 | {
84 | Border = Rectangle.NO_BORDER,
85 | Alignment = Element.ALIGN_RIGHT
86 | };
87 | pdf.Footer = footer;
88 |
89 | pdf.Open();
90 |
91 |
92 | if ( _pagenumber == 1 )
93 | Page1.PageText(pdf);
94 | else if ( _pagenumber == 2 )
95 | Page2.PageBookmark(pdf);
96 | else if ( _pagenumber == 3 )
97 | Page3.PageImage(pdf, writer);
98 | else if (_pagenumber == 4)
99 | Page4.PageTable(pdf, writer);
100 | else if (_pagenumber == 5)
101 | Page5.PageFonts(pdf, writer);
102 | else if (_pagenumber == 6)
103 | Page6.PageList(pdf);
104 | else if (_pagenumber == 7)
105 | page7.PageShapes(pdf, writer);
106 |
107 | pdf.Close();
108 |
109 | return memoryStream.ToArray();
110 | }
111 |
112 |
113 |
114 | }
115 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/Pages/Error.razor:
--------------------------------------------------------------------------------
1 | @page "/error"
2 |
3 |
4 |
Error.
5 |
An error occurred while processing your request.
6 |
7 |
Development Mode
8 |
9 | Swapping to Development environment will display more detailed information about the error that occurred.
10 |
11 |
12 | The Development environment shouldn't be enabled for deployed applications.
13 | It can result in displaying sensitive information from exceptions to end users.
14 | For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development
15 | and restarting the app.
16 |
24 |
25 | An error has occurred. This application may no longer respond until reloaded.
26 |
27 |
28 | An unhandled exception has occurred. See browser dev tools for details.
29 |
30 | Reload
31 | 🗙
32 |
17 |
18 | @code {
19 | private bool collapseNavMenu = true;
20 |
21 | private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;
22 |
23 | private void ToggleNavMenu()
24 | {
25 | collapseNavMenu = !collapseNavMenu;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/Shared/NavMenu.razor.css:
--------------------------------------------------------------------------------
1 | .navbar-toggler {
2 | background-color: rgba(255, 255, 255, 0.1);
3 | }
4 |
5 | .top-row {
6 | height: 3.5rem;
7 | background-color: rgba(0,0,0,0.4);
8 | }
9 |
10 | .navbar-brand {
11 | font-size: 1.1rem;
12 | }
13 |
14 | .oi {
15 | width: 2rem;
16 | font-size: 1.1rem;
17 | vertical-align: text-top;
18 | top: -2px;
19 | }
20 |
21 | .nav-item {
22 | font-size: 0.9rem;
23 | padding-bottom: 0.5rem;
24 | }
25 |
26 | .nav-item:first-of-type {
27 | padding-top: 1rem;
28 | }
29 |
30 | .nav-item:last-of-type {
31 | padding-bottom: 1rem;
32 | }
33 |
34 | .nav-item ::deep a {
35 | color: #d7d7d7;
36 | border-radius: 4px;
37 | height: 3rem;
38 | display: flex;
39 | align-items: center;
40 | line-height: 3rem;
41 | }
42 |
43 | .nav-item ::deep a.active {
44 | background-color: rgba(255,255,255,0.25);
45 | color: white;
46 | }
47 |
48 | .nav-item ::deep a:hover {
49 | background-color: rgba(255,255,255,0.1);
50 | color: white;
51 | }
52 |
53 | @media (min-width: 641px) {
54 | .navbar-toggler {
55 | display: none;
56 | }
57 |
58 | .collapse {
59 | /* Never collapse the sidebar for wide screens */
60 | display: block;
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/_Imports.razor:
--------------------------------------------------------------------------------
1 | @using System.Net.Http
2 | @using Microsoft.AspNetCore.Authorization
3 | @using Microsoft.AspNetCore.Components.Authorization
4 | @using Microsoft.AspNetCore.Components.Forms
5 | @using Microsoft.AspNetCore.Components.Routing
6 | @using Microsoft.AspNetCore.Components.Web
7 | @using Microsoft.AspNetCore.Components.Web.Virtualization
8 | @using Microsoft.JSInterop
9 | @using Blazor_PDF
10 | @using Blazor_PDF.Shared
11 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "DetailedErrors": true,
3 | "Logging": {
4 | "LogLevel": {
5 | "Default": "Information",
6 | "Microsoft": "Warning",
7 | "Microsoft.Hosting.Lifetime": "Information"
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | },
9 | "AllowedHosts": "*"
10 | }
11 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/illustrations/home.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tossnet/Blazor-PDF/4a97bff1990c600d7e79e9236948d0b99d8f245e/Blazor-PDF/Blazor-PDF/illustrations/home.PNG
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/wwwroot/css/open-iconic/FONT-LICENSE:
--------------------------------------------------------------------------------
1 | SIL OPEN FONT LICENSE Version 1.1
2 |
3 | Copyright (c) 2014 Waybury
4 |
5 | PREAMBLE
6 | The goals of the Open Font License (OFL) are to stimulate worldwide
7 | development of collaborative font projects, to support the font creation
8 | efforts of academic and linguistic communities, and to provide a free and
9 | open framework in which fonts may be shared and improved in partnership
10 | with others.
11 |
12 | The OFL allows the licensed fonts to be used, studied, modified and
13 | redistributed freely as long as they are not sold by themselves. The
14 | fonts, including any derivative works, can be bundled, embedded,
15 | redistributed and/or sold with any software provided that any reserved
16 | names are not used by derivative works. The fonts and derivatives,
17 | however, cannot be released under any other type of license. The
18 | requirement for fonts to remain under this license does not apply
19 | to any document created using the fonts or their derivatives.
20 |
21 | DEFINITIONS
22 | "Font Software" refers to the set of files released by the Copyright
23 | Holder(s) under this license and clearly marked as such. This may
24 | include source files, build scripts and documentation.
25 |
26 | "Reserved Font Name" refers to any names specified as such after the
27 | copyright statement(s).
28 |
29 | "Original Version" refers to the collection of Font Software components as
30 | distributed by the Copyright Holder(s).
31 |
32 | "Modified Version" refers to any derivative made by adding to, deleting,
33 | or substituting -- in part or in whole -- any of the components of the
34 | Original Version, by changing formats or by porting the Font Software to a
35 | new environment.
36 |
37 | "Author" refers to any designer, engineer, programmer, technical
38 | writer or other person who contributed to the Font Software.
39 |
40 | PERMISSION & CONDITIONS
41 | Permission is hereby granted, free of charge, to any person obtaining
42 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
43 | redistribute, and sell modified and unmodified copies of the Font
44 | Software, subject to the following conditions:
45 |
46 | 1) Neither the Font Software nor any of its individual components,
47 | in Original or Modified Versions, may be sold by itself.
48 |
49 | 2) Original or Modified Versions of the Font Software may be bundled,
50 | redistributed and/or sold with any software, provided that each copy
51 | contains the above copyright notice and this license. These can be
52 | included either as stand-alone text files, human-readable headers or
53 | in the appropriate machine-readable metadata fields within text or
54 | binary files as long as those fields can be easily viewed by the user.
55 |
56 | 3) No Modified Version of the Font Software may use the Reserved Font
57 | Name(s) unless explicit written permission is granted by the corresponding
58 | Copyright Holder. This restriction only applies to the primary font name as
59 | presented to the users.
60 |
61 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
62 | Software shall not be used to promote, endorse or advertise any
63 | Modified Version, except to acknowledge the contribution(s) of the
64 | Copyright Holder(s) and the Author(s) or with their explicit written
65 | permission.
66 |
67 | 5) The Font Software, modified or unmodified, in part or in whole,
68 | must be distributed entirely under this license, and must not be
69 | distributed under any other license. The requirement for fonts to
70 | remain under this license does not apply to any document created
71 | using the Font Software.
72 |
73 | TERMINATION
74 | This license becomes null and void if any of the above conditions are
75 | not met.
76 |
77 | DISCLAIMER
78 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
79 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
80 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
81 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
82 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
83 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
84 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
85 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
86 | OTHER DEALINGS IN THE FONT SOFTWARE.
87 |
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/wwwroot/css/open-iconic/ICON-LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Waybury
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/Blazor-PDF/Blazor-PDF/wwwroot/css/open-iconic/README.md:
--------------------------------------------------------------------------------
1 | [Open Iconic v1.1.1](http://useiconic.com/open)
2 | ===========
3 |
4 | ### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint—ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons)
5 |
6 |
7 |
8 | ## What's in Open Iconic?
9 |
10 | * 223 icons designed to be legible down to 8 pixels
11 | * Super-light SVG files - 61.8 for the entire set
12 | * SVG sprite—the modern replacement for icon fonts
13 | * Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats
14 | * Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats
15 | * PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px.
16 |
17 |
18 | ## Getting Started
19 |
20 | #### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections.
21 |
22 | ### General Usage
23 |
24 | #### Using Open Iconic's SVGs
25 |
26 | We like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute).
27 |
28 | ```
29 |
30 | ```
31 |
32 | #### Using Open Iconic's SVG Sprite
33 |
34 | Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack.
35 |
36 | Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `