diff --git a/AideDeJeu/AideDeJeu/Pdf/PdfService.cs b/AideDeJeu/AideDeJeu/Pdf/PdfService.cs index 670285f1..9964729b 100644 --- a/AideDeJeu/AideDeJeu/Pdf/PdfService.cs +++ b/AideDeJeu/AideDeJeu/Pdf/PdfService.cs @@ -31,10 +31,9 @@ namespace AideDeJeu.Pdf Document _Document = null; PdfWriter _Writer = null; - public void MarkdownToPdf(string md, Stream stream) + public void MarkdownToPdf(List mds, Stream stream) { var pipeline = new Markdig.MarkdownPipelineBuilder().UseYamlFrontMatter().UsePipeTables().Build(); - var parsed = Markdig.Markdown.Parse(md, pipeline); _Document = new Document(new Rectangle(822, 1122)); _Writer = PdfWriter.GetInstance(_Document, stream); @@ -44,35 +43,56 @@ namespace AideDeJeu.Pdf //PdfStamper stamper = null; //stamper = new PdfStamper(reader, stream); - Render(parsed.AsEnumerable()); + foreach (var md in mds) + { + var parsed = Markdig.Markdown.Parse(md, pipeline); + Render(parsed.AsEnumerable(), _Document); + } _Document.Close(); _Writer.Close(); //stamper.Close(); //reader.Close(); } - private void Render(IEnumerable blocks) + private void Render(IEnumerable blocks, Document document) { - foreach (var block in blocks) + var phrases = Render(blocks); + foreach(var phrase in phrases) { - this.Render(block); - if(block.IsBreakable) - { - _Document.Add(Chunk.NEWLINE); - } + document.Add(phrase); + //ColumnText ct = new ColumnText(_Writer.DirectContent); + //ct.AddText(CreateFormatted(block.Inline, Font.HELVETICA, 0, new Color(0, 0, 0), 12)); + //ct.Alignment = Element.ALIGN_JUSTIFIED; + //ct.SetSimpleColumn(10, 10, 200, 200); + //ct.Go(); } } - private void Render(Block block) + private IEnumerable Render(IEnumerable blocks) + { + var phrases = new List(); + foreach (var block in blocks) + { + var phrase = this.Render(block); + if(phrase != null) + { + phrases.Add(phrase); + } + if (block.IsBreakable) + { + phrases.Add(new Phrase(Chunk.NEWLINE)); + } + } + return phrases; + } + private Phrase Render(Block block) { switch (block) { case HeadingBlock heading: - Render(heading); - break; + return Render(heading); case ParagraphBlock paragraph: - Render(paragraph); - break; + return Render(paragraph); //case QuoteBlock quote: // Render(quote); @@ -100,7 +120,7 @@ namespace AideDeJeu.Pdf default: Debug.WriteLine($"Can't render {block.GetType()} blocks."); - break; + return null; } //if (queuedViews.Any()) @@ -113,18 +133,14 @@ namespace AideDeJeu.Pdf //} } - private void Render(HeadingBlock block) + private Phrase Render(HeadingBlock block) { - _Document.Add(CreateFormatted(block.Inline, Font.HELVETICA, 0, new Color(0x9B1C47), 20 + (7 - block.Level) * 2)); + return CreateFormatted(block.Inline, Font.HELVETICA, 0, new Color(0x9B1C47), 14 + (7 - block.Level) * 2); } - private void Render(ParagraphBlock block) + private Phrase Render(ParagraphBlock block) { - ColumnText ct = new ColumnText(_Writer.DirectContent); - ct.AddText(CreateFormatted(block.Inline, Font.HELVETICA, 0, new Color(0, 0, 0), 20)); - ct.Alignment = Element.ALIGN_JUSTIFIED; - ct.SetSimpleColumn(10, 10, 200, 200); - ct.Go(); + return CreateFormatted(block.Inline, Font.HELVETICA, 0, new Color(0, 0, 0), 12); //_Document.Add(CreateFormatted(block.Inline, Font.HELVETICA, 0, new Color(0, 0, 0), 20)); } diff --git a/AideDeJeu/AideDeJeuCmd/Program.cs b/AideDeJeu/AideDeJeuCmd/Program.cs index 2d9d1800..7dfa40fa 100644 --- a/AideDeJeu/AideDeJeuCmd/Program.cs +++ b/AideDeJeu/AideDeJeuCmd/Program.cs @@ -387,16 +387,21 @@ namespace AideDeJeuCmd var item = await store.GetItemFromDataAsync("spells_hd", "aide"); - - var pdfService = new PdfService(); - //var pc = new AideDeJeu.ViewModels.PlayerCharacter.PlayerCharacterViewModel(); - //var pce = new AideDeJeu.ViewModels.PlayerCharacter.PlayerCharacterEditorViewModel(); - using (var stream = new FileStream("test.pdf", FileMode.Create)) + using (var context = await StoreViewModel.GetLibraryContextAsync()) { - //pdfService.MarkdownToPdf("# mon titre\n\nhop", stream); - pdfService.MarkdownToPdf(item.Markdown, stream); - //var stream = new MemoryStream(); - //pce.GeneratePdfToStream(pc, stream); + var spells = await context.Spells.ToListAsync(); + + var pdfService = new PdfService(); + //var pc = new AideDeJeu.ViewModels.PlayerCharacter.PlayerCharacterViewModel(); + //var pce = new AideDeJeu.ViewModels.PlayerCharacter.PlayerCharacterEditorViewModel(); + using (var stream = new FileStream("test.pdf", FileMode.Create)) + { + //pdfService.MarkdownToPdf("# mon titre\n\nhop", stream); + pdfService.MarkdownToPdf(spells.Select(s => s.Markdown).ToList(), stream); + //pdfService.MarkdownToPdf(new List() { item.Markdown }, stream); + //var stream = new MemoryStream(); + //pce.GeneratePdfToStream(pc, stream); + } } }