12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import merge from "../help/merge.js";
- function getEncodingHeight(encoding, options){
- return options.height +
- ((options.displayValue && encoding.text.length > 0) ? options.fontSize + options.textMargin : 0) +
- options.marginTop +
- options.marginBottom;
- }
- function getBarcodePadding(textWidth, barcodeWidth, options){
- if(options.displayValue && barcodeWidth < textWidth){
- if(options.textAlign == "center"){
- return Math.floor((textWidth - barcodeWidth) / 2);
- }
- else if(options.textAlign == "left"){
- return 0;
- }
- else if(options.textAlign == "right"){
- return Math.floor(textWidth - barcodeWidth);
- }
- }
- return 0;
- }
- function calculateEncodingAttributes(encodings, barcodeOptions, context){
- for(let i = 0; i < encodings.length; i++){
- var encoding = encodings[i];
- var options = merge(barcodeOptions, encoding.options);
- // Calculate the width of the encoding
- var textWidth;
- if(options.displayValue){
- textWidth = messureText(encoding.text, options, context);
- }
- else{
- textWidth = 0;
- }
- var barcodeWidth = encoding.data.length * options.width;
- encoding.width = Math.ceil(Math.max(textWidth, barcodeWidth));
- encoding.height = getEncodingHeight(encoding, options);
- encoding.barcodePadding = getBarcodePadding(textWidth, barcodeWidth, options);
- }
- }
- function getTotalWidthOfEncodings(encodings){
- var totalWidth = 0;
- for(let i = 0; i < encodings.length; i++){
- totalWidth += encodings[i].width;
- }
- return totalWidth;
- }
- function getMaximumHeightOfEncodings(encodings){
- var maxHeight = 0;
- for(let i = 0; i < encodings.length; i++){
- if(encodings[i].height > maxHeight){
- maxHeight = encodings[i].height;
- }
- }
- return maxHeight;
- }
- function messureText(string, options, context){
- var ctx;
- if(context){
- ctx = context;
- }
- else if(typeof document !== "undefined"){
- ctx = document.createElement("canvas").getContext("2d");
- }
- else{
- // If the text cannot be messured we will return 0.
- // This will make some barcode with big text render incorrectly
- return 0;
- }
- ctx.font = options.fontOptions + " " + options.fontSize + "px " + options.font;
- // Calculate the width of the encoding
- var measureTextResult = ctx.measureText(string);
- if (!measureTextResult) {
- // Some implementations don't implement measureText and return undefined.
- // If the text cannot be measured we will return 0.
- // This will make some barcode with big text render incorrectly
- return 0;
- }
- var size = measureTextResult.width;
- return size;
- }
- export {getMaximumHeightOfEncodings, getEncodingHeight, getBarcodePadding, calculateEncodingAttributes, getTotalWidthOfEncodings};
|