Разбитые изображения, извлеченные из библиотеки PdfSharp C # - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь выполнить пример программы из библиотеки PDFSharp.Я уже предоставил ссылки в проекте.

ПРОБЛЕМА: Код выполняется без ошибок, и я вижу, что метод ExportJpegImage() вызывается 7 раз (это число изображений в pdf). Но когда я пытаюсь открыть изображения, написанные программой (в .jpeg), Windows не может открыть их.

static void Main(string[] args)
    {
        Console.WriteLine("Starting PDF Sharp sample program...");

        const string filename = @"D:/Test/test.pdf";

        PdfDocument document = PdfReader.Open(filename);

        int imageCount = 0;
        // Iterate pages
        foreach (PdfPage page in document.Pages)
        {
            // Get resources dictionary
            PdfDictionary resources = page.Elements.GetDictionary("/Resources");
            if (resources != null)
            {
                // Get external objects dictionary
                PdfDictionary xObjects = resources.Elements.GetDictionary("/XObject");
                if (xObjects != null)
                {
                    ICollection<pdfitem> items = xObjects.Elements.Values;
                    // Iterate references to external objects
                    foreach (PdfItem item in items)
                    {
                        PdfReference reference = item as PdfReference;
                        if (reference != null)
                        {
                            PdfDictionary xObject = reference.Value as PdfDictionary;
                            // Is external object an image?
                            if (xObject != null && xObject.Elements.GetString("/Subtype") == "/Image")
                            {
                                ExportJpegImage(xObject, ref imageCount);
                            }
                        }
                    }
                }
            }
        }

    }

 static void ExportJpegImage(PdfDictionary image, ref int count)
    {
        // Fortunately JPEG has native support in PDF and exporting an image is just writing the stream to a file.
        byte[] stream = image.Stream.Value;
        FileStream fs = new FileStream(String.Format(@"D:\Test\Image{0}.jpeg", count++), FileMode.Create, FileAccess.Write);
        BinaryWriter bw = new BinaryWriter(fs);
        bw.Write(stream);
        bw.Close();
    }

1 Ответ

0 голосов
/ 10 мая 2019

Пожалуйста, прочтите примечание, предшествующее этому пример :

Примечание: В этом фрагменте показано, как экспортировать изображения JPEG из файла PDF. PDFsharp не может конвертировать страницы PDF в файлы JPEG. Этот образец не обрабатывает изображения, отличные от JPEG . Он (пока) не обрабатывает изображения JPEG, которые были закодированы в плоском формате.

Существует несколько различных форматов для изображений, отличных от JPEG в PDF. Они не поддерживаются этим простым примером и требуют нескольких часов кодирования, но это оставлено читателю в качестве упражнения.

Таким образом, изображения, которые вы хотите извлечь из вашего PDF, скорее всего, просто не будут вставлены как изображения JPEG (по крайней мере, без дальнейшей фильтрации, такой как дефляция). Чтобы преобразовать эти данные во что-то, с чем может справиться обычный просмотрщик изображений, вам, скорее всего, придется потратить несколько часов на кодирование .

...