Générer une image BarCode personnalisée

Un code-barres est une représentation visuelle des données sous la forme de lignes ou de motifs parallèles. Les codes à barres sont largement utilisés dans divers secteurs tels que la vente au détail, la logistique, la santé, la banque et bien d’autres.

Microsoft Word permet aux utilisateurs d’intégrer des codes-barres directement dans des documents à l’aide de champs. Les utilisateurs peuvent insérer un type spécifique de code à barres, tel qu’un code QR ou un code à barres linéaire, en utilisant le BARCODE champ.

Dans cet article, nous verrons comment le champ BARCODE est implémenté dans Aspose.Words et comment Aspose.Words permet aux utilisateurs de travailler avec des documents Word auxquels un code-barres a déjà été ajouté.

Types de codes à barres pris en charge par Aspose.Words

Aspose.Words prend en charge différents types de codes à barres. Le type de code à barres est transmis en tant que valeur de chaîne dans la propriété BarcodeType.

Lors de l’enregistrement dans des formats Word prenant en charge les codes-barres, vous pouvez utiliser n’importe quel type de code-barres soutenu par Microsoft Word. Si un type de code à barres incorrect a été transmis, Word affichera une erreur.

Lors de l’enregistrement dans d’autres formats, tels que PDF, Aspose.Words délègue le rendu des codes à barres au code utilisateur, de sorte que l’utilisateur est limité aux types de codes à barres de son implémentation ou de la bibliothèque utilisée.

Insérer un code-barres dans un Document ou Charger un Document avec un Code-barres ajouté

Aspose.Words offre la possibilité de:

  1. Insérez par programme un code-barres dans un document à l’aide du DisplayBarcode et MergeBarcode codes de champ
  2. Ou chargez un document Word avec des codes-barres déjà insérés pour un travail ultérieur

Aspose.Words a une interface pour générer des codes à barres personnalisés qui le rend facile à utiliser Aspose.Words et Aspose.BarCode ensemble pour rendre les images de codes à barres dans les documents de sortie. Par exemple, vous pouvez créer un document DOC, OOXML ou RTF et y ajouter un champ DISPLAYBARCODE à l’aide de Aspose.Words. Ou vous pouvez charger un document DOC, OOXML ou RTF avec un champ DISPLAYBARCODE déjà existant et fournir votre implémentation du générateur de codes à barres personnalisé.

Un champ DISPLAYBARCODE typique a la syntaxe suivante:

{ DISPLAYBARCODE "SomeData" QR \h 720 }

Voici un exemple de générateur de code utilisant Aspose.Words et Aspose.BarCode APIs. Cet exemple montre comment insérer des images de codes à barres à la position du champ DISPLAYBARCODE dans un document Word:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document(getMyDir() + "Field sample - BARCODE.docx");
doc.getFieldOptions().setBarcodeGenerator(new CustomBarcodeGenerator());
doc.save(getArtifactsDir() + "WorkingWithBarcodeGenerator.GenerateACustomBarCodeImage.pdf");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
public class CustomBarcodeGenerator extends DocsExamplesBase implements IBarcodeGenerator
{
/// <summary>
/// Converts barcode image height from Word units to Aspose.BarCode units.
/// </summary>
/// <param name="heightInTwipsString"></param>
/// <returns></returns>
private static float convertSymbolHeight(String heightInTwipsString) throws Exception {
// Input value is in 1/1440 inches (twips).
int heightInTwips = tryParseInt(heightInTwipsString);
if (heightInTwips == Integer.MIN_VALUE)
throw new Exception("Error! Incorrect height - " + heightInTwipsString + ".");
// Convert to mm.
return (float) (heightInTwips * 25.4 / 1440.0);
}
/// <summary>
/// Converts barcode image color from Word to Aspose.BarCode.
/// </summary>
/// <param name="inputColor"></param>
/// <returns></returns>
private static Color convertColor(String inputColor) throws Exception {
// Input should be from "0x000000" to "0xFFFFFF".
int color = tryParseHex(inputColor.replace("0x", ""));
if (color == Integer.MIN_VALUE)
throw new Exception("Error! Incorrect color - " + inputColor + ".");
return new Color((color >> 16), ((color & 0xFF00) >> 8), (color & 0xFF));
// Backward conversion -
// return string.Format("0x{0,6:X6}", mControl.ForeColor.ToArgb() & 0xFFFFFF);
}
/// <summary>
/// Converts bar code scaling factor from percent to float.
/// </summary>
/// <param name="scalingFactor"></param>
/// <returns></returns>
private static float convertScalingFactor(String scalingFactor) throws Exception {
boolean isParsed = false;
int percent = tryParseInt(scalingFactor);
if (percent != Integer.MIN_VALUE && percent >= 10 && percent <= 10000)
isParsed = true;
if (!isParsed)
throw new Exception("Error! Incorrect scaling factor - " + scalingFactor + ".");
return percent / 100.0f;
}
/// <summary>
/// Implementation of the GetBarCodeImage() method for IBarCodeGenerator interface.
/// </summary>
/// <param name="parameters"></param>
/// <returns></returns>
public BufferedImage getBarcodeImage(BarcodeParameters parameters) throws Exception {
if (parameters.getBarcodeType() == null || parameters.getBarcodeValue() == null)
return null;
BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.QR);
String type = parameters.getBarcodeType().toUpperCase();
switch (type)
{
case "QR":
generator = new BarcodeGenerator(EncodeTypes.QR);
break;
case "CODE128":
generator = new BarcodeGenerator(EncodeTypes.CODE_128);
break;
case "CODE39":
generator = new BarcodeGenerator(EncodeTypes.CODE_39_STANDARD);
break;
case "EAN8":
generator = new BarcodeGenerator(EncodeTypes.EAN_8);
break;
case "EAN13":
generator = new BarcodeGenerator(EncodeTypes.EAN_13);
break;
case "UPCA":
generator = new BarcodeGenerator(EncodeTypes.UPCA);
break;
case "UPCE":
generator = new BarcodeGenerator(EncodeTypes.UPCE);
break;
case "ITF14":
generator = new BarcodeGenerator(EncodeTypes.ITF_14);
break;
case "CASE":
generator = new BarcodeGenerator(EncodeTypes.NONE);
break;
}
if (generator.getBarcodeType().equals(EncodeTypes.NONE))
return null;
generator.setCodeText(parameters.getBarcodeValue());
if (generator.getBarcodeType().equals(EncodeTypes.QR))
generator.getParameters().getBarcode().getCodeTextParameters().setTwoDDisplayText(parameters.getBarcodeValue());
if (parameters.getForegroundColor() != null)
generator.getParameters().getBarcode().setBarColor(convertColor(parameters.getForegroundColor()));
if (parameters.getBackgroundColor() != null)
generator.getParameters().setBackColor(convertColor(parameters.getBackgroundColor()));
if (parameters.getSymbolHeight() != null)
{
generator.getParameters().getImageHeight().setPixels(convertSymbolHeight(parameters.getSymbolHeight()));
generator.getParameters().setAutoSizeMode(AutoSizeMode.NONE);
}
generator.getParameters().getBarcode().getCodeTextParameters().setLocation(CodeLocation.NONE);
if (parameters.getDisplayText())
generator.getParameters().getBarcode().getCodeTextParameters().setLocation(CodeLocation.BELOW);
generator.getParameters().getCaptionAbove().setText("");
// Empiric scaling factor for converting Word barcode to Aspose.BarCode.
final float SCALE = 2.4f;
float xdim = 1.0f;
if (generator.getBarcodeType().equals(EncodeTypes.QR))
{
generator.getParameters().setAutoSizeMode(AutoSizeMode.NEAREST);
generator.getParameters().getImageWidth().setInches(generator.getParameters().getImageWidth().getInches() * SCALE);
generator.getParameters().getImageHeight().setInches(generator.getParameters().getImageWidth().getInches());
xdim = generator.getParameters().getImageHeight().getInches() / 25;
generator.getParameters().getBarcode().getXDimension().setInches(xdim);
generator.getParameters().getBarcode().getBarHeight().setInches(xdim);
}
if (parameters.getScalingFactor() != null)
{
float scalingFactor = convertScalingFactor(parameters.getScalingFactor());
generator.getParameters().getImageHeight().setInches(generator.getParameters().getImageHeight().getInches() * scalingFactor);
if (generator.getBarcodeType().equals(EncodeTypes.QR))
{
generator.getParameters().getImageWidth().setInches(generator.getParameters().getImageHeight().getInches());
generator.getParameters().getBarcode().getXDimension().setInches(xdim * scalingFactor);
generator.getParameters().getBarcode().getBarHeight().setInches(xdim * scalingFactor);
}
generator.getParameters().setAutoSizeMode(AutoSizeMode.NONE);
}
return generator.generateBarCodeImage();
}
/// <summary>
/// Implementation of the GetOldBarcodeImage() method for IBarCodeGenerator interface.
/// </summary>
/// <param name="parameters"></param>
/// <returns></returns>
public BufferedImage getOldBarcodeImage(BarcodeParameters parameters)
{
if (parameters.getPostalAddress() == null)
return null;
BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.POSTNET);
{
generator.setCodeText(parameters.getPostalAddress());
}
return generator.generateBarCodeImage();
}
/// <summary>
/// Parses an integer using the invariant culture. Returns Int.MinValue if cannot parse.
///
/// Allows leading sign.
/// Allows leading and trailing spaces.
/// </summary>
public static int tryParseInt(String s) {
try {
double value = Double.parseDouble(s);
return castDoubleToInt(value);
} catch (NumberFormatException e) {
return Integer.MIN_VALUE;
}
}
/// <summary>
/// Casts a double to int32 in a way that uint32 are "correctly" casted too (they become negative numbers).
/// </summary>
public static int castDoubleToInt(double value)
{
long temp = (long) value;
return (int) temp;
}
/// <summary>
/// Try parses a hex String into an integer value.
/// on error return int.MinValue
/// </summary>
public static int tryParseHex(String s)
{
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
return Integer.MIN_VALUE;
}
}
}

Vous pouvez également enregistrer le document avec le code-barres chargé ou nouvellement inséré dans des formats de page fixes tels que PDF, XPS, etc. L’exemple de code suivant montre comment enregistrer un document Word au format PDF:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java.git.
Document doc = new Document(getMyDir() + "Document.docx");
doc.save(getArtifactsDir() + "BaseConversions.DocxToPdf.pdf");

Spécifier Les Options De Code À Barres

Lorsque vous travaillez avec des codes à barres, vous pouvez définir des propriétés supplémentaires. Aspose.Words vous fournit la classe BarcodeParameters - classe pour les paramètres de code à barres à transmettre à BarcodeGenerator.

Aspose.Words prend en charge la résolution intégrée de 96 ppi pour les images générées avec IBarcodeGenerator, ce qui limite la taille minimale d’une image de code-barres. Pour résoudre ce problème, les développeurs peuvent insérer manuellement des images de codes-barres avec la résolution cible dans un document Word et les enregistrer au format requis. Pour plus de détails et d’exemples sur l’utilisation des codes à barres, consultez l’article Lire des codes à barres à partir de documents Word.