Benutzerdefiniertes BarCode-Bild generieren

Ein Barcode ist eine visuelle Darstellung von Daten in Form von parallelen Linien oder Mustern. Barcodes sind in verschiedenen Branchen wie Einzelhandel, Logistik, Gesundheitswesen, Banken und vielen anderen weit verbreitet.

Microsoft Word ermöglicht Benutzern das direkte Einbetten von Barcodes in Dokumente mithilfe von Feldern. Benutzer können einen bestimmten Barcode-Typ einfügen, z. B. einen QR-Code oder einen linearen Barcode, indem Sie die BARCODE Feld.

In diesem Artikel werden wir uns ansehen, wie das Feld BARCODE in Aspose.Words implementiert ist und wie Aspose.Words es Benutzern ermöglicht, mit Word-Dokumenten zu arbeiten, denen bereits ein Barcode hinzugefügt wurde.

Von Aspose.Words unterstützte Barcode-Typen

Aspose.Words unterstützt verschiedene Arten von Barcodes. Der Barcode-Typ wird als Zeichenfolgenwert in der Eigenschaft BarcodeType übergeben.

Beim Speichern in Word-Formaten, die Barcodes unterstützen, können Sie jeden beliebigen Barcodetyp verwenden unterstützt von Microsoft Word. Wenn ein falscher Barcode-Typ übergeben wurde, zeigt Word einen Fehler an.

Beim Speichern in anderen Formaten, z. B. PDF, delegiert Aspose.Words das Rendern von Barcodes an den Benutzercode, sodass der Benutzer auf die Barcodetypen seiner Implementierung oder Bibliothek beschränkt ist.

Fügen Sie einen Barcode in ein Dokument ein oder laden Sie ein Dokument mit einem hinzugefügten Barcode

Aspose.Words bietet die Möglichkeit:

  1. Programmgesteuertes Einfügen eines Barcodes in ein Dokument mit dem DisplayBarcode und MergeBarcode Feldfunktionen
  2. Oder laden Sie ein Word-Dokument mit bereits eingefügten Barcodes für die weitere Arbeit

Aspose.Words verfügt über eine Schnittstelle zum Generieren benutzerdefinierter Barcodes, die die Verwendung vereinfacht Aspose.Words und Positionieren.BarCode zusammen, um Barcode-Bilder in Ausgabedokumenten zu rendern. Sie können beispielsweise ein DOC-, OOXML- oder RTF-Dokument erstellen und mit Aspose.Words das Feld DISPLAYBARCODE hinzufügen. Oder Sie können ein DOC -, OOXML - oder RTF -Dokument mit bereits vorhandenem DISPLAYBARCODE -Feld laden und Ihre Implementierung des benutzerdefinierten Barcode-Generators bereitstellen.

Ein typisches DISPLAYBARCODE-Feld hat die folgende Syntax:

{ DISPLAYBARCODE "SomeData" QR \h 720 }

Unten sehen Sie einen Beispielcodegenerator, der Aspose.Words und Aspose verwendet.BarCode APIs. Dieses Beispiel zeigt, wie Barcode-Bilder an der Feldposition DISPLAYBARCODE in ein Word-Dokument eingefügt werden:

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

Sie können das Dokument mit dem geladenen oder neu eingefügten Barcode auch in festen Seitenformaten wie PDF, XPS usw. speichern. Das folgende Codebeispiel zeigt, wie Sie ein Word-Dokument im Format PDF speichern:

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

Barcode-Optionen angeben

Wenn Sie mit Barcodes arbeiten, können Sie einige zusätzliche Eigenschaften festlegen. Aspose.Words liefert Ihnen die BarcodeParameters -Klasse - Klasse für Barcode-Parameter, die an BarcodeGenerator übergeben werden sollen.

Aspose.Words unterstützt eine eingebettete Auflösung von 96 ppi für mit IBarcodeGenerator generierte Bilder, wodurch die Mindestgröße eines Barcode-Bildes begrenzt wird. Um dies zu beheben, können Entwickler Barcode-Bilder mit der Zielauflösung manuell in ein Word-Dokument einfügen und im gewünschten Format speichern. Weitere Details und Beispiele zum Arbeiten mit Barcodes finden Sie im Artikel Lesen von Barcodes aus Word-Dokumenten.