إنشاء صورة BarCode مخصصة

الباركود هو تمثيل مرئي للبيانات في شكل خطوط أو أنماط متوازية. تستخدم الرموز الشريطية على نطاق واسع في العديد من الصناعات مثل البيع بالتجزئة والخدمات اللوجستية والرعاية الصحية والخدمات المصرفية وغيرها الكثير.

Microsoft Word يسمح للمستخدمين بتضمين الباركود مباشرة في المستندات باستخدام الحقول. يمكن للمستخدمين إدراج نوع معين من الباركود، مثل رمز QR أو رمز شريطي خطي، باستخدام BARCODE حقل.

في هذه المقالة، سننظر في كيفية تنفيذ حقل BARCODE في Aspose.Words وكيف يسمح Aspose.Words للمستخدمين بالعمل مع مستندات ورد التي تمت إضافة رمز شريطي إليها بالفعل.

أنواع الباركود بدعم من Aspose.Words

Aspose.Words يدعم أنواع مختلفة من الباركود. يتم تمرير نوع الباركود كقيمة سلسلة في خاصية BarcodeType.

عند الحفظ في تنسيقات الكلمات التي تدعم الرموز الشريطية، يمكنك استخدام أي نوع من الباركود بدعم من Microsoft Word. إذا تم تمرير نوع غير صحيح من الباركود، وكلمة عرض خطأ.

عند حفظ إلى صيغ أخرى، مثل PDF، Aspose.Words المندوبين الباركود تقديم لرمز المستخدم، وبالتالي فإن المستخدم يقتصر على أنواع الباركود تنفيذها أو المكتبة المستخدمة.

أدخل شريطا شريطيا في مستند أو قم بتحميل مستند به رمز شريطي مضاف

Aspose.Words يوفر القدرة على:

  1. إدراج رمز شريطي برمجيا في مستند باستخدام DisplayBarcode و MergeBarcode رموز الحقول
  2. أو تحميل مستند ورد مع الباركود المدرجة بالفعل في ذلك لمزيد من العمل

يحتوي Aspose.Words على واجهة لإنشاء رموز شريطية مخصصة تجعلها سهلة الاستخدام Aspose.Words و أسبوس.BarCode معا لتقديم صور الباركود في مستندات الإخراج. على سبيل المثال، يمكنك إنشاء مستند DOC أو OOXML أو RTF وإضافة حقل DISPLAYBARCODE إليه باستخدام Aspose.Words. أو يمكنك تحميل DOC، OOXML أو RTF وثيقة مع DISPLAYBARCODE الحقل الموجود بالفعل في ذلك وتوفير تنفيذ مولد الباركود مخصص.

يحتوي حقل DISPLAYBARCODE النموذجي على بناء الجملة التالي:

{ DISPLAYBARCODE "SomeData" QR \h 720 }

يوجد أدناه مثال على مولد الكود باستخدام Aspose.Words و أسبوس.BarCode APIs. يوضح هذا المثال كيفية إدراج صور الباركود في موضع حقل DISPLAYBARCODE في مستند ورد:

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

يمكنك أيضا حفظ المستند باستخدام الرمز الشريطي المحمل أو المدرج حديثا بتنسيقات صفحات ثابتة مثل PDF، XPS، إلخ. يوضح مثال الكود التالي كيفية حفظ مستند ورد بتنسيق 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");

حدد خيارات الباركود

عند العمل مع الباركود، يمكنك تعيين بعض الخصائص الإضافية. Aspose.Words يوفر لك فئة BarcodeParameters - فئة لمعلمات الباركود لتمريرها إلى BarcodeGenerator.

Aspose.Words يدعم جزءا لا يتجزأ من قرار 96 نقطة في البوصة للصور التي تم إنشاؤها باستخدام IBarcodeGenerator، مما يحد من الحد الأدنى لحجم صورة الباركود. لمعالجة هذا، يمكن للمطورين إدراج صور الباركود يدويا بدقة الهدف في مستند ورد وحفظها بالتنسيق المطلوب. لمزيد من التفاصيل والأمثلة حول العمل مع الباركود، راجع المقالة قراءة الباركود من وثائق وورد.