package com.aspose.words.examples.programming_documents.document; import java.awt.Color; import java.awt.image.BufferedImage; import com.aspose.barcode.BarCodeBuilder; import com.aspose.barcode.CodeLocation; import com.aspose.barcode.Symbology; import com.aspose.words.BarcodeParameters; import com.aspose.words.Document; import com.aspose.words.IBarcodeGenerator; import com.aspose.words.examples.Utils; public class GenerateACustomBarCodeImage { private static final String dataDir = Utils.getSharedDataDir(GenerateACustomBarCodeImage.class) + "Barcode/"; public static void main(String[] args) throws Exception { Document doc = new Document(dataDir + "Document.docx"); // Set custom barcode generator doc.getFieldOptions().setBarcodeGenerator(new CustomBarcodeGenerator()); doc.save(dataDir + "output.pdf"); } /** * Sample of custom barcode generator implementation (with underlying * Aspose.BarCode module) */ static class CustomBarcodeGenerator implements IBarcodeGenerator { /** * Converts barcode type from Word to Aspose.BarCode. * * @param inputCode * @return */ private long convertBarcodeType(String inputCode) { if (inputCode == null) { return Integer.MIN_VALUE; } String type = inputCode.toUpperCase(); if (type.equals("QR")) return Symbology.QR; if (type.equals("CODE128")) return Symbology.Code128; if (type.equals("CODE39")) return Symbology.Code39Standard; if (type.equals("EAN8")) return Symbology.EAN8; if (type.equals("EAN13")) return Symbology.EAN13; if (type.equals("UPCA")) return Symbology.UPCA; if (type.equals("UPCE")) return Symbology.UPCE; if (type.equals("ITF14")) return Symbology.ITF14; return Integer.MIN_VALUE; } /** * Converts barcode image height from Word units to Aspose.BarCode units. * * @param heightInTwipsString * @return */ private float convertSymbolHeight(String heightInTwipsString) { // Input value is in 1/1440 inches (twips) int heightInTwips = Integer.MIN_VALUE; try { heightInTwips = Integer.parseInt(heightInTwipsString); } catch (NumberFormatException e) { heightInTwips = Integer.MIN_VALUE; } if (heightInTwips == Integer.MIN_VALUE) { throw new RuntimeException("Error! Incorrect height - " + heightInTwipsString + "."); } // Convert to mm return (float) (heightInTwips * 25.4 / 1440); } /** * Converts barcode image color from Word to Aspose.BarCode. * * @param inputColor * @return */ private Color convertColor(String inputColor) { // Input should be from "0x000000" to "0xFFFFFF" /* * Integer color = Integer.MIN_VALUE; try { color = * Integer.parseInt(inputColor.replace("0x", "")); } catch * (NumberFormatException e) { color = Integer.MIN_VALUE; } * * if (color == Integer.MIN_VALUE) { throw new RuntimeException( * "Error! Incorrect color - " + inputColor + "."); } */ return Color.BLACK; // Backword conversion - //return string.Format("0x{0,6:X6}", mControl.ForeColor.ToArgb() & 0xFFFFFF); } /** * Converts bar code scaling factor from percents to float. * * @param scalingFactor * @return */ private float convertScalingFactor(String scalingFactor) { boolean isParsed = false; int percents = Integer.MIN_VALUE; try { percents = Integer.parseInt(scalingFactor); } catch (NumberFormatException e) { percents = Integer.MIN_VALUE; } if (percents != Integer.MIN_VALUE) { if (percents >= 10 && percents <= 10000) { isParsed = true; } } if (!isParsed) { throw new RuntimeException("Error! Incorrect scaling factor - " + scalingFactor + "."); } return percents / 100.0f; } /** * Implementation of the GetBarCodeImage() method for IBarCodeGenerator * interface. * * @param parameters * @return */ public BufferedImage getBarcodeImage(BarcodeParameters parameters) { if (parameters.getBarcodeType() == null || parameters.getBarcodeValue() == null) { return null; } BarCodeBuilder builder = new BarCodeBuilder(); builder.setSymbologyType(convertBarcodeType(parameters.getBarcodeType())); if (builder.getSymbologyType() == Integer.MIN_VALUE) { return null; } builder.setCodeText(parameters.getBarcodeValue()); if (builder.getSymbologyType() == Symbology.QR) { builder.setDisplay2DText(parameters.getBarcodeValue()); } if (parameters.getForegroundColor() != null) { builder.setForeColor(convertColor(parameters.getForegroundColor())); } if (parameters.getBackgroundColor() != null) { builder.setBackColor(convertColor(parameters.getBackgroundColor())); } if (parameters.getSymbolHeight() != null) { builder.setImageHeight(convertSymbolHeight(parameters.getSymbolHeight())); builder.setAutoSize(false); } builder.setCodeLocation(CodeLocation.None); if (parameters.getDisplayText()) { builder.setCodeLocation(CodeLocation.Below); } builder.getCaptionAbove().setText(""); final float scale = 0.4f; // Empiric scaling factor for converting Word barcode to Aspose.BarCode float xdim = 1.0f; if (builder.getSymbologyType() == Symbology.QR) { builder.setAutoSize(false); builder.setImageWidth(builder.getImageWidth() * scale); builder.setImageHeight(builder.getImageWidth()); xdim = builder.getImageHeight() / 25; builder.setyDimension(xdim); builder.setxDimension(xdim); } if (parameters.getScalingFactor() != null) { float scalingFactor = convertScalingFactor(parameters.getScalingFactor()); builder.setImageHeight(builder.getImageHeight() * scalingFactor); if (builder.getSymbologyType() == Symbology.QR) { builder.setImageWidth(builder.getImageHeight()); builder.setxDimension(xdim * scalingFactor); builder.setyDimension(xdim * scalingFactor); } builder.setAutoSize(false); } return builder.getBarCodeImage(); } /* (non-Javadoc) * @see com.aspose.words.IBarcodeGenerator#getOldBarcodeImage(com.aspose.words.BarcodeParameters) */ @Override public BufferedImage getOldBarcodeImage(BarcodeParameters arg0) throws Exception { // TODO Auto-generated method stub return null; } } }