mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-10-31 07:26:09 +00:00 
			
		
		
		
	Tests markdown =>pdf
This commit is contained in:
		
							parent
							
								
									ed3ea2d5d2
								
							
						
					
					
						commit
						7cfee27ba3
					
				
					 2 changed files with 105 additions and 34 deletions
				
			
		|  | @ -3,6 +3,7 @@ using iTextSharp.text; | ||||||
| using iTextSharp.text.pdf; | using iTextSharp.text.pdf; | ||||||
| using Markdig; | using Markdig; | ||||||
| using Markdig.Syntax; | using Markdig.Syntax; | ||||||
|  | using Markdig.Syntax.Inlines; | ||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Diagnostics; | using System.Diagnostics; | ||||||
|  | @ -28,38 +29,49 @@ namespace AideDeJeu.Pdf | ||||||
| 
 | 
 | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         Document _Document = null; | ||||||
|  |         PdfWriter _Writer = null; | ||||||
|         public void MarkdownToPdf(string md, Stream stream) |         public void MarkdownToPdf(string md, Stream stream) | ||||||
|         { |         { | ||||||
|             var pipeline = new Markdig.MarkdownPipelineBuilder().UseYamlFrontMatter().UsePipeTables().Build(); |             var pipeline = new Markdig.MarkdownPipelineBuilder().UseYamlFrontMatter().UsePipeTables().Build(); | ||||||
|             var parsed = Markdig.Markdown.Parse(md, pipeline); |             var parsed = Markdig.Markdown.Parse(md, pipeline); | ||||||
| 
 | 
 | ||||||
|             PdfReader reader = null; |             _Document = new Document(); | ||||||
|             reader = new PdfReader(AideDeJeu.Tools.Helpers.GetResourceStream("AideDeJeu.Pdf.poker_size.pdf")); |             _Writer = PdfWriter.GetInstance(_Document, stream); | ||||||
|             PdfStamper stamper = null; |             _Document.Open(); | ||||||
|             stamper = new PdfStamper(reader, stream); |             //PdfReader reader = null; | ||||||
|  |             //reader = new PdfReader(AideDeJeu.Tools.Helpers.GetResourceStream("AideDeJeu.Pdf.poker_size.pdf")); | ||||||
|  |             //PdfStamper stamper = null; | ||||||
|  |             //stamper = new PdfStamper(reader, stream); | ||||||
| 
 | 
 | ||||||
|             Render(parsed.AsEnumerable(), stamper); |             Render(parsed.AsEnumerable()); | ||||||
| 
 | 
 | ||||||
|             stamper.Close(); |             _Document.Close(); | ||||||
|             reader.Close(); |             _Writer.Close(); | ||||||
|  |             //stamper.Close(); | ||||||
|  |             //reader.Close(); | ||||||
|         } |         } | ||||||
|         private void Render(IEnumerable<Block> blocks, PdfStamper stamper) |         private void Render(IEnumerable<Block> blocks) | ||||||
|         { |         { | ||||||
|             foreach (var block in blocks) |             foreach (var block in blocks) | ||||||
|             { |             { | ||||||
|                 this.Render(block, stamper); |                 this.Render(block); | ||||||
|  |                 if(block.IsBreakable) | ||||||
|  |                 { | ||||||
|  |                     _Document.Add(Chunk.NEWLINE); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         private void Render(Block block, PdfStamper stamper) |         } | ||||||
|  |         private void Render(Block block) | ||||||
|         { |         { | ||||||
|             switch (block) |             switch (block) | ||||||
|             { |             { | ||||||
|                 //case HeadingBlock heading: |                 case HeadingBlock heading: | ||||||
|                 //    Render(heading); |                     Render(heading); | ||||||
|                 //    break; |                     break; | ||||||
| 
 | 
 | ||||||
|                 case ParagraphBlock paragraph: |                 case ParagraphBlock paragraph: | ||||||
|                     Render(paragraph, stamper); |                     Render(paragraph); | ||||||
|                     break; |                     break; | ||||||
| 
 | 
 | ||||||
|                 //case QuoteBlock quote: |                 //case QuoteBlock quote: | ||||||
|  | @ -101,30 +113,83 @@ namespace AideDeJeu.Pdf | ||||||
|             //} |             //} | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         private void Render(ParagraphBlock block, PdfStamper stamper) |         private void Render(HeadingBlock block) | ||||||
|         { |         { | ||||||
|             var cb = stamper.GetOverContent(1); |             _Document.Add(CreateFormatted(block.Inline, Font.HELVETICA, 0, new Color(0x9B1C47), 20 + (7 - block.Level) * 2)); | ||||||
|             //ColumnText.ShowTextAligned(cb, iTextSharp.text.Element.ALIGN_LEFT, new Phrase("Galefrin"), 40, 40, 0); |         } | ||||||
|  | 
 | ||||||
|  |         private void Render(ParagraphBlock block) | ||||||
|  |         { | ||||||
|  |             _Document.Add(CreateFormatted(block.Inline, Font.HELVETICA, 0, new Color(0, 0, 0), 20)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private Phrase CreateFormatted(ContainerInline inlines, int fontFamily, int fontStyle, Color fontColor, float fontSize) | ||||||
|  |         { | ||||||
|  |             var phrase = new Phrase(); | ||||||
|  |             foreach (var inline in inlines) | ||||||
|  |             { | ||||||
|  |                 var spans = CreateChunks(inline, fontFamily, fontStyle, fontColor, fontSize); | ||||||
|  |                 if (spans != null) | ||||||
|  |                 { | ||||||
|  |                     foreach (var span in spans) | ||||||
|  |                     { | ||||||
|  |                         phrase.Add(span); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             return phrase; | ||||||
|  |         } | ||||||
|  |         private Chunk[] CreateChunks(Inline inline, int fontFamily, int fontStyle, Color fontColor, float fontSize) | ||||||
|  |         { | ||||||
|  |             switch (inline) | ||||||
|  |             { | ||||||
|  |                 case LiteralInline literal: | ||||||
|  |                     return new Chunk[] | ||||||
|  |                     { | ||||||
|  |                         new Chunk() | ||||||
|  |                         { | ||||||
|  |                             Content = literal.Content.Text.Substring(literal.Content.Start, literal.Content.Length), | ||||||
|  |                             Font = new Font(fontFamily, fontSize, fontStyle, fontColor) | ||||||
|  |                         } | ||||||
|  |                     }; | ||||||
|  |                 case EmphasisInline emphasis: | ||||||
|  |                     var childStyle = fontStyle | (emphasis.DelimiterCount == 2 ? Font.BOLD : Font.ITALIC); | ||||||
|  |                     var espans = emphasis.SelectMany(x => CreateChunks(x, fontFamily, childStyle, fontColor, fontSize)); | ||||||
|  |                     return espans.ToArray(); | ||||||
|  | 
 | ||||||
|  |                 case LineBreakInline breakline: | ||||||
|  |                     return new Chunk[] { Chunk.NEWLINE }; | ||||||
|  | 
 | ||||||
|  |                 case LinkInline link: | ||||||
|  |                 case CodeInline code: | ||||||
|  | 
 | ||||||
|  |                 case HtmlInline html: | ||||||
|  | 
 | ||||||
|  |                 default: | ||||||
|  |                     return new Chunk[] { }; | ||||||
|  |             } | ||||||
|  |             //var cb = stamper.GetOverContent(1); | ||||||
|  |             ////ColumnText.ShowTextAligned(cb, iTextSharp.text.Element.ALIGN_LEFT, new Phrase("Galefrin"), 40, 40, 0); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|             ColumnText ct = new ColumnText(cb); |             //ColumnText ct = new ColumnText(cb); | ||||||
|             ct.SetSimpleColumn(10f, 48f, 200f, 600f); |             //ct.SetSimpleColumn(10f, 48f, 200f, 600f); | ||||||
|             Font f = new Font(); |             //Font f = new Font(); | ||||||
|             Paragraph pz = new Paragraph(new Phrase(20, "Hello World!", f)); |             //Paragraph pz = new Paragraph(new Phrase(20, "Hello World!", f)); | ||||||
|             ct.AddElement(pz); |             //ct.AddElement(pz); | ||||||
|             ct.Go(); |             //ct.Go(); | ||||||
|             BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, "Cp1252", BaseFont.EMBEDDED); |             //BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, "Cp1252", BaseFont.EMBEDDED); | ||||||
|             f = new Font(bf, 13); |             //f = new Font(bf, 13); | ||||||
|             ct = new ColumnText(cb); |             //ct = new ColumnText(cb); | ||||||
|             ct.SetSimpleColumn(10f, 48f, 200f, 700f); |             //ct.SetSimpleColumn(10f, 48f, 200f, 700f); | ||||||
|             pz = new Paragraph("Hello World!", f); |             //pz = new Paragraph("Hello World!", f); | ||||||
|             ct.AddElement(pz); |             //ct.AddElement(pz); | ||||||
|             ct.Go(); |             //ct.Go(); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|             return; |             //return; | ||||||
|             /* |             /* | ||||||
|             var text = block.ToMarkdownString(); |             var text = block.ToMarkdownString(); | ||||||
|             //DrawText(content, md, null, 100, 100, 300, 300, 0); |             //DrawText(content, md, null, 100, 100, 300, 300, 0); | ||||||
|  |  | ||||||
|  | @ -383,12 +383,18 @@ namespace AideDeJeuCmd | ||||||
|             //Xamarin.Essentials.Platform.Init(this, bundle); |             //Xamarin.Essentials.Platform.Init(this, bundle); | ||||||
|             //Xamarin.Essentials.ExperimentalFeatures.Enable(Xamarin.Essentials.ExperimentalFeatures.ShareFileRequest); |             //Xamarin.Essentials.ExperimentalFeatures.Enable(Xamarin.Essentials.ExperimentalFeatures.ShareFileRequest); | ||||||
| 
 | 
 | ||||||
|  |             var store = new StoreViewModel(); | ||||||
|  | 
 | ||||||
|  |             var item = await store.GetItemFromDataAsync("spells_hd", "aide"); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|             var pdfService = new PdfService(); |             var pdfService = new PdfService(); | ||||||
|             //var pc = new AideDeJeu.ViewModels.PlayerCharacter.PlayerCharacterViewModel(); |             //var pc = new AideDeJeu.ViewModels.PlayerCharacter.PlayerCharacterViewModel(); | ||||||
|             //var pce = new AideDeJeu.ViewModels.PlayerCharacter.PlayerCharacterEditorViewModel(); |             //var pce = new AideDeJeu.ViewModels.PlayerCharacter.PlayerCharacterEditorViewModel(); | ||||||
|             using (var stream = new FileStream("test.pdf", FileMode.Create)) |             using (var stream = new FileStream("test.pdf", FileMode.Create)) | ||||||
|             { |             { | ||||||
|                 pdfService.MarkdownToPdf("# mon titre\n\nhop", stream); |                 //pdfService.MarkdownToPdf("# mon titre\n\nhop", stream); | ||||||
|  |                 pdfService.MarkdownToPdf(item.Markdown, stream); | ||||||
|                 //var stream = new MemoryStream(); |                 //var stream = new MemoryStream(); | ||||||
|                 //pce.GeneratePdfToStream(pc, stream); |                 //pce.GeneratePdfToStream(pc, stream); | ||||||
|             } |             } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yan Maniez
						Yan Maniez