diff --git a/AideDeJeu/AideDeJeu.UWP/App.xaml.cs b/AideDeJeu/AideDeJeu.UWP/App.xaml.cs index c5845851..8d399769 100644 --- a/AideDeJeu/AideDeJeu.UWP/App.xaml.cs +++ b/AideDeJeu/AideDeJeu.UWP/App.xaml.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; +using System.Text; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; using Windows.Foundation; @@ -61,6 +62,7 @@ namespace AideDeJeu.UWP Xamarin.Forms.Forms.Init(e, Rg.Plugins.Popup.Popup.GetExtraAssemblies()); SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3()); + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { diff --git a/AideDeJeu/AideDeJeu/App.xaml.cs b/AideDeJeu/AideDeJeu/App.xaml.cs index ac96cb1e..107bcaa1 100644 --- a/AideDeJeu/AideDeJeu/App.xaml.cs +++ b/AideDeJeu/AideDeJeu/App.xaml.cs @@ -1,4 +1,5 @@ -using AideDeJeu.ViewModels; +using AideDeJeu.Pdf; +using AideDeJeu.ViewModels; using AideDeJeu.ViewModels.Library; using AideDeJeu.ViewModels.PlayerCharacter; using AideDeJeu.Views; @@ -19,6 +20,7 @@ namespace AideDeJeu InitializeComponent(); DependencyService.Register(); + DependencyService.Register(); DependencyService.Register(); DependencyService.Register(); DependencyService.Register(); diff --git a/AideDeJeu/AideDeJeu/Pdf/PdfService.cs b/AideDeJeu/AideDeJeu/Pdf/PdfService.cs index 82400107..49451e99 100644 --- a/AideDeJeu/AideDeJeu/Pdf/PdfService.cs +++ b/AideDeJeu/AideDeJeu/Pdf/PdfService.cs @@ -10,11 +10,19 @@ using System.Diagnostics; using System.IO; using System.Linq; using System.Text; +using Xamarin.Forms; namespace AideDeJeu.Pdf { public class PdfService { + public static PdfService Instance + { + get + { + return DependencyService.Get(); + } + } public static void DrawText(PdfContentByte cb, string text, iTextSharp.text.Font font, float x, float y, float width, float height, int alignment) { cb.SetRGBColorFill(127, 127, 127); @@ -35,7 +43,7 @@ namespace AideDeJeu.Pdf { var pipeline = new Markdig.MarkdownPipelineBuilder().UseYamlFrontMatter().UsePipeTables().Build(); - _Document = new Document(new Rectangle(822, 1122)); + _Document = new Document(new iTextSharp.text.Rectangle(822, 1122)); _Writer = PdfWriter.GetInstance(_Document, stream); _Document.Open(); //PdfReader reader = null; @@ -100,48 +108,48 @@ namespace AideDeJeu.Pdf } - Font _Header1Font = null; - public Font Header1Font + iTextSharp.text.Font _Header1Font = null; + public iTextSharp.text.Font Header1Font { get { return _Header1Font ?? (_Header1Font = new iTextSharp.text.Font(CinzelBold, 30)); } } - Font _Header2Font = null; - public Font Header2Font + iTextSharp.text.Font _Header2Font = null; + public iTextSharp.text.Font Header2Font { get { return _Header2Font ?? (_Header2Font = new iTextSharp.text.Font(CinzelRegular, 25)); } } - Font _Header3Font = null; - public Font Header3Font + iTextSharp.text.Font _Header3Font = null; + public iTextSharp.text.Font Header3Font { get { return _Header3Font ?? (_Header3Font = new iTextSharp.text.Font(CinzelRegular, 20)); } } - Font _Header4Font = null; - public Font Header4Font + iTextSharp.text.Font _Header4Font = null; + public iTextSharp.text.Font Header4Font { get { return _Header4Font ?? (_Header4Font = new iTextSharp.text.Font(CinzelRegular, 18)); } } - Font _Header5Font = null; - public Font Header5Font + iTextSharp.text.Font _Header5Font = null; + public iTextSharp.text.Font Header5Font { get { return _Header5Font ?? (_Header5Font = new iTextSharp.text.Font(CinzelRegular, 16)); } } - Font _Header6Font = null; - public Font Header6Font + iTextSharp.text.Font _Header6Font = null; + public iTextSharp.text.Font Header6Font { get { @@ -150,8 +158,8 @@ namespace AideDeJeu.Pdf } - Font _ParagraphFont = null; - Font ParagraphFont + iTextSharp.text.Font _ParagraphFont = null; + iTextSharp.text.Font ParagraphFont { get { @@ -295,18 +303,18 @@ namespace AideDeJeu.Pdf private Phrase Render(HeadingBlock block) { - var fonts = new Font[] { Header1Font, Header2Font, Header3Font, Header4Font, Header5Font, Header6Font }; - var colors = new Color[] { new Color(0x9B1C47), new Color(0, 0, 0), new Color(0, 0, 0), new Color(0, 0, 0), new Color(0, 0, 0), new Color(0, 0, 0) }; + var fonts = new iTextSharp.text.Font[] { Header1Font, Header2Font, Header3Font, Header4Font, Header5Font, Header6Font }; + var colors = new iTextSharp.text.Color[] { new iTextSharp.text.Color(0x9B1C47), new iTextSharp.text.Color(0, 0, 0), new iTextSharp.text.Color(0, 0, 0), new iTextSharp.text.Color(0, 0, 0), new iTextSharp.text.Color(0, 0, 0), new iTextSharp.text.Color(0, 0, 0) }; return CreateFormatted(block.Inline, fonts[block.Level - 1], 0, colors[block.Level - 1]); } private Phrase Render(ParagraphBlock block) { - return CreateFormatted(block.Inline, ParagraphFont, 0, new Color(0, 0, 0)); + return CreateFormatted(block.Inline, ParagraphFont, 0, new iTextSharp.text.Color(0, 0, 0)); //_Document.Add(CreateFormatted(block.Inline, Font.HELVETICA, 0, new Color(0, 0, 0), 20)); } - private Phrase CreateFormatted(ContainerInline inlines, Font fontFamily, int fontStyle, Color fontColor) + private Phrase CreateFormatted(ContainerInline inlines, iTextSharp.text.Font fontFamily, int fontStyle, iTextSharp.text.Color fontColor) { var phrase = new Phrase(); foreach (var inline in inlines) @@ -322,7 +330,7 @@ namespace AideDeJeu.Pdf } return phrase; } - private Chunk[] CreateChunks(Inline inline, Font fontFamily, int fontStyle, Color fontColor) + private Chunk[] CreateChunks(Inline inline, iTextSharp.text.Font fontFamily, int fontStyle, iTextSharp.text.Color fontColor) { switch (inline) { @@ -332,11 +340,11 @@ namespace AideDeJeu.Pdf new Chunk() { Content = literal.Content.Text.Substring(literal.Content.Start, literal.Content.Length), - Font = new Font(fontFamily.BaseFont, fontFamily.Size, fontStyle, fontColor) + Font = new iTextSharp.text.Font(fontFamily.BaseFont, fontFamily.Size, fontStyle, fontColor) } }; case EmphasisInline emphasis: - var childStyle = fontStyle | (emphasis.DelimiterCount == 2 ? Font.BOLD : Font.ITALIC); + var childStyle = fontStyle | (emphasis.DelimiterCount == 2 ? iTextSharp.text.Font.BOLD : iTextSharp.text.Font.ITALIC); var espans = emphasis.SelectMany(x => CreateChunks(x, fontFamily, childStyle, fontColor)); return espans.ToArray(); diff --git a/AideDeJeu/AideDeJeu/ViewModels/Navigator.cs b/AideDeJeu/AideDeJeu/ViewModels/Navigator.cs index f4d30722..521fbaeb 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/Navigator.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/Navigator.cs @@ -1,4 +1,5 @@ -using AideDeJeu.Tools; +using AideDeJeu.Pdf; +using AideDeJeu.Tools; using AideDeJeu.ViewModels.Library; using AideDeJeu.Views; using AideDeJeu.Views.Library; @@ -6,6 +7,7 @@ using AideDeJeuLib; using Rg.Plugins.Popup.Services; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -152,11 +154,11 @@ namespace AideDeJeu.ViewModels var lastPage = navigationPage.Navigation.NavigationStack.LastOrDefault(); var context = lastPage.BindingContext; Item item = null; - if(context is ItemDetailViewModel) + if (context is ItemDetailViewModel) { item = (context as ItemDetailViewModel).Item; } - else if(context is ItemsViewModel) + else if (context is ItemsViewModel) { item = (context as ItemsViewModel).AllItems; } @@ -165,10 +167,10 @@ namespace AideDeJeu.ViewModels var result = await Application.Current.MainPage.DisplayActionSheet("Ajouter à", "Annuler", "Nouvelle liste", vm.BookmarkCollectionNames.ToArray()); if (result != "Annuler") { - if(result == "Nouvelle liste") + if (result == "Nouvelle liste") { int i = 1; - while(vm.BookmarkCollectionNames.Contains(result = $"Nouvelle liste ({i})")) + while (vm.BookmarkCollectionNames.Contains(result = $"Nouvelle liste ({i})")) { i++; } @@ -230,7 +232,7 @@ namespace AideDeJeu.ViewModels { get { - return _NavigateToLinkCommand ?? (_NavigateToLinkCommand = new Command(async(s) => await NavigateToLinkAsync(s))); + return _NavigateToLinkCommand ?? (_NavigateToLinkCommand = new Command(async (s) => await NavigateToLinkAsync(s))); } } @@ -261,7 +263,7 @@ namespace AideDeJeu.ViewModels var filterViewModel = items.GetNewFilterViewModel(); var itemsViewModel = new ItemsViewModel() { AllItems = items, Filter = filterViewModel }; itemsViewModel.LoadItemsCommand.Execute(null); - if(!string.IsNullOrEmpty(with)) + if (!string.IsNullOrEmpty(with)) { var swith = with.Split('_'); for (int i = 0; i < swith.Length / 2; i++) @@ -306,7 +308,7 @@ namespace AideDeJeu.ViewModels // create the Transparent Popup Page // of type string since we need a string return var popup = new InputAlertDialogBase>(inputView); - + // subscribe to the TextInputView's Button click event inputView.SaveButtonEventHandler += @@ -349,5 +351,22 @@ namespace AideDeJeu.ViewModels return result; } + private Command _GeneratePDFCommand = null; + public Command GeneratePDFCommand + { + get + { + return _GeneratePDFCommand ?? (_GeneratePDFCommand = new Command(async (markdown) => await ExecuteGeneratePDFCommandAsync(markdown))); + } + } + + public async Task ExecuteGeneratePDFCommandAsync(string markdown) + { + using (var stream = new FileStream(Path.Combine(Xamarin.Essentials.FileSystem.CacheDirectory, "test.pdf"), FileMode.Create)) + { + + PdfService.Instance.MarkdownToPdf(new List() { markdown }, stream); + } + } } -} +} \ No newline at end of file diff --git a/AideDeJeu/AideDeJeu/Views/Library/ItemDetailPage.xaml b/AideDeJeu/AideDeJeu/Views/Library/ItemDetailPage.xaml index 187442ca..af38f5e6 100644 --- a/AideDeJeu/AideDeJeu/Views/Library/ItemDetailPage.xaml +++ b/AideDeJeu/AideDeJeu/Views/Library/ItemDetailPage.xaml @@ -14,6 +14,7 @@ + diff --git a/AideDeJeu/AideDeJeu/Views/Library/ItemsPage.xaml b/AideDeJeu/AideDeJeu/Views/Library/ItemsPage.xaml index 33e448e6..3ca8ca9a 100644 --- a/AideDeJeu/AideDeJeu/Views/Library/ItemsPage.xaml +++ b/AideDeJeu/AideDeJeu/Views/Library/ItemsPage.xaml @@ -17,6 +17,7 @@ +