Неправильное позиционирование и масштабирование SVG-изображения на PdfCanvas - PullRequest
0 голосов
/ 26 апреля 2019

Мне недавно пришлось перейти с iTextSharp на iText 7 из-за поддержки SVG. Что я обнаружил, так это то, что масштабирование и расположение векторного изображения поверх PdfCanvas кажутся мне совершенно не подходящими по сравнению с определением внутри векторного изображения.

Это моя функция, которая добавляет векторное изображение на холст:

private static void AddImageToCanvas(Document document, DocumentFileModel documentfile, ImageData image, string stampdata)
{
    var pageSize = new Rectangle(PageSize.A4.GetWidth(), PageSize.A4.GetHeight());
    var docpage = document.GetPdfDocument().AddNewPage(new PageSize(pageSize));
    var canvas = new PdfCanvas(docpage);
    canvas.AddImage(image, pageSize, false);
    SvgConverter.DrawOnCanvas(stampdata, canvas);
    if (image.GetWidth() > image.GetHeight())
        docpage.SetRotation(90);
}

stampdata содержит данные векторного изображения в виде строки:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="ansvgroot" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ansvg="http://dev.elform.net/public/ansvg" viewBox="0 0 1015 276" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <style type="text/css">
      text {
        text-antialiasing: true;
        text-rendering: geometricPrecision;
      }
      image {
        image-rendering: optimizeQuality;
      }
    </style>
  </defs>
  <g transform="scale(0.05)">
    <g ansvg:layer="0" ansvg:type="TextStamp" ansvg:id="e7c69dd4-aecc-4220-9dae-d84f6b076f51">
      <text x="1423" y="924" style="font-family:'Microsoft Sans Serif',Geneva,sans-serif; font-size:220px; fill:#0000ff; white-space: nowrap" xml:space="preserve">Info: JPG</text>
    </g>
  </g>
</svg>

Поскольку это изображение будет создано автоматически, я не могу контролировать его структуру или содержимое.

Добавление изображения на холст выглядит так:

это неправильно

тогда как он должен выглядеть следующим образом (это из веб-интерфейса, где векторное изображение добавляется как оверлей к элементу div, содержащему фоновое изображение)

это правильно

Я что-то упустил? Кто-нибудь может направить меня, чтобы оно выглядело как второе изображение, при создании PDF и добавлении векторного изображения на холст? Кроме того, есть идеи, почему цвет вдруг стал черным?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...