사용자 정의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문서를 만들고Aspose.Words를 사용하여DISPLAYBARCODE필드를 추가할 수 있습니다. 또는DISPLAYBARCODE필드가 이미 존재하는DOC,OOXML또는RTF문서를로드하고 사용자 정의 바코드 생성기의 구현을 제공 할 수 있습니다.

일반적인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는IBarcodeGenerator로 생성된 이미지에 대해 임베디드 96 피피 해상도를 지원하며,이는 바코드 이미지의 최소 크기를 제한합니다. 이를 해결하기 위해 개발자는 대상 해상도의 바코드 이미지를 워드 문서에 수동으로 삽입하고 필요한 형식으로 저장할 수 있습니다. 바코드 작업에 대한 자세한 내용 및 예제는 문서를 참조하십시오 워드 문서에서 바코드 읽기.