mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-10-30 23:16:09 +00:00 
			
		
		
		
	Export pdf uwp
This commit is contained in:
		
							parent
							
								
									de54fad9c5
								
							
						
					
					
						commit
						9e3a07efe4
					
				
					 6 changed files with 65 additions and 32 deletions
				
			
		|  | @ -3,6 +3,7 @@ using System.Collections.Generic; | ||||||
| using System.IO; | using System.IO; | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Runtime.InteropServices.WindowsRuntime; | using System.Runtime.InteropServices.WindowsRuntime; | ||||||
|  | using System.Text; | ||||||
| using Windows.ApplicationModel; | using Windows.ApplicationModel; | ||||||
| using Windows.ApplicationModel.Activation; | using Windows.ApplicationModel.Activation; | ||||||
| using Windows.Foundation; | using Windows.Foundation; | ||||||
|  | @ -61,6 +62,7 @@ namespace AideDeJeu.UWP | ||||||
| 
 | 
 | ||||||
|                 Xamarin.Forms.Forms.Init(e, Rg.Plugins.Popup.Popup.GetExtraAssemblies()); |                 Xamarin.Forms.Forms.Init(e, Rg.Plugins.Popup.Popup.GetExtraAssemblies()); | ||||||
|                 SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3()); |                 SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_e_sqlite3()); | ||||||
|  |                 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); | ||||||
| 
 | 
 | ||||||
|                 if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) |                 if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) | ||||||
|                 { |                 { | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| using AideDeJeu.ViewModels; | using AideDeJeu.Pdf; | ||||||
|  | using AideDeJeu.ViewModels; | ||||||
| using AideDeJeu.ViewModels.Library; | using AideDeJeu.ViewModels.Library; | ||||||
| using AideDeJeu.ViewModels.PlayerCharacter; | using AideDeJeu.ViewModels.PlayerCharacter; | ||||||
| using AideDeJeu.Views; | using AideDeJeu.Views; | ||||||
|  | @ -19,6 +20,7 @@ namespace AideDeJeu | ||||||
| 			InitializeComponent(); | 			InitializeComponent(); | ||||||
| 
 | 
 | ||||||
|             DependencyService.Register<MainViewModel>(); |             DependencyService.Register<MainViewModel>(); | ||||||
|  |             DependencyService.Register<PdfService>(); | ||||||
|             DependencyService.Register<BookmarksViewModel>(); |             DependencyService.Register<BookmarksViewModel>(); | ||||||
|             DependencyService.Register<StoreViewModel>(); |             DependencyService.Register<StoreViewModel>(); | ||||||
|             DependencyService.Register<PlayerCharacterEditorViewModel>(); |             DependencyService.Register<PlayerCharacterEditorViewModel>(); | ||||||
|  |  | ||||||
|  | @ -10,11 +10,19 @@ using System.Diagnostics; | ||||||
| using System.IO; | using System.IO; | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Text; | using System.Text; | ||||||
|  | using Xamarin.Forms; | ||||||
| 
 | 
 | ||||||
| namespace AideDeJeu.Pdf | namespace AideDeJeu.Pdf | ||||||
| { | { | ||||||
|     public class PdfService |     public class PdfService | ||||||
|     { |     { | ||||||
|  |         public static PdfService Instance | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 return DependencyService.Get<PdfService>(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|         public static void DrawText(PdfContentByte cb, string text, iTextSharp.text.Font font, float x, float y, float width, float height, int alignment) |         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); |             cb.SetRGBColorFill(127, 127, 127); | ||||||
|  | @ -35,7 +43,7 @@ namespace AideDeJeu.Pdf | ||||||
|         { |         { | ||||||
|             var pipeline = new Markdig.MarkdownPipelineBuilder().UseYamlFrontMatter().UsePipeTables().Build(); |             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); |             _Writer = PdfWriter.GetInstance(_Document, stream); | ||||||
|             _Document.Open(); |             _Document.Open(); | ||||||
|             //PdfReader reader = null; |             //PdfReader reader = null; | ||||||
|  | @ -100,48 +108,48 @@ namespace AideDeJeu.Pdf | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|         Font _Header1Font = null; |         iTextSharp.text.Font _Header1Font = null; | ||||||
|         public Font Header1Font |         public iTextSharp.text.Font Header1Font | ||||||
|         { |         { | ||||||
|             get |             get | ||||||
|             { |             { | ||||||
|                 return _Header1Font ?? (_Header1Font = new iTextSharp.text.Font(CinzelBold, 30)); |                 return _Header1Font ?? (_Header1Font = new iTextSharp.text.Font(CinzelBold, 30)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         Font _Header2Font = null; |         iTextSharp.text.Font _Header2Font = null; | ||||||
|         public Font Header2Font |         public iTextSharp.text.Font Header2Font | ||||||
|         { |         { | ||||||
|             get |             get | ||||||
|             { |             { | ||||||
|                 return _Header2Font ?? (_Header2Font = new iTextSharp.text.Font(CinzelRegular, 25)); |                 return _Header2Font ?? (_Header2Font = new iTextSharp.text.Font(CinzelRegular, 25)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         Font _Header3Font = null; |         iTextSharp.text.Font _Header3Font = null; | ||||||
|         public Font Header3Font |         public iTextSharp.text.Font Header3Font | ||||||
|         { |         { | ||||||
|             get |             get | ||||||
|             { |             { | ||||||
|                 return _Header3Font ?? (_Header3Font = new iTextSharp.text.Font(CinzelRegular, 20)); |                 return _Header3Font ?? (_Header3Font = new iTextSharp.text.Font(CinzelRegular, 20)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         Font _Header4Font = null; |         iTextSharp.text.Font _Header4Font = null; | ||||||
|         public Font Header4Font |         public iTextSharp.text.Font Header4Font | ||||||
|         { |         { | ||||||
|             get |             get | ||||||
|             { |             { | ||||||
|                 return _Header4Font ?? (_Header4Font = new iTextSharp.text.Font(CinzelRegular, 18)); |                 return _Header4Font ?? (_Header4Font = new iTextSharp.text.Font(CinzelRegular, 18)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         Font _Header5Font = null; |         iTextSharp.text.Font _Header5Font = null; | ||||||
|         public Font Header5Font |         public iTextSharp.text.Font Header5Font | ||||||
|         { |         { | ||||||
|             get |             get | ||||||
|             { |             { | ||||||
|                 return _Header5Font ?? (_Header5Font = new iTextSharp.text.Font(CinzelRegular, 16)); |                 return _Header5Font ?? (_Header5Font = new iTextSharp.text.Font(CinzelRegular, 16)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         Font _Header6Font = null; |         iTextSharp.text.Font _Header6Font = null; | ||||||
|         public Font Header6Font |         public iTextSharp.text.Font Header6Font | ||||||
|         { |         { | ||||||
|             get |             get | ||||||
|             { |             { | ||||||
|  | @ -150,8 +158,8 @@ namespace AideDeJeu.Pdf | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|         Font _ParagraphFont = null; |         iTextSharp.text.Font _ParagraphFont = null; | ||||||
|         Font ParagraphFont |         iTextSharp.text.Font ParagraphFont | ||||||
|         { |         { | ||||||
|             get |             get | ||||||
|             { |             { | ||||||
|  | @ -295,18 +303,18 @@ namespace AideDeJeu.Pdf | ||||||
| 
 | 
 | ||||||
|         private Phrase Render(HeadingBlock block) |         private Phrase Render(HeadingBlock block) | ||||||
|         { |         { | ||||||
|             var fonts = new Font[] { Header1Font, Header2Font, Header3Font, Header4Font, Header5Font, Header6Font }; |             var fonts = new iTextSharp.text.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 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]); |             return CreateFormatted(block.Inline, fonts[block.Level - 1], 0, colors[block.Level - 1]); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         private Phrase Render(ParagraphBlock block) |         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)); |             //_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(); |             var phrase = new Phrase(); | ||||||
|             foreach (var inline in inlines) |             foreach (var inline in inlines) | ||||||
|  | @ -322,7 +330,7 @@ namespace AideDeJeu.Pdf | ||||||
|             } |             } | ||||||
|             return phrase; |             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) |             switch (inline) | ||||||
|             { |             { | ||||||
|  | @ -332,11 +340,11 @@ namespace AideDeJeu.Pdf | ||||||
|                         new Chunk() |                         new Chunk() | ||||||
|                         { |                         { | ||||||
|                             Content = literal.Content.Text.Substring(literal.Content.Start, literal.Content.Length), |                             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: |                 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)); |                     var espans = emphasis.SelectMany(x => CreateChunks(x, fontFamily, childStyle, fontColor)); | ||||||
|                     return espans.ToArray(); |                     return espans.ToArray(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| using AideDeJeu.Tools; | using AideDeJeu.Pdf; | ||||||
|  | using AideDeJeu.Tools; | ||||||
| using AideDeJeu.ViewModels.Library; | using AideDeJeu.ViewModels.Library; | ||||||
| using AideDeJeu.Views; | using AideDeJeu.Views; | ||||||
| using AideDeJeu.Views.Library; | using AideDeJeu.Views.Library; | ||||||
|  | @ -6,6 +7,7 @@ using AideDeJeuLib; | ||||||
| using Rg.Plugins.Popup.Services; | using Rg.Plugins.Popup.Services; | ||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
|  | using System.IO; | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Text.RegularExpressions; | using System.Text.RegularExpressions; | ||||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||||
|  | @ -152,11 +154,11 @@ namespace AideDeJeu.ViewModels | ||||||
|             var lastPage = navigationPage.Navigation.NavigationStack.LastOrDefault(); |             var lastPage = navigationPage.Navigation.NavigationStack.LastOrDefault(); | ||||||
|             var context = lastPage.BindingContext; |             var context = lastPage.BindingContext; | ||||||
|             Item item = null; |             Item item = null; | ||||||
|             if(context is ItemDetailViewModel) |             if (context is ItemDetailViewModel) | ||||||
|             { |             { | ||||||
|                 item = (context as ItemDetailViewModel).Item; |                 item = (context as ItemDetailViewModel).Item; | ||||||
|             } |             } | ||||||
|             else if(context is ItemsViewModel) |             else if (context is ItemsViewModel) | ||||||
|             { |             { | ||||||
|                 item = (context as ItemsViewModel).AllItems; |                 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<string>()); |             var result = await Application.Current.MainPage.DisplayActionSheet("Ajouter à", "Annuler", "Nouvelle liste", vm.BookmarkCollectionNames.ToArray<string>()); | ||||||
|             if (result != "Annuler") |             if (result != "Annuler") | ||||||
|             { |             { | ||||||
|                 if(result == "Nouvelle liste") |                 if (result == "Nouvelle liste") | ||||||
|                 { |                 { | ||||||
|                     int i = 1; |                     int i = 1; | ||||||
|                     while(vm.BookmarkCollectionNames.Contains(result = $"Nouvelle liste ({i})")) |                     while (vm.BookmarkCollectionNames.Contains(result = $"Nouvelle liste ({i})")) | ||||||
|                     { |                     { | ||||||
|                         i++; |                         i++; | ||||||
|                     } |                     } | ||||||
|  | @ -230,7 +232,7 @@ namespace AideDeJeu.ViewModels | ||||||
|         { |         { | ||||||
|             get |             get | ||||||
|             { |             { | ||||||
|                 return _NavigateToLinkCommand ?? (_NavigateToLinkCommand = new Command<string>(async(s) => await NavigateToLinkAsync(s))); |                 return _NavigateToLinkCommand ?? (_NavigateToLinkCommand = new Command<string>(async (s) => await NavigateToLinkAsync(s))); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -261,7 +263,7 @@ namespace AideDeJeu.ViewModels | ||||||
|                     var filterViewModel = items.GetNewFilterViewModel(); |                     var filterViewModel = items.GetNewFilterViewModel(); | ||||||
|                     var itemsViewModel = new ItemsViewModel() { AllItems = items, Filter = filterViewModel }; |                     var itemsViewModel = new ItemsViewModel() { AllItems = items, Filter = filterViewModel }; | ||||||
|                     itemsViewModel.LoadItemsCommand.Execute(null); |                     itemsViewModel.LoadItemsCommand.Execute(null); | ||||||
|                     if(!string.IsNullOrEmpty(with)) |                     if (!string.IsNullOrEmpty(with)) | ||||||
|                     { |                     { | ||||||
|                         var swith = with.Split('_'); |                         var swith = with.Split('_'); | ||||||
|                         for (int i = 0; i < swith.Length / 2; i++) |                         for (int i = 0; i < swith.Length / 2; i++) | ||||||
|  | @ -349,5 +351,22 @@ namespace AideDeJeu.ViewModels | ||||||
|             return result; |             return result; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         private Command<string> _GeneratePDFCommand = null; | ||||||
|  |         public Command<string> GeneratePDFCommand | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 return _GeneratePDFCommand ?? (_GeneratePDFCommand = new Command<string>(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<string>() { markdown }, stream); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -14,6 +14,7 @@ | ||||||
|         </ResourceDictionary> |         </ResourceDictionary> | ||||||
|     </ContentPage.Resources> |     </ContentPage.Resources> | ||||||
|     <ContentPage.ToolbarItems> |     <ContentPage.ToolbarItems> | ||||||
|  |         <ToolbarItem Name="Print" Text="Générer un PDF" Order="Primary" Icon="round_star.png" Command="{Binding Main.Navigator.GeneratePDFCommand}" CommandParameter="{Binding Item.Markdown}" /> | ||||||
|         <ToolbarItem Name="AddToFavorites" Text="Ajouter aux favoris" Order="Primary" Icon="round_star.png" Command="{Binding Main.Navigator.AddToFavoritesCommand}" /> |         <ToolbarItem Name="AddToFavorites" Text="Ajouter aux favoris" Order="Primary" Icon="round_star.png" Command="{Binding Main.Navigator.AddToFavoritesCommand}" /> | ||||||
|     </ContentPage.ToolbarItems> |     </ContentPage.ToolbarItems> | ||||||
|     <Grid> |     <Grid> | ||||||
|  |  | ||||||
|  | @ -17,6 +17,7 @@ | ||||||
|         </ResourceDictionary> |         </ResourceDictionary> | ||||||
|     </ContentPage.Resources> |     </ContentPage.Resources> | ||||||
|     <ContentPage.ToolbarItems> |     <ContentPage.ToolbarItems> | ||||||
|  |         <ToolbarItem Name="Print" Text="Générer un PDF" Order="Primary" Icon="round_star.png" Command="{Binding Main.Navigator.GeneratePDFCommand}" CommandParameter="{Binding BindingContext.Items.Markdown, Source={x:Reference This}}" /> | ||||||
|         <ToolbarItem Name="AddToFavorites" Text="Ajouter aux favoris" Order="Primary" Icon="round_star.png" Command="{Binding Main.Navigator.AddToFavoritesCommand}" /> |         <ToolbarItem Name="AddToFavorites" Text="Ajouter aux favoris" Order="Primary" Icon="round_star.png" Command="{Binding Main.Navigator.AddToFavoritesCommand}" /> | ||||||
|     </ContentPage.ToolbarItems> |     </ContentPage.ToolbarItems> | ||||||
|     <Grid> |     <Grid> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yan Maniez
						Yan Maniez