为什么此PDF文件中的图像在某些查看器中会损坏?

问题描述 投票:0回答:1

我们正在使用PDFsharp从文件夹中收集图像集并将其放入PDF文件,每页一张图像。对于这组特定的图像,在某些查看器中打开时,生成的PDF文档似乎已损坏... Chrome损坏,Adobe Reader损坏,Edge完全放弃,但是Firefox实际上正确呈现。 >

这里是相关代码:

public static List<string> ImageExtensions()
{
    return new List<string>() { ".tif", ".tiff", ".png", ".jpg", ".jpeg", ".gif" };
}

public void Convert()
{
    PdfDocument doc = new PdfDocument();

    foreach(string fPath in FilePaths)
    {
        string ext = Path.GetExtension(fPath);
        if (ImageExtensions().Contains(ext))
            AddImageToPDF(fPath, ref doc);
    }
    try
    {
        doc.Save(OutputFilePath);
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }
    doc.Close();
    doc.Dispose();            
}

private void AddImageToPDF(string imagePath, ref PdfDocument doc)
{
    Image MyImage = Image.FromFile(imagePath);
    AddImageToPDF(MyImage, ref doc);
}

private void AddImageToPDF(Image image, ref PdfDocument doc)
{
    try
    {
        int numPages = doc.Pages.Count;
        using (Image MyImage = image)
        {
            for (int _pageIndex = 0; _pageIndex < MyImage.GetFrameCount(FrameDimension.Page); _pageIndex++)
            {
                MyImage.SelectActiveFrame(FrameDimension.Page, _pageIndex);

                XImage img = XImage.FromGdiPlusImage(MyImage);
                img.Interpolate = true;

                var page = new PdfPage() { Orientation = img.PixelWidth > img.PixelHeight ? PageOrientation.Landscape : PageOrientation.Portrait };
                doc.Pages.Add(page);

                using (var xg = XGraphics.FromPdfPage(doc.Pages[_pageIndex + numPages]))
                {
                    xg.DrawImage(img, 0, 0);
                }
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

File set A(在大多数查看器中为残破)。 File set B(适用于所有查看器)。两组都是使用完全相同的机制(Irfanview)从PNG转换的JPEG。

为什么除Firefox之外的所有查看器都呈现不正确的A,我该如何解决?

我们正在使用PDFsharp从一个文件夹中收集图像集,并将它们放入PDF文件中,每页一张图像。对于这组特定的图像,打开时生成的PDF文档似乎已损坏...

c# pdf pdfsharp
1个回答
0
投票

对于只有一帧的图像,应该使用XImage.FromFile而不是XImage.FromGdiPlusImage来解决Windows框架最新版本中的某个错误。

© www.soinside.com 2019 - 2024. All rights reserved.