2015-10-14 72 views
0

因此,我正在为UWP XAML使用Syncfusion控件,并试图将JPEG插入到我创建的PDF中,但PdfImage似乎总是返回位图。或者至少具有位图文件大小的图像。 有什么方法可以确保插入的图像是JPEG大小的?我输入的图像是以JPEG开始的。 如果我没有制作漫画(日本漫画书)的PDF文件,我会很好的使用位图,即每个漫画的大小现在在50-150MB之间。更改PDF图像类型(Syncfusion PDF)

这不是一个工作示例,但这是我现在使用的。

public async void SaveAsPdf(Stream fs, Manga manga) 
    { 
     var m = manga; 
     var c = m.Content; 

     if (fs.Length != 0) return; 
     var pdf = new PdfDocument(); 
     var pages = await GetPages(m); 
     pdf.PageSettings.SetMargins(0); 


     pdf.FileStructure.IncrementalUpdate = true; 
     pdf.EnableMemoryOptimization = true; 
     pdf.Compression = PdfCompressionLevel.Best; 


     for (var pi = 0; pi < c.ContentPages; pi++) 
     { 
      var section = pdf.Sections.Add(); 
      var mr = section.PageSettings.Margins = new PdfMargins(); 
      mr.All = 0; 
      var page = section.Pages.Add(); 
      var g = page.Graphics; 
      page.DefaultLayerIndex = 0; 
      var pu = pages[pi]; 
      var client = new HttpClient(); 
      var im = await client.GetAsync(pu); 
      var pdi = PdfImage.FromStream(im.Content.ReadAsStreamAsync().Result); 

      g.DrawImage(pdi, new PointF(0, 0), g.ClientSize); 
      await pdf.SaveAsync(fs); 
     } 
     await pdf.SaveAsync(fs); 
     pdf.DocumentInformation.Title = c.ContentName; 
     pdf.DocumentInformation.Author += string.Join(", ", c.ContentArtists.Select(x => x.Attribute)); 
     pdf.DocumentInformation.Keywords += string.Join(", ", c.ContentTags.Select(x => x.Attribute)).Replace("\"", string.Empty); 
     pdf.Save(fs); 
     pdf.Close(true); 

     var toast = Notifications.NotifyMangaDownloaded(m); 
     ToastNotificationManager.CreateToastNotifier().Show(toast); 
     fs.Dispose(); 
    } 

我会问有关内存泄漏的问题,但如果我为此发布另一篇文章,可能会最好。

在此先感谢。

(我张贴这对Syncfusion论坛,但我觉得我可能会在这里更好的响应)

回答

0

好吧,我重构一些方法和内存泄漏最终被事业。获得的经验:使用陈述是你的朋友。

要成为一个更具体一点,我刚刚创建了一个文件作为PDF的目的地,然后叫需要随意移动

using (Stream s = new FileStream(/*string*/>f.Path, FileMode.OpenOrCreate)) { await Task.Run(() => SaveAsPdf(/*StorageFile*/f, /*Manga*/m)); }

各种其他的东西,但留下的FileStream打开结束成为问题。