Невозможно открыть сгенерированный 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 шт):
Похоже, 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.