У нас есть PDF-форма, в которой вы заполняете параметры продукта, затем она преобразует эти параметры в одно текстовое поле «Номер партии», а затем, наконец, поле «Штрих-код номера партии», принимает номер партии и преобразует его в штрих-код. По какой-то причине это не работает. Я почти ничего не знаю об интеграции штрих-кодов, но я программист и просто ищу рекомендации по этой теме.
Поле «Штрих-код номера партии» в свойствах Calculate-> Custom Calculation Script использует этот код. Итак, как я уже сказал выше, он берет поле «Номер партии» и преобразует его в строку, которую, как мне кажется, затем использует шрифт для генерации правильного штрих-кода, или это идея.
event.value = this.getField("Lot No").valueAsString;
Вот ссылка на фактический PDF-файл, который мне предоставил клиент:
https://ufile.io/ihh87
Это то, что я узнал по этой теме, но, очевидно, все еще не хватает деталей в головоломке, и надеюсь, что кто-то может дать мне точные шаги, необходимые для того, чтобы это работало в Acrobat Pro.





Code 128 - это относительно сложный штрих-код, который не может быть представлен заменой заменяемой строки шрифтом. Следовательно, вам понадобится некоторая логика, чтобы собрать правильную строку для отображения. Я не знаю ничего общедоступного, что могло бы сделать такой расчет; вы были бы одни или вам нужно было бы найти кого-нибудь, кто поможет.
Чтобы создать эту логику, вам нужно понять, как работает Code 128; эта информация должна быть в свободном доступе.
Что касается лицензии на шрифт, вы можете сравнить ее стоимость с другими решениями: попробуйте поработать со свободным шрифтом, плавающим вокруг, или создайте свой собственный шрифт, или используйте графику (например, в аннотации, которую можно рассчитать с помощью Acrobat JavaScript). В конце концов, даже этот довольно дорогой шрифт может оказаться самым экономичным решением.
Поскольку вы уже изучили спецификацию Code 128, вы также ознакомились с требованиями для ее печати. Вам нужно будет внести изменения в поле и, скорее всего, установить фиксированный размер шрифта. Однако это будет зависеть от масштабирования при печати страницы.
Вы можете попробовать шрифт Libre Code128 (бесплатно) по адресу https://fonts.googleapis.com/css?family=Libre+Barcode+128+Text и приложенный код JavaScript для расчета контрольной суммы.
var buttonGen = document.getElementById("btnGen");
buttonGen.onclick = function () {
var x = document.getElementById("textIn").value;
var i, j, intWeight, intLength, intWtProd = 0, arrayData = [], fs;
var arraySubst = [ "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê" ];
/*
* Checksum Calculation for Code 128 B
*/
intLength = x.length;
arrayData[0] = 104; // Assume Code 128B, Will revise to support A, C and switching.
intWtProd = 104;
for (j = 0; j < intLength; j += 1) {
arrayData[j + 1] = x.charCodeAt(j) - 32; // Have to convert to Code 128 encoding
intWeight = j + 1; // to generate the checksum
intWtProd += intWeight * arrayData[j + 1]; // Just a weighted sum
}
arrayData[j + 1] = intWtProd % 103; // Modulo 103 on weighted sum
arrayData[j + 2] = 106; // Code 128 Stop character
chr = parseInt(arrayData[j + 1], 10); // Gotta convert from character to a number
if (chr > 94) {
chrString = arraySubst[chr - 95];
} else {
chrString = String.fromCharCode(chr + 32);
}
// Change the font-size style to match the drop down
fs = document.getElementsByTagName("option")[document.getElementById("selList").selectedIndex].value;
document.getElementById("test").style.fontSize = fs + 'px';
document.getElementById("check").innerHTML =
'Checksum = ' + chr + ' or character ' + // Make It Visual
chrString + ', for text = "' + x + '"';
document.getElementById("test").innerHTML =
'Ì' + // Start Code B
x + // The originally typed string
chrString + // The generated checksum
'Î'; // Stop Code
}<html>
<head>
<link href = "https://fonts.googleapis.com/css?family=Libre+Barcode+128+Text" rel = "stylesheet">
<style>
td, th {
text-align: center;
padding: 6px;
}
.ss {
font-family: 'Libre Barcode 128 Text', cursive;
font-size: 24px;
}
</style>
</head>
<body>
Font Size:
<select id = "selList">
<option value = "24" selected>24px</option>
<option value = "30">30px</option>
<option value = "36">36px</option>
<option value = "42">42px</option>
<option value = "48">48px</option>
<option value = "54">54px</option>
<option value = "60">60px</option>
<option value = "66">66px</option>
<option value = "72">72px</option>
<option value = "78">78px</option>
<option value = "84">84px</option>
<option value = "90">90px</option>
<option value = "96">96px</option>
</select>
<input type = "text" id = "textIn"></input>
<input type = "button" id = "btnGen" value = "Generate Code 128 Checksum" tabindex=4/>
<div id = "check"></div><br /><span id = "test" class = "ss">ÌMaking the Web Beautiful!$Î</span><br />
<p>This is a demonstration of use of the Libre Barcode 128 Font.</p>
<p>Because the Libre Barcode Code 128 font does not generate checksums, you need this component to produce a scanning barcode.</p>
<p>To use, just enter the text you want to embed in the barcode and press the generate button. Happy barcoding!</p>
<p>By the way, Libre Barcode 128 Font uses the following high ASCII / unicode characters to implement the control codes symbols. (This is essentially adding 100 to the value, in other words 'Ã' is U+00C3 (195) to 'Î' is U+00CE (206).)</p>
<table border = "3">
<tr>
<th>Value</th>
<th>Encoding</th>
<th>Subst</th>
</tr>
<tr><td> 95</td><td>A: US, B: DEL, C: 95</td><td>Ã</td></tr>
<tr><td> 96</td><td>A: FNC 3, B: FNC 3, C: 96</td><td>Ä</td></tr>
<tr><td> 97</td><td>A: FNC 2, B: FNC 2, C: 97</td><td>Å</td></tr>
<tr><td> 98</td><td>A: Shift B, B: Shift A, C: 98</td><td>Æ</td></tr>
<tr><td> 99</td><td>A: Code C, B: Code C, C: 99</td><td>Ç</td></tr>
<tr><td>100</td><td>A: Code B, B: FNC 4, C: Code B</td><td>È</td></tr>
<tr><td>101</td><td>A: FNC 4, B: Code A, C: Code A</td><td>É</td></tr>
<tr><td>102</td><td>A: FNC 1, B: FNC 1, C: FNC 1</td><td>Ê</td></tr>
<tr><td>103</td><td>Begin Code A</td><td>Ë</td></tr>
<tr><td>104</td><td>Begin Code B</td><td>Ì</td></tr>
<tr><td>105</td><td>Begin Code C</td><td>Í</td></tr>
<tr><td>106</td><td>Stop Code</td><td>Î</td></tr></table>
</body>
</html>Чтобы получить штрих-код Code 128 для печати и сканирования, необходимо вычислить контрольную сумму. Это включает в себя вычисление взвешенной суммы содержимого номера лота и получение остатка от деления на 103.
Это верно для любой буквы, которая не найдена в столбце Code 128 B таблицы Code 128 здесь: en.wikipedia.org/wiki/Code_128.
Шрифт свободный штрих-код128, похоже, является копией семейства шрифтов штрих-кода ID с открытым исходным кодом. Таким образом, коды символов могут совпадать.
Оптимизированные 128 кодов (которые переключаются между Code128B и 128C для обеспечения более коротких штрих-кодов, если во входной строке используются последовательные цифры) не будут очень удобочитаемы, поэтому их использование со шрифтом, который включает в себя читаемые человеком символы, не даст хороших результатов, потому что Кодировка Code128C (для чисел) искажает последовательные числа.
Я нашел этот проект librebarcode на github, где кто-то использовал большой массив javascript с картами символов для шрифта и весами, которые вы должны использовать для вычисления контрольной суммы.
Вместе с примером кода и страница Википедии для кода 128 вы сможете заставить что-то работать в Acrobat.
Вот массив:
var data = [
// the unicode chars are from:
// www.idautomation.com/barcode-fonts/code.128/user-manual.html
// http://www.jtbarton.com/Barcodes/Code128.aspx
// checksum value, pattern, canonical id/name (based on Code Set B)
// (name of the glyph in the font?), [unicode chars], textbelow_flag_or_charcodes
[ 0, ' ', ' ', '00', 'Â']
, [ 1, '!', '!', '01', '!']
, [ 2, '"', '"', '02', '"']
, [ 3, '#', '#', '03', '#']
, [ 4, '$', '$', '04', '$']
, [ 5, '%', '%', '05', '%']
, [ 6, '&', '&', '06', '&']
, [ 7, "'", "'", "07", "'"]
, [ 8, '(', '(', '08', '(']
, [ 9, ')', ')', '09', ')']
, [ 10, '*', '*', '10', '*']
, [ 11, '+', '+', '11', '+']
, [ 12, ',', ',', '12', ',']
, [ 13, '-', '-', '13', '-']
, [ 14, '.', '.', '14', '.']
, [ 15, '/', '/', '15', '/']
, [ 16, '0', '0', '16', '0']
, [ 17, '1', '1', '17', '1']
, [ 18, '2', '2', '18', '2']
, [ 19, '3', '3', '19', '3']
, [ 20, '4', '4', '20', '4']
, [ 21, '5', '5', '21', '5']
, [ 22, '6', '6', '22', '6']
, [ 23, '7', '7', '23', '7']
, [ 24, '8', '8', '24', '8']
, [ 25, '9', '9', '25', '9']
, [ 26, ':', ':', '26', ':']
, [ 27, ';', ';', '27', ';']
, [ 28, '<', '<', '28', '<']
, [ 29, '=', '=', '29', '=']
, [ 30, '>', '>', '30', '>']
, [ 31, '?', '?', '31', '?']
, [ 32, '@', '@', '32', '@']
, [ 33, 'A', 'A', '33', 'A']
, [ 34, 'B', 'B', '34', 'B']
, [ 35, 'C', 'C', '35', 'C']
, [ 36, 'D', 'D', '36', 'D']
, [ 37, 'E', 'E', '37', 'E']
, [ 38, 'F', 'F', '38', 'F']
, [ 39, 'G', 'G', '39', 'G']
, [ 40, 'H', 'H', '40', 'H']
, [ 41, 'I', 'I', '41', 'I']
, [ 42, 'J', 'J', '42', 'J']
, [ 43, 'K', 'K', '43', 'K']
, [ 44, 'L', 'L', '44', 'L']
, [ 45, 'M', 'M', '45', 'M']
, [ 46, 'N', 'N', '46', 'N']
, [ 47, 'O', 'O', '47', 'O']
, [ 48, 'P', 'P', '48', 'P']
, [ 49, 'Q', 'Q', '49', 'Q']
, [ 50, 'R', 'R', '50', 'R']
, [ 51, 'S', 'S', '51', 'S']
, [ 52, 'T', 'T', '52', 'T']
, [ 53, 'U', 'U', '53', 'U']
, [ 54, 'V', 'V', '54', 'V']
, [ 55, 'W', 'W', '55', 'W']
, [ 56, 'X', 'X', '56', 'X']
, [ 57, 'Y', 'Y', '57', 'Y']
, [ 58, 'Z', 'Z', '58', 'Z']
, [ 59, '[', '[', '59', '[']
, [ 60, '\\', '\\', '60', '\\']
, [ 61, ']', ']', '61', ']']
, [ 62, '^', '^', '62', '^']
, [ 63, '_', '_', '63', '_']
, [ 64, 'NUL', '`', '64', '`']
, [ 65, 'SOH', 'a', '65', 'a']
, [ 66, 'STX', 'b', '66', 'b']
, [ 67, 'ETX', 'c', '67', 'c']
, [ 68, 'EOT', 'd', '68', 'd']
, [ 69, 'ENQ', 'e', '69', 'e']
, [ 70, 'ACK', 'f', '70', 'f']
, [ 71, 'BEL', 'g', '71', 'g']
, [ 72, 'BS', 'h', '72', 'h']
, [ 73, 'HT', 'i', '73', 'i']
, [ 74, 'LF', 'j', '74', 'j']
, [ 75, 'VT', 'k', '75', 'k']
, [ 76, 'FF', 'l', '76', 'l']
, [ 77, 'CR', 'm', '77', 'm']
, [ 78, 'SO', 'n', '78', 'n']
, [ 79, 'SI', 'o', '79', 'o']
, [ 80, 'DLE', 'p', '80', 'p']
, [ 81, 'DC1', 'q', '81', 'q']
, [ 82, 'DC2', 'r', '82', 'r']
, [ 83, 'DC3', 's', '83', 's']
, [ 84, 'DC4', 't', '84', 't']
, [ 85, 'NAK', 'u', '85', 'u']
, [ 86, 'SYN', 'v', '86', 'v']
, [ 87, 'ETB', 'w', '87', 'w']
, [ 88, 'CAN', 'x', '88', 'x']
, [ 89, 'EM', 'y', '89', 'y']
, [ 90, 'SUB', 'z', '90', 'z']
, [ 91, 'ESC', '{', '91', '{']
, [ 92, 'FS', '|', '92', '|']
, [ 93, 'GS', '}', '93', '}']
, [ 94, 'RS', '~', '94', '~']
, [ 95, 'US', 'DEL', '95 ', 'Ã']
, [ 96, 'FNC 3', 'FNC 3', '96', 'Ä']
, [ 97, 'FNC 2', 'FNC 2', '97', 'Å']
, [ 98, 'Shift B', 'Shift A', '98', 'Æ']
, [ 99, 'Code C', 'Code C', '99', 'Ç']
, [ 100, 'Code B', 'FNC 4', 'Code B', 'È']
, [ 101, 'FNC 4', 'Code A', 'Code A', 'É']
, [ 102, 'FNC 1', 'FNC 1', 'FNC 1', 'Ê']
, [ 103, 'Start Code A', 'Start Code A', 'Start Code A', 'Ë']
, [ 104, 'Start Code B', 'Start Code B', 'Start Code B', 'Ì']
, [ 105, 'Start Code C', 'Start Code C', 'Start Code C', 'Í']
, [ 206, 'Stop', 'Stop', 'Stop', 'Î']
]
;
Мой собственный полу-рабочий эксперимент на GitHub, если хочешь попробовать.
Имея аналогичную проблему, я нашел решение. Если вы обновите ссылку на свой pdf-файл из клиента, я буду рад его попробовать.
В MS Word вы можете легко получить Code128 из любой входной строки. Я импортировал PDF-форму в Word с помощью FineReader, где выбрал форму в качестве фонового изображения, добавил поля, а затем добавил Code128, встроенный в Word. Довольно неплохой результат.
Интересная работа. К сожалению, немецкие буквы, такие как ä, ü, ö, ß, Ü или Ö, не будут переведены.