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.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) | ||||
|                 { | ||||
|  |  | |||
|  | @ -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<MainViewModel>(); | ||||
|             DependencyService.Register<PdfService>(); | ||||
|             DependencyService.Register<BookmarksViewModel>(); | ||||
|             DependencyService.Register<StoreViewModel>(); | ||||
|             DependencyService.Register<PlayerCharacterEditorViewModel>(); | ||||
|  |  | |||
|  | @ -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<PdfService>(); | ||||
|             } | ||||
|         } | ||||
|         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(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -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<string>()); | ||||
|             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<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 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++) | ||||
|  | @ -349,5 +351,22 @@ namespace AideDeJeu.ViewModels | |||
|             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> | ||||
|     </ContentPage.Resources> | ||||
|     <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}" /> | ||||
|     </ContentPage.ToolbarItems> | ||||
|     <Grid> | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ | |||
|         </ResourceDictionary> | ||||
|     </ContentPage.Resources> | ||||
|     <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}" /> | ||||
|     </ContentPage.ToolbarItems> | ||||
|     <Grid> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yan Maniez
						Yan Maniez