Показать миниатюру OPC-файла в проводнике Windows

У меня есть OPC- файл. Работает нормально. Сейчас я пытаюсь добавить миниатюру, поэтому, когда этот файл отображается в проводнике Windows или, например, как вложение в браузере, отображается мой эскиз.

Я пытался добавить

<Relationship Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail" Target="/thumbnail.png" Id="RTN1" />

в.rels файл. Я пытался добавить JPEG вместо PNG. Я пробовал 32x32 и 64x64 размеров.

[Content_Types].xml:

<Default Extension="png" ContentType="image/png" />

или же <Default Extension="jpeg" ContentType="image/jpeg" />

Структура моего файла:

  • _rels
    • .rels
  • thumbnail.png
  • другие файлы
  • [Content_Types].xml

Пример разметки рабочего OPC-файла с миниатюрой и его структурой мне очень понравился.

РЕДАКТИРОВАТЬ 2:

Мне удалось показать эскиз, когда расширение файла "XPS".

2 ответа

Решение

Нет никакого отношения к формату OPC. В Windows есть свой способ рисования иконки для каждого расширения файла. Чтобы нарисовать конкретный значок для определенного расширения файла, вам нужно создать dll, которая реализует интерфейс IThumbnailProvider и зарегистрировать его. Больше информации здесь.

Вы можете использовать xps-IThumbnailProvider для zip-файлов, не нужно писать свой собственный!!!

Добавьте миниатюру в свой zip-файл:

Файлы не должны иметь спецификацию!!!

Попробуйте, пока ваш файл не отобразит миниатюру, если вы переименуете его в.xps

Public WriteOnly Property Thumbnail As Image
        Set(value As Image)
            If value IsNot Nothing Then
                Dim relsdir = Me.ZipArchivWriter.CreateEntry("_rels/", CompressionLevel.NoCompression)
                Using rels = Me.ZipArchivWriter.CreateEntry("_rels/.rels", CompressionLevel.Fastest).Open
                    Using w As New StreamWriter(rels, FXENCODING)
                        w.WriteLine(XMLSTART)
                        w.WriteLine("<Relationships xmlns=""http://schemas.openxmlformats.org/package/2006/relationships"">")
                        w.WriteLine("<Relationship Target=""thumbnail.png"" Id=""R1"" Type=""http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail"" />")
                        w.WriteLine("</Relationships>")
                    End Using
                End Using
                Using ct = Me.ZipArchivWriter.CreateEntry("[Content_Types].xml", CompressionLevel.Fastest).Open
                    Using w As New StreamWriter(ct, FXENCODING)
                        w.WriteLine(XMLSTART)
                        w.WriteLine("<Types xmlns=""http://schemas.openxmlformats.org/package/2006/content-types"">")
                        w.WriteLine("<Default Extension=""rels"" ContentType=""application/vnd.openxmlformats-package.relationships+xml"" />")
                        w.WriteLine("<Default Extension=""PNG"" ContentType=""image/png"" />")
                        w.WriteLine("</Types>")
                    End Using
                End Using
                Using tn = Me.ZipArchivWriter.CreateEntry(FXTHUMBNAIL, CompressionLevel.NoCompression).Open
                    value.Save(tn, ImageFormat.Png)
                End Using
            End If
        End Set
    End Property

А затем добавьте ваше расширение файла в реестр (ClassesRoot или CurrentUser):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\.frax\shellex\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}]
@="{44121072-A222-48f2-A58A-6D9AD51EBBE9}"

[HKEY_CURRENT_USER\Software\Classes\.frax\shellex\{e357fccd-a995-4576-b01f-234630154e96}]
@="{44121072-A222-48f2-A58A-6D9AD51EBBE9}"

[HKEY_CURRENT_USER\Software\Classes\.frax\shellex\PropertyHandler]
@="{45670FA8-ED97-4F44-BC93-305082590BFB}"

Это все...

Другие вопросы по тегам