Невозможно открыть сгенерированный QR-код SVG в Adobe Illustrator

Я генерирую QR-код, используя php-пакет composer endroid/qr-code.

Это так здорово, вот мои настройки PHP для генерации SVG.

// create QR code

$qrCode = QrCode::create($url)
            ->setEncoding(new Encoding('UTF-8'))
            ->setErrorCorrectionLevel(new ErrorCorrectionLevelLow())
            ->setSize(210)
            ->setMargin(0)
            ->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
            ->setForegroundColor(new Color(0,0,0))
            ->setBackgroundColor(new Color(255,255,255));  

Который выводит этот потрясающий QR-код в формате SVG... (немного уменьшен для демонстрации)

Запустите фрагмент ниже, чтобы увидеть код SVG, работающий в HTML...

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="210px" height="210px" viewBox="0 0 210 210">
  <defs>
    <rect id="block" width="30" height="30" fill="#000000" />
  </defs>
  <rect x="0" y="0" width="210" height="210" fill="#ffffff" />
  <use x="0" y="0" href="#block"></use>
  <use x="30" y="0" href="#block"></use>
  <use x="60" y="0" href="#block"></use>
  <use x="90" y="0" href="#block"></use>
  <use x="120" y="0" href="#block"></use>
  <use x="150" y="0" href="#block"></use>
  <use x="180" y="0" href="#block"></use>
  <use x="0" y="30" href="#block"></use>
  <use x="180" y="30" href="#block"></use>
  <use x="0" y="60" href="#block"></use>
  <use x="60" y="60" href="#block"></use>
  <use x="90" y="60" href="#block"></use>
  <use x="120" y="60" href="#block"></use>
  <use x="180" y="60" href="#block"></use>
  <use x="0" y="90" href="#block"></use>
  <use x="60" y="90" href="#block"></use>
  <use x="90" y="90" href="#block"></use>
  <use x="120" y="90" href="#block"></use>
  <use x="180" y="90" href="#block"></use>
  <use x="0" y="120" href="#block"></use>
  <use x="60" y="120" href="#block"></use>
  <use x="90" y="120" href="#block"></use>
  <use x="120" y="120" href="#block"></use>
  <use x="180" y="120" href="#block"></use>
  <use x="0" y="150" href="#block"></use>
  <use x="180" y="150" href="#block"></use>
  <use x="0" y="180" href="#block"></use>
  <use x="30" y="180" href="#block"></use>
  <use x="60" y="180" href="#block"></use>
  <use x="90" y="180" href="#block"></use>
  <use x="120" y="180" href="#block"></use>
  <use x="150" y="180" href="#block"></use>
  <use x="180" y="180" href="#block"></use>
</svg>

Но нет ничего, что я не перепробывал, чтобы мои QR-коды открывались в иллюстраторе.

Этот код работает в моем предварительном просмотре IDE, предварительном просмотре Mac, он отлично открывается в Chrome и отлично отображается при использовании на html-страницах, но не открывается в Illustrator.
Когда я открываю в Illustrator, он показывает просто белое поле.

Почему этот код SVG не будет работать в Adobe Illustrator?
Как исправить код SVG для работы в Illustrator?

Я использую последнюю версию Adobe Illustrator 28.0.

Свободный перевод вопроса Cannot open generated QR code SVG in Adobe Illustrator от участника @joshmoto.


Ответы (1 шт):

Автор решения: Alexandr_TT

Похоже, Adobe Illustrator еще не поддерживает атрибуты href и вместо него требуется xlink:href.

При внесении этого изменения вам также потребуется добавить атрибут xmlns:xlink="http://www.w3.org/1999/xlink" к корневому элементу.

На самом деле я думаю, что код, который вы используете для создания выходных данных, содержит команду Force_xlink_href, поэтому вам следует просто использовать ее, и все будет сделано за вас.

$builder->writerOptions([
    SvgWriter::WRITER_OPTION_FORCE_XLINK_HREF => true
]);   

Свободный перевод ответа от участника @Robert Longson.

→ Ссылка