Genereer een Aangepaste Barcode Afbeelding

Een streepjescodes is een visuele weergave van gegevens in de vorm van parallele lijnen of patronen. Streepjescodes worden veel gebruikt in verschillende industrieën zoals detailhandel, logistiek, gezondheidszorg, bankieren en vele anderen.

Microsoft Word maakt het gebruikers mogelijk om streepjescodes rechtstreeks in documenten te integreren via velden. Gebruikers kunnen een specifieke soort streepcode invoegen, zoals een QR-code of een lineaire streepcode, met behulp van het BARCODE-veld.

In dit artikel zullen we kijken hoe het BARCODE-veld wordt geïmplementeerd in Aspose.Words en hoe Aspose.Words gebruikers in staat stelt om te werken met Word-documenten waarop reeds een streepjescode is toegevoegd.

Barcode typen ondersteund door Aspose.Words

Aspose.Words ondersteunt verschillende soorten streepjescodes. De streepjescodetype wordt doorgegeven als een tekenreekswaarde in de BarcodeType eigenschap.

Wanneer opslaan naar woordformaten die streepjescodes ondersteunen, kun je elk type streepjescode gebruiken dat supported by Microsoft Word is. Als een verkeerd type streepjescode werd doorgegeven, zal Word een fout weergeven.

Bij het opslaan in andere formaten, zoals PDF, Aspose.Words delegeert het renderen van barcodes naar de gebruikerscode, zodat de gebruiker beperkt is tot de barcode-typen van hun implementatie of bibliotheek die wordt gebruikt.

Voeg een streepjescode in een document in of laad een document met een toegevoegde streepjescode

Aspose.Words biedt de mogelijkheid om:

  1. Programmeermatig een streepjescode in een document invoegen met behulp van de DisplayBarcode en MergeBarcode veldcodes
  2. Of laad een Word-document waarin al barcodes zijn ingevoegd voor verder werk

Aspose.Words heeft een interface voor het genereren van aangepaste streepjescodes waardoor het gemakkelijk is om Aspose.Words en Aspose.BarCode samen te gebruiken om streepjesbeeldbestanden in uitvoer-documenten weer te geven. U kunt bijvoorbeeld een DOC-, OOXML- of RTF-document maken en het DISPLAYBARCODE-veld toevoegen met behulp van Aspose.Words. Of u kunt een DOC-, OOXML- of RTF-document laden waarin het DISPLAYBARCODE-veld al bestaat en uw eigen implementatie van een aangepaste streepjescodegenerator bieden.

Een typisch DISPLAYBARCODE-veld heeft de volgende syntaxis:

{ DISPLAYBARCODE "SomeData" QR \h 720 }

Hieronder is een voorbeeld codegenerator die de Aspose.Words en Aspose.BarCode API gebruikt. Dit voorbeeld laat zien hoe u barcode afbeeldingen op het veld “DISPLAYBARCODE” in een Word-document kunt invoegen:

// 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;
}
}
}

U kunt het document ook opslaan met de geladen of nieuw ingevoerde streepjescodes in vaste paginaformaten zoals PDF, XPS, enz. Het volgende voorbeeld laat zien hoe u een Word-document naar PDF-indeling kunt opslaan:

// 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");

Specificeren van Barcodeopties

Wanneer u werkt met streepjescodes kunt u enkele extra eigenschappen instellen. Aspose.Words geeft u de BarcodeParameters klasse – klasse voor streepjecodeparameters om door te geven aan BarcodeGenerator.

Aspose.Words ondersteunt ingebedde 96 ppi-resolutie voor afbeeldingen die zijn gegenereerd met IBarcodeGenerator, waardoor de minimale grootte van een barcodeafbeelding wordt beperkt. Om dit op te lossen kunnen ontwikkelaars handmatig barcodeafbeeldingen met de doelresolutie invoegen in een Word-document en deze opslaan in het vereiste formaat. Voor meer details en voorbeelden over het werken met barcodes, zie artikel Read Barcodes from Word Documents.