mirror of
https://github.com/Nioux/AideDeJeu.git
synced 2025-10-29 14:35:45 +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 Markdig;
|
||||
using Markdig.Syntax;
|
||||
using Markdig.Syntax.Inlines;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
|
|
@ -28,38 +29,49 @@ namespace AideDeJeu.Pdf
|
|||
|
||||
}
|
||||
|
||||
Document _Document = null;
|
||||
PdfWriter _Writer = null;
|
||||
public void MarkdownToPdf(string md, Stream stream)
|
||||
{
|
||||
var pipeline = new Markdig.MarkdownPipelineBuilder().UseYamlFrontMatter().UsePipeTables().Build();
|
||||
var parsed = Markdig.Markdown.Parse(md, pipeline);
|
||||
|
||||
PdfReader reader = null;
|
||||
reader = new PdfReader(AideDeJeu.Tools.Helpers.GetResourceStream("AideDeJeu.Pdf.poker_size.pdf"));
|
||||
PdfStamper stamper = null;
|
||||
stamper = new PdfStamper(reader, stream);
|
||||
_Document = new Document();
|
||||
_Writer = PdfWriter.GetInstance(_Document, stream);
|
||||
_Document.Open();
|
||||
//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();
|
||||
reader.Close();
|
||||
_Document.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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
//case HeadingBlock heading:
|
||||
// Render(heading);
|
||||
// break;
|
||||
case HeadingBlock heading:
|
||||
Render(heading);
|
||||
break;
|
||||
|
||||
case ParagraphBlock paragraph:
|
||||
Render(paragraph, stamper);
|
||||
Render(paragraph);
|
||||
break;
|
||||
|
||||
//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);
|
||||
//ColumnText.ShowTextAligned(cb, iTextSharp.text.Element.ALIGN_LEFT, new Phrase("Galefrin"), 40, 40, 0);
|
||||
_Document.Add(CreateFormatted(block.Inline, Font.HELVETICA, 0, new Color(0x9B1C47), 20 + (7 - block.Level) * 2));
|
||||
}
|
||||
|
||||
|
||||
ColumnText ct = new ColumnText(cb);
|
||||
ct.SetSimpleColumn(10f, 48f, 200f, 600f);
|
||||
Font f = new Font();
|
||||
Paragraph pz = new Paragraph(new Phrase(20, "Hello World!", f));
|
||||
ct.AddElement(pz);
|
||||
ct.Go();
|
||||
BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, "Cp1252", BaseFont.EMBEDDED);
|
||||
f = new Font(bf, 13);
|
||||
ct = new ColumnText(cb);
|
||||
ct.SetSimpleColumn(10f, 48f, 200f, 700f);
|
||||
pz = new Paragraph("Hello World!", f);
|
||||
ct.AddElement(pz);
|
||||
ct.Go();
|
||||
|
||||
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);
|
||||
//ct.SetSimpleColumn(10f, 48f, 200f, 600f);
|
||||
//Font f = new Font();
|
||||
//Paragraph pz = new Paragraph(new Phrase(20, "Hello World!", f));
|
||||
//ct.AddElement(pz);
|
||||
//ct.Go();
|
||||
//BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, "Cp1252", BaseFont.EMBEDDED);
|
||||
//f = new Font(bf, 13);
|
||||
//ct = new ColumnText(cb);
|
||||
//ct.SetSimpleColumn(10f, 48f, 200f, 700f);
|
||||
//pz = new Paragraph("Hello World!", f);
|
||||
//ct.AddElement(pz);
|
||||
//ct.Go();
|
||||
|
||||
|
||||
|
||||
return;
|
||||
|
||||
//return;
|
||||
/*
|
||||
var text = block.ToMarkdownString();
|
||||
//DrawText(content, md, null, 100, 100, 300, 300, 0);
|
||||
|
|
|
|||
|
|
@ -383,12 +383,18 @@ namespace AideDeJeuCmd
|
|||
//Xamarin.Essentials.Platform.Init(this, bundle);
|
||||
//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 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("# mon titre\n\nhop", stream);
|
||||
pdfService.MarkdownToPdf(item.Markdown, stream);
|
||||
//var stream = new MemoryStream();
|
||||
//pce.GeneratePdfToStream(pc, stream);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue