Штрих-коды в отчетах Crystal - PullRequest
       90

Штрих-коды в отчетах Crystal

0 голосов
/ 16 декабря 2018

Я не могу печатать штрих-коды в Crystal Отчет ... Мне нужно распечатать этот штрих-код

enter image description here

В моем crystal Сообщить, что эта формула связана с field

BarcodeEAN13({@x},"")

, а @x равен

{TabA.cod_ean13}

, что является полем varchar в моей БД, таблица TabA

Теперь мой метод c # устанавливает datasource для отчета Crystal и экспортирует в PDF.Код следующий:

string root_path = ConfigurationManager.AppSettings["Percorso_RPT"];
            string spath = Utility.PathCombine(root_path, cod_etic + "D.rpt");

            ReportDocument cryRpt = new ReportDocument();
            cryRpt.Load(spath);

            List<DatiStampa> lista = new List<DatiStampa>();
            lista.Add(ds);

            cryRpt.SetDataSource(Utility.DataTableFromIEnumerable(lista));

            //export in pdf     
            cryRpt.ExportToDisk(ExportFormatType.PortableDocFormat, path);
            cryRpt.Close();
            cryRpt.Dispose();

Вот что я получаю в barcode field

enter image description here

Я уже пыталсяизменить шрифт, но делать нечего ...

Я что-то не так делаю?

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

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

0 голосов
/ 18 декабря 2018

EAN-13 Штрих-коды названы таким образом, не потому, что они поддерживают 13 цифр, а потому, что есть 12 цифр данных и 1 символ контрольной суммы.Независимо от того, что говорит текст под первым примером штрих-кода, данные, возвращаемые сканером, представляют собой «8009197111119».Это имеет смысл, поскольку контрольная сумма для «800919711111» равна «9».

«80» означает, что код EAN13 присвоен итальянской компании, чья балансовая единица, вероятно, «09197».Следующие пять символов «11111» - это код продукта.

Штрих-коды EAN аналогичны тем, что в США называют символами UPC, и их очень трудно реализовать в качестве шрифта.Сегмент символов для чисел в первой половине всего символа чёрно-белый, противоположный символам во второй половине.Вот почему любое программное обеспечение, генерирующее коды символов для создания штрих-кодов, похоже, использует «буквы» для первой половины и правильные последние 6 цифр чисел для второй половины.

Это в сочетании с довольно сложнымАлгоритм, необходимый для генерации конечной цифры контрольной суммы, делает невозможным генерирование штрих-кодов EAN-13 без некоторого кода для управления любым шрифтом, который вы используете.Второе изображение, которое вы прикрепили выше, не похоже на шрифт EAN и больше похоже на Code39.Шрифт имеет неправильный размер и обрезается, независимо от того.

Я плохо разбираюсь в c #, поэтому я сделал небольшую утилиту, которая может помочь проверить ваш код на JavaScript.

// The MIT License (MIT)

// Copyright (c) 2018, Notionovus, LLC.

// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.

// Generic arrays for drawing 5-bit graphics. Building blocks for all barcode symbologies
// Painstakingly derived gobblety-goop, but essentially the two middle sections of image data unique to each graphic
var array5bit_A = new Array ( 'f//AAAAAAAAAAAAAAAAAAAA', 'f//AAAAAAAAAAAAAAAAAAAB', 'f//AAAAAAAAAAAAAAEAAAD/',
 'f//AAAAAAAAAAAAAAEAAAAA', 'f//AAAAAAAAAQAAAP8AAAAA', 'f//AAAAAAAAAQAAAP8AAAAB', 'f//AAAAAAAAAQAAAAAAAAD/',
 'f//AAAAAAAAAQAAAAAAAAAA', 'f//AAABAAAA/wAAAAAAAAAA', 'f//AAABAAAA/wAAAAAAAAAB', 'f//AAABAAAA/wAAAAEAAAD/',
 'f//AAABAAAA/wAAAAEAAAAA', 'f//AAABAAAAAAAAAP8AAAAA', 'f//AAABAAAAAAAAAP8AAAAB', 'f//AAABAAAAAAAAAAAAAAD/',
 'f//AAABAAAAAAAAAAAAAAAA', 'QD/AAD/AAAAAAAAAAAAAAAA', 'QD/AAD/AAAAAAAAAAAAAAAB', 'QD/AAD/AAAAAAAAAAEAAAD/',
 'QD/AAD/AAAAAAAAAAEAAAAA', 'QD/AAD/AAAAAQAAAP8AAAAA', 'QD/AAD/AAAAAQAAAP8AAAAB', 'QD/AAD/AAAAAQAAAAAAAAD/',
 'QD/AAD/AAAAAQAAAAAAAAAA', 'QD/AAAAAAAA/wAAAAAAAAAA', 'QD/AAAAAAAA/wAAAAAAAAAB', 'SL/AADeAAAA/gAAAAIAAAD+',
 'QD/AAAAAAAA/wAAAAEAAAAA', 'QD/AAAAAAAAAAAAAP8AAAAA', 'QD/AAAAAAAAAAAAAP8AAAAB', 'QD/AAAAAAAAAAAAAAAAAAD/',
 'QD/AAAAAAAAAAAAAAAAAAAA');
var array5bit_B = new Array ( 'US0CAuSD38g', 'UUYCA7QBErs', 'ajEDAm49ReY', 'UUoCA+juogg', 'bjEDAjQrOn0', 'bkoDA3iPVH4',
 'ajUDAt82atY', 'UU4CA1nljTg', 'cjEDAghkmFU', 'ckoDA0TA9lY', 'izUEAhrxcbg', 'ck4DAxY8F10', 'bjUDAlvFFR8', 'bk4DAxdhexw',
 'ajkDAr7LFAw', 'UVICAyQ+UJI', 'TTECAq7UnEM', 'TUoCA+Jw8kA', 'ZjUDAmZGozo', 'TU4CA7CME0s', 'ajUDAvnk9E4', 'ak4DA7VAmk0',
 'ZjkDAtle3bI', 'TVICAxOyzrM', 'STUCAqHeHtM', 'SU4CA+16cNA', 'h6QEAZKdo54', 'SVICA62zYxM', 'RTkCAqx1lb4', 'RVICA/z3WM0',
 'QT0CAkdoxRU', 'KFYBA46vJCA');

// Painstakingly derived gobblety-goop, but essentially the front, back and mid-matter common to all barcode images...
var stringStart = '<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAACCAQAAADLaIVbAAAANUlEQVQIHQEqANX/A';
var stringMid = 'AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA';
var stringEnd = 'AAAAASUVORK5CYII=" width="';

function genBarcode(inputString,intWidth,intHeight) { // Input is a long string of 1's and 0's, output is the HTML <img> stack
// Pads to the last character to ensure length is divisible by 5
   var intRawmod = inputString.length % 5; // Modulo 5 remainder
   if (intRawmod > 0) for (var i = 0; i < 5 - intRawmod; i++) inputString += "0"; // If not evenly divisible, pad with zeroes
   var arraySeq = new Array (intChunks = inputString.length / 5); // Create array for as many chunks as are now in input string

   for (var i = 0; i < intChunks; i++) arraySeq[i] = parseInt(inputString.substr(i * 5, 5), 2); // Converts string of 1's and 0's to integer array

// Takes integer array and converts to "<img ...>" graphics for display
   var resultString = "";
   for (var i = 0; i < arraySeq.length; i++) {
   	resultString += stringStart + array5bit_A[arraySeq[i]] + stringMid + array5bit_B[arraySeq[i]] + stringEnd + intWidth + '" height="' + intHeight + '">';
   }
   return resultString;
}
///////////////////////////////////////////
// Symbology-specific arrays

// UPC Specific Arrays
var arrayCodeEANBin, arrayStructEAN;
arrayCodeEANBin = [ [ '0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011' ], [ '0100111', '0110011', '0011011', '0100001', '0011101', '0111001', '0000101', '0010001', '0001001', '0010111' ], [ '1110010', '1100110', '1101100', '1000010', '1011100', '1001110', '1010000', '1000100', '1001000', '1110100' ] ];
arrayStructEAN = ['000000', '001011', '001101', '001110', '010011', '011001', '011100', '010101', '010110', '011010'];

///////////////////////////////////////////
// Global Variables
var strRaw = "";
var strText = "";

///////////////////////////////////////////
// Symbology-specific functions
function funcEAN() { // EAN-13
var intSumOdd = 0, intSumEven = 0, intCheck, i, j, strStruct;

// Compute check digit and add it to raw string
 for (i = 0; i < 12; i += 2) {
  intSumEven += parseInt(strText[i]);
  intSumOdd += parseInt(strText[i+1]);
 }
 intCheck = ((intSumOdd * 3) + intSumEven) % 10;
 if (intCheck > 0) {
 	intCheck = 10 - intCheck;
 }
 strText += intCheck;

// Converts Code EAN array into string of 1's and 0's
 strRaw = "101";
// First six bar sequences
 strStruct = arrayStructEAN[strText[0]];
 for (i = 1; i < 7; i += 1) {
   strRaw += arrayCodeEANBin[strStruct[i-1]][strText[i]];
 }
// Middle sequence
 strRaw += "01010";
// Last six bar sequences, including check digit
 for (i = 0; i < 6; i += 1) {
  strRaw += arrayCodeEANBin[2][strText[i+7]];
 }
 strRaw += "101";
} // End EAN-13


var buttonBarcode = document.getElementById("btnGenBar");
buttonBarcode.onclick = function () {
 var intHt = intWd = 0;
 var strImages = "";
 document.getElementById("textImages").value = strImages;
 intWd = document.getElementById("textWidth").value;
 intHt = document.getElementById("textHeight").value;
 strText = document.getElementById("textBarcode").value;
 funcEAN();
 document.getElementById("result").innerHTML = strImages = genBarcode(strRaw,intWd,intHt);
 document.getElementById("textImages").value = strImages;
 document.getElementById("textRaw").value = strRaw;
 document.getElementById("textImages").select();
}
<head>
<title>EAN-13 Barcodes in vanilla JavaScript</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
</head>
<body>
  <h1>EAN-13 Barcodes written in vanilla JavaScript</h1>
  <h4>Enter text (a 12-digit number), enter a non-ridiculous height in pixels, enter a width between 4 (so small) and 40 (gigantor) and press the button. Magic will ensue. Print page or copy HTML out of box and paste it where it will do some good.</h4>  
 <div id="inputForm">
 	Enter Text:&nbsp;<input type="text" id="textBarcode" placeholder="12 Digit Number" tabindex=1/>
 	&nbsp;Height:&nbsp;<input type="text" id="textHeight" size="3" placeholder="40-100" maxlength="5" tabindex=2/>
 	&nbsp;Width:&nbsp;<input type="text" id="textWidth" size="3" placeholder="4.0-40.9" maxlength="5" tabindex=3/>
 	&nbsp;
 	<input type="button" id="btnGenBar" value="Generate Barcode" tabindex=4/>
 </div>
 <p></p>
 <div id="result"></div>
 <p></p>
 <textarea rows="30" cols="110" id="textImages" tabindex=0></textarea>
 <p></p>
 <textarea rows="3" cols="110" id="textRaw" tabindex=0></textarea>
</body>
0 голосов
/ 16 декабря 2018

Правильно ли отображается штрих-код в предварительном просмотре отчета?Или это неправильно в предварительном просмотре и экспорте PDF?Если только при экспорте в PDF, то, возможно, это проблема изменения размера шрифта, которую можно исправить с помощью параметров реестра, как описано здесь: https://kenhamady.com/cru/archives/2503

В качестве альтернативы, одна из сторонних библиотек пользовательских функций Crystal Reports. здесь позволяет генерировать штрих-коды с использованием изображений.Это удаляет зависимость от шрифтов.

...