Штрих-код Code128 в текстовом поле формы Adobe Acrobat - PullRequest
0 голосов
/ 23 сентября 2018

У нас есть PDF-форма, в которой вы заполняете параметры продукта, затем он преобразует эти параметры в одно текстовое поле «Номер партии», а затем, наконец, поле «Штрих-код номера партии», берет номер партии и преобразует его в штрих-код.По какой-то причине это не работает.Я почти ничего не знаю об интеграции штрих-кодов, но я программист и просто ищу руководство по этой теме.

Поле «Штрих-код номера партии» использует в свойствах Calculate-> Custom Calculation Script этот код.Итак, как я уже говорил выше, он берет поле «Номер лота» и преобразует его в строку, которая, как я полагаю, затем используется для создания правильного штрих-кода, или в этом идея.

event.value = this.getField("Lot No").valueAsString;

Вот ссылка нафактический PDF, который мне дали от клиента:
https://ufile.io/ihh87

Это то, что я обнаружил в этой теме, но, очевидно, все еще не хватает частей головоломки, и надеюсь, что кто-то может дать мне точные необходимые шагичтобы это работало в Acrobat Pro.

  1. Мне нужен встраиваемый шрифт CODE 128?Я нашел этот набор шрифтов, но стоит $ 159. Есть ли бесплатная версия, которую я мог бы использовать, и она все еще работает?https://www.idautomation.com/barcode-fonts/code-128/
  2. Javascript - мне нужно добавить пользовательский код Javascript в свойства Actions текстового поля «Штрих-код номера партии», но я не знаю, какой код необходимо реализовать, и ищу ресурс для этогочтобы лучше объяснить процесс.
  3. Высота шрифта и размер шрифта - если я выполню предыдущие 2 шага, мне все еще нужно позаботиться о том, чтобы установить для текстового поля PDF точный размер и высоту шрифта, иначе сканер штрих-кода мог быошибка.Это правда?В настоящее время размер шрифта текстового поля PDF установлен на «Авто»

Ответы [ 3 ]

0 голосов
/ 23 сентября 2018

Вы можете попробовать шрифт 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>
    &nbsp;Font Size:&nbsp;
    <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>&nbsp;

    <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.

0 голосов
/ 22 марта 2019

Шрифт libre barcode128 выглядит как копия исходного кода семейства шрифтов штрих-кода с открытым исходным кодом.Таким образом, коды символов могут совпадать.

Оптимизированные 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 , если вы хотите попробовать.

0 голосов
/ 23 сентября 2018

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

Чтобы создать эту логику, вам нужно понять, как работает Код 128;эта информация должна быть в свободном доступе.

Что касается лицензии на шрифт, вы можете сравнить ее стоимость с другими решениями: попробуйте работать с плавающим свободным шрифтом, или создать свой собственный шрифт, или использовать графику (например,в аннотации, которая может быть рассчитана с помощью Acrobat JavaScript).В конце концов, даже этот довольно дорогой шрифт может оказаться наиболее экономичным решением.

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

...