2016-08-02 65 views
1

我已經保存了固定文檔XPS文件,例如:保存與圖像XPS文件中的固定文檔

void SaveDocument(FixedDocument document, string filePath) 
{ 
    var xps = new XpsDocument(
     filePath, FileAccess.Write, CompressionOption.Maximum); 

    var writer = XpsDocument.CreateXpsDocumentWriter(xps); 
    writer.Write(document); 

    xps.Close(); 
} 

然後我打開XPS文件的ZIP檔案,看到我的圖片保存作爲PNG文件。 如何將圖像文件格式更改爲JPG?

+0

爲什麼要這麼做?使用XpsDocumentWriter的目的是編寫一個.xps文件,該文件已成功完成。包含在.xps文件中的圖像數據的文件類型應該完全不相關。 – Jon

+1

我需要JPG格式來減少文檔的文件大小。 – CrazyCoder

回答

1

我有同樣的問題:我的文件太大了,因爲照片被嵌入爲png而不是jpeg。我通過將所有png文件轉換爲包中的jpeg來修復它。爲了避免必須更新對圖像的引用,我保留了相同的URI,但這意味着您的jpegs的內部URI將以誤導性的「.png」結尾。顯然,如果要選擇將哪些圖像轉換爲jpeg,這會變得更加複雜。

public static void ReplacePngsWithJpegs(Package package) 
{ 
    // We're modifying the enumerable as we iterate, so take a snapshot with ToList() 
    foreach (var part in package.GetParts().ToList()) 
    { 
     if (part.ContentType == "image/png") 
     { 
      using (var jpegStream = new MemoryStream()) 
      using (var image = System.Drawing.Image.FromStream(part.GetStream())) 
      { 
       image.Save(jpegStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
       jpegStream.Seek(0, SeekOrigin.Begin); 

       // Cannot access Uri after part is removed, so store it 
       var uri = part.Uri; 

       package.DeletePart(uri); 

       var jpegPart = package.CreatePart(uri, "image/jpeg"); 
       jpegStream.CopyTo(jpegPart.GetStream()); 
      } 
     } 
    } 
} 
+0

我在一年前以類似的方式解決了這個問題,但我解析了ZIP壓縮文件。你的方式更原生,更乾淨。謝謝。 – CrazyCoder