Обработка файлов Illustrator или PDF в XAML - PullRequest
5 голосов
/ 23 августа 2010

Каковы альтернативы для обработки файлов иллюстраторов или PDF-файлов в XAML. Мой текущий рабочий процесс работает так:

  1. Открыть файл PDF в Adobe Illustrator
  2. Сохранить файл как файл .ai (Adobe Illustrator)
  3. Открыть в Expression Design
  4. Выполнить некоторую обработку, в основном разделение элементов на слои и удаление ненужных частей.
  5. Сохранить как XAML
  6. Добавить XAML в проект Blend

Моя единственная проблема в том, что таким образом текст преобразуется в пути. Я хотел бы также сохранить свой текст в XAML вместо путей.

Есть ли другой способ сделать это, чтобы я сохранил текст? Любые другие инструменты?

Ответы [ 4 ]

4 голосов
/ 27 декабря 2010

Я думаю, что вы хотите, чтобы элементы Glyphs вместо Paths. Проблема в том, что элементы Glyphs требуют, чтобы вы указали URI файла шрифта. Кроме того, элементы Glyphs ссылаются на глифы по их index в файл шрифта (может случиться так, что преобразователь, который генерирует элементы Glyphs - как Microsoft XPS Document Writer - использует индексы в файлах подмножеств шрифта: поэтому эти индексы могут не быть правильными индексами для тех же символов, которые определены в исходном файле шрифта). Мне удалось «решить» эту проблему двумя способами с помощью моих собственных инструментов преобразования PDF в XAML.

1. подход : встроить файл поднабора шрифтов, закодированный в BASE64, в сгенерированный код XAML и заставить приложение реализовать класс, который при загрузке извлекает и декодирует встроенный файл поднабора шрифтов во временное местоположение и передает действительный URI в этот временный файл обратно в загрузчик XAML.

или 2. подход : большинство файлов шрифтов уже установлено вместе с моим приложением и, опять же, добавляется некоторая поддержка моим приложением, которая заменяет имя шрифта на URI в файле установленного шрифта при загрузке кода XAML. Проблема с этим вторым подходом состоит в том, что индексы глифа должны быть правильно сопоставлены с установленным файлом шрифта, что может быть не совсем простым делом. (Вы можете найти ссылку на файл примера, который был сгенерирован для этого способа загрузки в моем блоге: в частности, взгляните на файл truncatedcone-xaml.txt )

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

Я рассматриваю реализацию третьего подхода : это будет заключаться в создании схемы для каждого глифа, который используется только один раз , а затем добавлении поддержки моим приложением для преобразования и Расположите эти контуры глифов таким образом, чтобы они были аналогичны действиям элементов Glyph, которые в противном случае пришлось бы генерировать. Преимущество будет состоять в том, что сгенерированный XAML будет все еще относительно небольшим (сравнимым со вторым подходом, описанным выше) без необходимости установки соответствующих файлов шрифтов вместе с приложением и без необходимости сопоставлять индексы глифов из файла поднабора с установленным шрифтом. файл. Причина, по которой я еще не пытался реализовать это всерьез, двояка: во-первых, мой нынешний (второй) подход уже очень хорошо работает для того, что мне сейчас нужно; во-вторых, при использовании этого третьего подхода могут возникнуть проблемы с производительностью, связанные с загрузкой и / или рендерингом.

2 голосов
/ 03 сентября 2010

Существует (бесплатный) плагин Adobe Illustrator для экспорта в XAML. Не уверен, что это именно то, что вы ищете, хотя.

Найти в http://www.mikeswanson.com/XAMLExport/

1 голос
/ 31 декабря 2010

@ gyurisc: сохранение файла шрифта должно работать, но сохранение текста может оказаться проблемой, потому что, как видите, глифы не являются символами .Возможно, вы могли бы выяснить символ, изучив файл шрифта, частью которого является данный глиф, но это потребовало бы анализа файла шрифта.Если вам не повезло, ваш конвертер PDF в XPS даже не содержит достаточно информации в файлах подмножеств шрифтов, чтобы выяснить символ, который представляет данный глиф (очень вероятно).

Например: если я конвертирую файл PDFв XPS с помощью Microsoft XPS Document Writer, а затем попробуйте выбрать фрагмент текста из этого документа XPS, я могу (только очевидно) скопировать его в буфер обмена.Однако, если я вставлю его обратно в документ Word, я получу мусор.Принимая во внимание, что если я выделю этот такой же фрагмент текста в исходном документе PDF и вставлю его в тот же документ Word, я получу разумно значимый текст.Таким образом, Microsoft XPS Document Writer, очевидно, не заботится о интерпретации «прогона глифов» как текста, и поэтому мне кажется весьма вероятным, что связь между индексами глифов, которые можно найти в сгенерированном коде XPS, и символами, которые они подразумеваютпредставлять уже сломан в этот момент.(Но, по общему признанию, это только предположение.)

Представление text (в отличие от серии глифов) будет элементом TextBlock в XAML, я полагаю.Однако я предполагаю, что типичный конвертер PDF в XPS вряд ли будет генерировать элементы TextBlock.XPS в основном предназначен для визуализации - на экране или на бумаге - он не предлагает себя в качестве формата файла, который особенно подходит для обмена данными (обмен текстом в вашем случае).

1 голос
/ 29 декабря 2010

Ну, файл XPS на самом деле является файлом ZIP.Поэтому, если вы откроете его с помощью ZIP-архиватора или переименуете его расширение в ZIP, вы сможете увидеть, что находится внутри.Он уже содержит страницы в виде кода XAML (эти файлы имеют форму [pagenumber] .fpage).Однако этот код XAML может ссылаться на другие файлы (например, растровые изображения и файлы подмножеств шрифтов, обычно это файлы odttf - в основном зашифрованные файлы истинного типа), которые также включены в этот ZIP-архив.Это означает, что код XAML, который вы найдете в документе XPS, не может быть непосредственно использован как чистый XAML в вашем приложении.Я написал сценарии Python для преобразования XAML, взятого из документов XPS (созданного Microsoft XPS Document Writer), для получения файлов XAML, которые моё приложение может загрузить (см. Подходы 1 и 2 выше).Я мог бы выслать вам копии этих сценариев на Python (они не особо хороши, и для меня это не проблема, так как я сейчас использую другой подход для преобразования PDF-файлов в XAML).

...