将带有图像的FixedDocument保存到XPS文件

时间:2016-08-02 14:37:39

标签: c# image format xps fixeddocument

我已将 FixedDocument 保存到 XPS 文件,例如:

quizzes_controller

然后我将XPS文件作为ZIP存档打开,并看到我的图像保存为PNG文件。 如何将图像文件格式更改为JPG?

1 个答案:

答案 0 :(得分: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());
            }
        }
    }
}