Read and Create Barcodes with the Webservice
Minimum Requirements
- Java version: 7
- webPDF version: 7
- wsclient version: 1
This article shows a concrete coding example for the Barcode webservice and its usage with the webPDF wsclient library.
Important note: The following coding example is based on the webPDF wsclient library.
Preparations for the Webservice Call
Before calling the webservice, you should already have created a REST or SOAP session. Use the WebServiceFactory to create either a BarcodeWebService object for SOAP or a BarcodeRestWebService object for REST.
SOAP:
BarcodeWebService barcodeWebService =
WebServiceFactory.createInstance(
session, WebServiceType.BARCODE
);
REST:
BarcodeRestWebService barcodeWebService =
WebServiceFactory.createInstance(
session, WebServiceType.BARCODE
);
Then pass a RestDocument or SoapDocument via setDocument().
Webservice Parameters
For write access, the current open and/or permission password may be required:
barcodeWebService.getPassword().setOpen("password");
barcodeWebService.getPassword().setPermission("password");
If the document is not password protected, this step can be skipped.
Description of the Barcode Webservice
The Barcode webservice is an endpoint of the webPDF server that can create barcodes in PDF documents and also detect and extract them.
You can retrieve the operation like this:
BarcodeType barcode = barcodeWebService.getOperation();
The add Object
To add new barcodes:
BarcodeType.Add add = new BarcodeType.Add();
barcode.setAdd(add);
Supported barcode types:
- Aztec (
AztecBarcodeType) - Codabar (
CodabarBarcodeType) - Code128 (
Code128BarcodeType) - Code39 (
Code39BarcodeType) - DataMatrix (
DataMatrixBarcodeType) - EAN13 (
EAN13BarcodeType) - EAN8 (
EAN8BarcodeType) - ITF (
ItfBarcodeType) - PDF417 (
Pdf417BarcodeType) - QR code (
QrBarcodeType) - UPCA (
UpcaBarcodeType)
Example for Aztec:
AztecBarcodeType aztec = new AztecBarcodeType();
add.getAztec().add(aztec);
General Barcode Parameters
These parameters apply to all barcode types:
value (default: "")
Encoded barcode content:
typedBarcode.setValue("http://www.softvision.de");
pages (default: "")
Page range (1, 1,3,5, 1-5, 1,3-5,6, *):
typedBarcode.setPages("1,3-5,6");
charset (default: "utf-8")
Character set:
typedBarcode.setCharset("utf-8");
rotation (default: 0)
Rotation in 90-degree steps:
typedBarcode.setRotation(90);
margin (default: 0)
Blank area around the barcode:
typedBarcode.setMargin(5);
The position Object
Position and dimensions are defined with RectangleType:
RectangleType position = new RectangleType();
typedBarcode.setPosition(position);
Parameters:
x(default:0):position.setX(15);y(default:0):position.setY(15);width(default:0):position.setWidth(200);height(default:0):position.setHeight(16);coordinates(default:user):position.setCoordinates(CoordinatesType.USER);metrics(default:mm):position.setMetrics(MetricsType.PX);
Coordinate systems:
user= origin at the top leftpdf= origin at the bottom left
Units:
mm= millimeterpx= pixel
Type-Specific Parameters
Aztec
errorCorrection(0-100):aztec.setErrorCorrection(50);layers:aztec.setLayers(10);
DataMatrix
errorCorrection(1-8):dataMatrix.setErrorCorrection(7);shape:dm.setShape(DataMatrixShapeType.RECTANGLE);
QR Code
errorCorrection(l,m,q,h):
qrBarcodeType.setErrorCorrection(QrCodeErrorCorrectionType.M);
PDF417
errorCorrection(1-8):pdf417.setErrorCorrection(7);compact:pdf417.setCompact(true);compactionMode:pdf417.setCompactionMode(Pdf417CompactionModeType.BYTE);shape:pdf417.setShape(DataMatrixShapeType.SQUARE);dataCodewordsMax:pdf417.setDataCodewordsMax(7);dataCodewordsMin:pdf417.setDataCodewordsMin(4);symbolsPerCodewordMax:pdf417.setSymbolsPerCodewordMax(8);symbolsPerCodewordMin:pdf417.setSymbolsPerCodewordMin(4);
The detect Object
To detect and extract barcodes:
BarcodeType.Detect detect = new BarcodeType.Detect();
barcode.setDetect(detect);
inputFormat (default: "pdf")
detect.setInputFormat(BarcodeDetectInputFormatType.PDF);
outputFormat (default: "json")
detect.setOutputFormat(BarcodeDetectOutputFormatType.XML);
The selection Object
To configure barcode detection:
BarcodeSelectionType selection = new BarcodeSelectionType();
detect.getSelection().add(selection);
Important parameters:
formats:selection.setFormats("qrcode,aztec,code39");charset:selection.setCharset("utf-8");pages:selection.setPages("1,3-5,6");allowedLengths:selection.setAllowedLengths("14");barcode39CheckDigit:selection.setBarcode39CheckDigit(true);codabarStartEndDigits:selection.setCodabarStartEndDigits(true);gs1:selection.setGs1(true);pureBarcode:selection.setPureBarcode(true);resolution:selection.setResolution(300);tryHarder:selection.setTryHarder(false);upcEanExtensions:selection.setUpcEanExtensions("8");
The scanArea Object
To limit the scan area:
RectangleType scanArea = new RectangleType();
selection.setScanArea(scanArea);
For the best results, the area should be restricted as closely as possible to the actual barcode.
SOAP Example
try (
// Set up a session with the webPDF server (SOAP in this example):
SoapSession session = SessionFactory.createInstance(
WebServiceProtocol.SOAP,
new URL("https://localhost:8080/webPDF/")
);
// Provide the source and target documents:
SoapDocument soapDocument = new SoapDocument(
new File("Path to the source document").toURI(),
new File("Path to the target document")
)
) {
// Webservice call and processing
} catch (ResultException | MalformedURLException ex) {
// Error handling
}
Background Information
- The webPDF wsclient library
- Using the REST interface
- Using the SOAP interface
- Barcode parameter structure in the documentation
More coding examples can be found here.