사용자 정의BarCode이미지 생성
바코드는 평행선이나 패턴의 형태로 데이터를 시각적으로 표현하는 것입니다. 바코드는 소매,물류,의료,은행 및 기타 여러 산업 분야에서 널리 사용됩니다.
Microsoft Word사용자가 필드를 사용하여 문서에 직접 바코드를 포함 할 수 있습니다. 사용자는 다음을 사용하여QR코드 또는 선형 바코드와 같은 특정 유형의 바코드를 삽입할 수 있습니다 BARCODE 필드
이 문서에서는BARCODE필드가Aspose.Words에서 구현되는 방법과Aspose.Words사용자가 바코드가 이미 추가 된 워드 문서를 사용하여 작업 할 수있는 방법을 살펴 보겠습니다.
Aspose.Words에서 지원하는 바코드 유형
Aspose.Words다양한 유형의 바코드를 지원합니다. 바코드 유형은BarcodeType속성에서 문자열 값으로 전달됩니다.
바코드를 지원하는 단어 형식으로 저장할 때,당신은 바코드의 모든 유형을 사용할 수 있습니다 지원Microsoft Word. 바코드의 잘못된 유형이 전달 된 경우,워드 오류가 표시됩니다.
PDF와 같은 다른 형식으로 저장할 때Aspose.Words은 바코드 렌더링을 사용자 코드에 위임하므로 사용자는 사용 된 구현 또는 라이브러리의 바코드 유형으로 제한됩니다.
바코드를 문서에 삽입하거나 바코드가 추가된 문서를 로드합니다
Aspose.Words은:
- 프로그래밍 방식으로 바코드를 사용하여 문서에 삽입 DisplayBarcode 그리고 MergeBarcode 필드 코드
- 또는 추가 작업을 위해 바코드가 이미 삽입 된 단어 문서를로드하십시오
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 피피 해상도를 지원하며,이는 바코드 이미지의 최소 크기를 제한합니다. 이를 해결하기 위해 개발자는 대상 해상도의 바코드 이미지를 워드 문서에 수동으로 삽입하고 필요한 형식으로 저장할 수 있습니다. 바코드 작업에 대한 자세한 내용 및 예제는 문서를 참조하십시오 워드 문서에서 바코드 읽기.