Дизайнер отчетов Visual Studio: встроенный шрифт

У меня есть специальный шрифт: EAN-13, и мне нужно вставить штрих-код в мой отчет, поэтому я понятия не имею, как я могу использовать для этого встроенный шрифт.

Я могу загрузить свой шрифт во время выполнения:

    private static PrivateFontCollection Pfc;
    private static async Task<FontFamily> EAN13()
    {
        if (Pfc == null)
        {
            Pfc = new PrivateFontCollection();

            Stream fontStream = typeof(DefferedPurchase)
                .Assembly
                .GetManifestResourceStream("ActionsC.Resources.EAN-13.ttf");

            byte[] fontdata = new byte[fontStream.Length];
            await fontStream.ReadAsync(fontdata, 0, (int)fontStream.Length);
            fontStream.Close();
            unsafe
            {
                fixed (byte* pFontData = fontdata)
                {
                    Pfc.AddMemoryFont((IntPtr)pFontData, fontdata.Length);
                }
            }
        }
        return Pfc.Families.FirstOrDefault();
    }

Но как я могу apply соединить его с этим rdlc xml-узлом?

      <Textbox Name="textbox19">
        <CanGrow>true</CanGrow>
        <ToggleImage>
          <InitialState>true</InitialState>
        </ToggleImage>
        <KeepTogether>true</KeepTogether>
        <Paragraphs>
          <Paragraph>
            <TextRuns>
              <TextRun>
                <Value>=Parameters!BarCode.Value</Value>
                <Style>
                  <FontFamily><!--     


                        see here       


                   --></FontFamily>
                  <FontSize>12pt</FontSize>
                </Style>
              </TextRun>
            </TextRuns>
            <Style />
          </Paragraph>
        </Paragraphs>
        <rd:DefaultName>textbox1</rd:DefaultName>
        <Top>13.4995cm</Top>
        <Left>21.53213cm</Left>
        <Height>3.10467cm</Height>
        <Width>5.6385cm</Width>
        <ZIndex>30</ZIndex>
        <Style>
          <PaddingLeft>2pt</PaddingLeft>
          <PaddingRight>2pt</PaddingRight>
          <PaddingTop>2pt</PaddingTop>
          <PaddingBottom>2pt</PaddingBottom>
        </Style>
      </Textbox>

Любые идеи?

Открытое окно шрифта: введите здесь описание изображения


person Community    schedule 19.04.2017    source источник


Ответы (3)


Как ни странно, лучший способ получить штрих-код в PDF-файле — часто использовать растровое изображение. Как правило, они меньше для хранения в результирующем PDF-файле, чем эквивалентное решение на основе векторов или шрифтов, и большинство штрих-кодов по определению сосредоточены вокруг одной ширины модуля, которая может быть непосредственно представлена ​​​​как один пиксель.

SSRS и RDLC поддерживают этот рабочий процесс, но на экране он выглядит ужасно, так как для экрана используется другой режим интерполяции, чем для печати и экспорта в PDF.

Для создания изображения я использую Zen Barcode Rendering Framework, который под лицензией безвозмездной лицензии, но теория в равной степени применима к любому средству визуализации штрих-кода.

Я использую https://gist.github.com/mgaffigan/1ff9d201f5c700e12aee1846aa9d00a2, чтобы разрешить динамическое отображение штрих-кода:

' Make sure to use EscapeDataString if parameter is not URL safe
=Parameters!BarcodeServiceUri.Value & "2d/datamatrix?moduleSize=2&data=" & Parameters!ToteID.Value

Результирующее изображение:

Code128:
code128 пример
Матрица данных:
пример матрицы данных

Как это выглядит в дизайнере:
Из конструктора SSRS

Пример PDF из «Экспорт PDF», демонстрирующий правильное изменение размера:

Снимок экрана со штрих-кодом, размер которого был правильно измененвведите здесь описание изображения

То же самое происходит при печати.

person Mitch    schedule 17.06.2017
comment
Этот ответ содержит достаточно подробностей! - person Lennart Rolland; 18.06.2017
comment
@ Митч, у тебя лучшая альтернатива! но все равно не отвечаю. - person ; 19.06.2017

Чтобы шрифт вообще можно было встроить, он должен соответствовать следующим условиям:

  • Права на встраивание шрифта предоставляются автором шрифта. Установленные шрифты включают свойство, указывающее, намеревается ли автор шрифта разрешить встраивание шрифта в документ. Если значение свойства равно EMBED_NOEMBEDDING, шрифт не внедряется в файл PDF. Дополнительные сведения см. в разделе «TTGetEmbeddingType» на сайте msdn.microsoft.com.
  • Шрифт TrueType.

Если одно или несколько из этих условий не выполняются, вы не сможете встроить шрифт так, как вам хотелось бы. И я полагаю, что ваш единственный другой вариант - это код во время выполнения, как вы уже обнаружили.

Если оба условия соблюдены, то все достаточно просто. Все, что вам нужно сделать, это установить этот шрифт на сервере отчетов.
Когда любой пользователь экспортирует отчет в PDF, он автоматически встраивается в документ PDF, а шрифт отображается правильно. Так вы избавите себя от необходимости устанавливать этот шрифт на клиентские компьютеры.

Очевидно, что на компьютере, разрабатывающем отчет, также должен быть установлен этот шрифт. Вы просто выбираете шрифт, как показано на собственном снимке экрана, который должен зарегистрировать его в файле .rdlc по имени шрифта и другим необходимым свойствам.


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

К сожалению, SSRS (rdlc) недостаточно развит, чтобы сделать это только с помощью узлов xml.

Статью официальной документации MSDN можно найти здесь

person Oceans    schedule 14.06.2017
comment
это настольное приложение. И я тоже не знаю, как этого добиться в данный момент. Ваш ответ - это пара вещей, которые объяснили, как это работает для людей, которые не в теме. - person ; 14.06.2017
comment
Что ж, ответ заключается в том, что внедрить будет невозможно, если шрифт не TrueType или встраивание не разрешено автором. Я знаю, возможно, это не то, что вы хотели услышать, но это то, что есть. - person Oceans; 14.06.2017
comment
ну, шрифт является TrueType и бесплатен для использования кем угодно и где угодно. - person ; 15.06.2017

Очень маленький ответ здесь Динамическое изменение отчета rdlc (С#)

В ответ от Лоик Хэй

Stream st = this.GetType().Assembly.GetManifestResourceStream(_NomRessourceRpt);

// convert stream to string
StreamReader reader = new StreamReader(st);
string reportDef = reader.ReadToEnd();

XmlDocument document = new XmlDocument();
document.LoadXml(reportDef);

Здесь есть ресурс о генерации штрих-кода

Шаг 1: Чтобы ознакомиться с отчетом Basic of RDLS, перейдите по этой ссылке:

Шаг 2: Загрузите шрифт штрих-кода 3 из 9 с этого сайта:

Шаг 3: Затем перейдите на страницу отчета rdlc:

Шаг 4: Щелкните правой кнопкой мыши выражение (текстовое поле), которое вы хотите сделать barcode->select->"TextBox Properties"

Шаг 5: Свойства текстового поля-> Шрифт-> Выберите тип шрифта-> ОК

Шаг 6: Затем щелкните правой кнопкой мыши выражение (текстовое поле), которое вы хотите сделать штрих-кодом-> выберите-> «Выражение».

Шаг 7: Добавьте «*» к значению выражения и нажмите «ОК».

Шаг 8: Запустите приложение, и вы увидите свой штрих-код в своем отчете, как показано ниже.

Вышеупомянутый контент скопирован именно с упомянутого сайта, и я никоим образом не связан с ними.

Если вы посетите сайт, у них также есть описания изображений и ссылки на некоторые другие ресурсы.

person Sagar V    schedule 14.06.2017
comment
Итак, вместо использования дизайнера rdlc - отредактируйте XML-файл результата, чтобы вставить собственный шрифт, я правильно понимаю? - person ; 14.06.2017
comment
Я предлагаю вам прочитать 2 ссылки, которые я предоставил, и принять мудрое решение. Если для вас это кажется несложной задачей, то дерзайте @anete.anetes - person Sagar V; 14.06.2017
comment
Это известная проблема, о которой сообщалось несколько лет назад. Я нашел новый ресурс. ждать. я обновлю свой ответ - person Sagar V; 15.06.2017
comment
@ anete.anetes, пожалуйста, проверьте обновленный ответ. Это может помочь вам - person Sagar V; 15.06.2017