Printing with P-touch Template
Overview
This feature enables replacing the texts and printing by transferring a predefined template via the following steps.
- Create a template with P-touch Editor (*.pd3, *.pdz, *.blf) (*1)
- Transfer the template to a printer
- Print the template you specified. (*2)
(*1) Brother Print SDK doesn't support.For instructions on creating a P-touch Template, see Creating a File That Can be Transferred to Your Printer.
(*2) You can replace some texts in the template before printing.
Sample Codes
Transfer and print template APIs used in the Sample Codes on this page.
| iOS | Android |
|---|---|
| BRLMChannel | Channel |
| BRLMPrinterDriverGenerator | PrinterDriverGenerator |
| BRLMPrinterDriver | PrinterDriver |
Transfer Template
The following are the transfer template APIs used in the sample code.
Warning
When transferring multiple templates, please do not call the same API multiple times; instead, combine them into a single request and call the API only once.
iOS - Objective-C:
- (void)transfer {
BRLMChannel *channel = [[BRLMChannel alloc] initWithWifiIPAddress:@"IPAddress.of.your.printer"];
BRLMPrinterDriverGenerateResult *driverGenerateResult = [BRLMPrinterDriverGenerator openChannel:channel];
if (driverGenerateResult.error.code != BRLMOpenChannelErrorCodeNoError ||
driverGenerateResult.driver == nil) {
NSLog(@"%@", @(driverGenerateResult.error.code));
return;
}
BRLMPrinterDriver *printerDriver = driverGenerateResult.driver;
NSURL *url = [[NSBundle mainBundle] URLForResource:@"YourFilename" withExtension:@"Extension"];
NSArray<NSURL *> *urls = [NSArray<NSURL *> arrayWithContentsOfURL:url];
BRLMTransferResult<NSURL*> *trasnferResult = [printerDriver transferTemplateFiles:urls progress:^(NSURL* current, int progress) {
//Write your action
}];
if (trasnferResult.code != BRLMTransferSummaryErrorAllSuccess) {
NSLog(@"Error - Transfer Templates: %@", @(trasnferResult.code));
}
else {
NSLog(@"Success - Transfer Templates");
}
[printerDriver closeChannel];
}
iOS - Swift:
func transfer() {
let channel = BRLMChannel(wifiIPAddress: "IPAddress.of.your.printer")
let generateResult = BRLMPrinterDriverGenerator.open(channel)
guard generateResult.error.code == BRLMOpenChannelErrorCode.noError,
let printerDriver = generateResult.driver else {
print("Error - Open Channel: \(generateResult.error.code)")
return
}
defer {
printerDriver.closeChannel()
}
guard
let url = Bundle.main.url(forResource: "YourFilename", withExtension: "Extension")
else {
print("Error - fail to load your file.")
return
}
let urls = [url]
let convertedCallback: ((URL, Int32) -> Void)? = { (url, progress) in
//Write your action
}
let trasnferResult = printerDriver.transferTemplateFiles(urls, progress: convertedCallback)
if trasnferResult.code != .allSuccess {
print("Error - Transfer Templates: \(trasnferResult.code)")
}
else {
print("Success - Transfer Templates")
}
}
Android:
public Transfer.Result<String> transfer() {
Channel channel = Channel.newWifiChannel("IPAddress.of.your.printer");
PrinterDriverGenerateResult generateResult = PrinterDriverGenerator.openChannel(channel);
if (generateResult.getError().getCode() != OpenChannelError.ErrorCode.NoError) {
Log.e("", "Error - Open Channel: " + generateResult.getError().getCode());
return;
}
PrinterDriver printerDriver = generateResult.getDriver();
List<String> files = new ArrayList<String>(){};
files.add("Your file");
Transfer.Result<String> transferResult = printerDriver.transferTemplateFiles(files, (sent, progressPercentage) -> {
//Write your action
});
if(transferResult.getErrorCode() != Transfer.SummaryErrorCode.AllSuccess) {
Log.d("", "Error - Transfer Template: " + transferResult.getErrorCode());
}
else {
Log.d("", "Success - Transfer Template");
}
printerDriver.closeChannel();
}
Android - kotlin:
fun transfer() {
val channel = Channel.newWifiChannel("IPAddress.of.your.printer")
val generateResult = PrinterDriverGenerator.openChannel(channel)
if (generateResult.error.code != OpenChannelError.ErrorCode.NoError) {
Log.e("", "Error - Open Channel: " + generateResult.error.code);
return
}
val printerDriver = generateResult.driver
val files: List<String> = listOf("your file path")
val transferResult = printerDriver.transferTemplateFiles(files) { name, progressPercentage ->
//Write your action
}
if(transferResult.errorCode != SummaryErrorCode.AllSuccess) {
Log.d("", "Error - Transfer Template: " + transferResult.errorCode);
}
else {
Log.d("", "Success - Transfer Template");
}
printerDriver.closeChannel()
}
Transfer Template with Security
For printers that have security features enabled and require authentication, use the secure connection methods with ChannelCredential. You need to specify the printer administrator password to establish a secure connection between the application and the printer.
iOS - Objective-C (Secure):
- (void)transferWithSecurity {
BRLMChannel *channel = [[BRLMChannel alloc] initWithWifiIPAddress:@"IPAddress.of.your.printer"];
BRLMChannelCredential *credential = [[BRLMChannelCredential alloc] initWithPrinterAdminPassword:@"YourPrinterPassword"];
BRLMPrinterDriverGenerateResult *driverGenerateResult = [BRLMPrinterDriverGenerator openChannel:channel withCredential:credential];
if (driverGenerateResult.error.code != BRLMOpenChannelErrorCodeNoError ||
driverGenerateResult.driver == nil) {
NSLog(@"%@", @(driverGenerateResult.error.code));
return;
}
BRLMPrinterDriver *printerDriver = driverGenerateResult.driver;
NSURL *url = [[NSBundle mainBundle] URLForResource:@"YourFilename" withExtension:@"Extension"];
NSArray<NSURL *> *urls = [NSArray<NSURL *> arrayWithContentsOfURL:url];
BRLMTransferResult<NSURL*> *trasnferResult = [printerDriver transferTemplateFiles:urls progress:^(NSURL* current, int progress) {
//Write your action
}];
if (trasnferResult.code != BRLMTransferSummaryErrorAllSuccess) {
NSLog(@"Error - Transfer Templates: %@", @(trasnferResult.code));
}
else {
NSLog(@"Success - Transfer Templates");
}
[printerDriver closeChannel];
}
iOS - Swift (Secure):
func transferWithSecurity() {
let channel = BRLMChannel(wifiIPAddress: "IPAddress.of.your.printer")
let credential = BRLMChannelCredential(printerAdminPassword: "YourPrinterPassword")
let generateResult = BRLMPrinterDriverGenerator.open(channel, with: credential)
guard generateResult.error.code == BRLMOpenChannelErrorCode.noError,
let printerDriver = generateResult.driver else {
print("Error - Open Channel: \(generateResult.error.code)")
return
}
defer {
printerDriver.closeChannel()
}
guard
let url = Bundle.main.url(forResource: "YourFilename", withExtension: "Extension")
else {
print("Error - fail to load your file.")
return
}
let urls = [url]
let convertedCallback: ((URL, Int32) -> Void)? = { (url, progress) in
//Write your action
}
let trasnferResult = printerDriver.transferTemplateFiles(urls, progress: convertedCallback)
if trasnferResult.code != .allSuccess {
print("Error - Transfer Templates: \(trasnferResult.code)")
}
else {
print("Success - Transfer Templates")
}
}
Android (Secure):
public Transfer.Result<String> transferWithSecurity() {
Channel channel = Channel.newWifiChannel("IPAddress.of.your.printer");
ChannelCredential credential = ChannelCredential.printerAdminPassword("YourPrinterPassword");
PrinterDriverGenerateResult generateResult = PrinterDriverGenerator.openChannelWithCredential(channel, credential);
if (generateResult.getError().getCode() != OpenChannelError.ErrorCode.NoError) {
Log.e("", "Error - Open Channel: " + generateResult.getError().getCode());
return;
}
PrinterDriver printerDriver = generateResult.getDriver();
List<String> files = new ArrayList<String>(){};
files.add("Your file");
Transfer.Result<String> transferResult = printerDriver.transferTemplateFiles(files, (sent, progressPercentage) -> {
//Write your action
});
if(transferResult.getErrorCode() != Transfer.SummaryErrorCode.AllSuccess) {
Log.d("", "Error - Transfer Template: " + transferResult.getErrorCode());
}
else {
Log.d("", "Success - Transfer Template");
}
printerDriver.closeChannel();
}
Android - kotlin (Secure):
fun transferWithSecurity() {
val channel = Channel.newWifiChannel("IPAddress.of.your.printer")
val credential = ChannelCredential.printerAdminPassword("YourPrinterPassword")
val generateResult = PrinterDriverGenerator.openChannelWithCredential(channel, credential)
if (generateResult.error.code != OpenChannelError.ErrorCode.NoError) {
Log.e("", "Error - Open Channel: " + generateResult.error.code)
return
}
val printerDriver = generateResult.driver
val files: List<String> = listOf("your file path")
val transferResult = printerDriver.transferTemplateFiles(files) { name, progressPercentage ->
//Write your action
}
if(transferResult.errorCode != SummaryErrorCode.AllSuccess) {
Log.d("", "Error - Transfer Template: " + transferResult.errorCode)
}
else {
Log.d("", "Success - Transfer Template")
}
printerDriver.closeChannel()
}
Print Template
The sample code shows how to print a template replacing a specified text object with a new text. Objects can be replaced using TemplateObjectReplacer.
The following are the print template APIs used in the sample code.
iOS - Objective-C:
- (void)printTemplate:(int)templateKey index:(NSUInteger)index text:(NSString *)newText encode:(BRLMTemplateObjectEncode)encode{
BRLMChannel *channel = [[BRLMChannel alloc] initWithWifiIPAddress:@"IPAddress.of.your.printer"];
BRLMPrinterDriverGenerateResult *driverGenerateResult = [BRLMPrinterDriverGenerator openChannel:channel];
if (driverGenerateResult.error.code != BRLMOpenChannelErrorCodeNoError ||
driverGenerateResult.driver == nil) {
NSLog(@"%@", @(driverGenerateResult.error.code));
return;
}
BRLMPrinterDriver *printerDriver = driverGenerateResult.driver;
BRLMPTTemplatePrintSettings *ptSettings = [[BRLMPTTemplatePrintSettings alloc] initDefaultPrintSettingsWithPrinterModel:BRLMPrinterModelPT_YOURS];
ptSettings.numCopies = 1;
//Create replacer if you want change objects
BRLMTemplateObjectReplacer *replacer = [[BRLMTemplateObjectReplacer alloc] initWithObjectIndex:index value:newText encode:encode];
NSArray<BRLMTemplateObjectReplacer *> *replacers = [NSArray arrayWithObject:replacer];
BRLMPrintError *printError = [printerDriver printTemplateWithKey:templateKey settings:ptSettings replacers:replacers];
if (printError.code != BRLMPrintErrorCodeNoError) {
NSLog(@"Error - Print Template: %@", @(printError.code));
}
else {
NSLog(@"Success - Print Template");
}
[printerDriver closeChannel];
}
iOS - Swift:
func printTemplate(templateKey: UInt, index:UInt, newText: String, eoncode:BRLMTemplateObjectEncode) {
let channel = BRLMChannel(wifiIPAddress: "IPAddress.of.your.printer")
let generateResult = BRLMPrinterDriverGenerator.open(channel)
guard generateResult.error.code == BRLMOpenChannelErrorCode.noError,
let printerDriver = generateResult.driver else {
print("Error - Open Channel: \(generateResult.error.code)")
return
}
defer {
printerDriver.closeChannel()
}
guard
let ptSettings = BRLMPTTemplatePrintSettings(defaultPrintSettingsWith: .YourPTModel)
else {
print("Error - fail to create ptSettings.")
return
}
ptSettings.numCopies = 1;
//Create replacer if you want change objects
let replacers = [BRLMTemplateObjectReplacer(objectIndex: index, value: newText, encode: eoncode)]
let printError = printerDriver.printTemplate(withKey: templateKey, settings: ptSettings, replacers: replacers)
if printError.code != .noError {
print("Error - Print Template: \(printError.code)")
}
else {
print("Success - Print Template")
}
}
Android - java:
void printTemplate(int templateKey, int index, String newText, TemplateObjectReplacer.Encode encode) {
Channel channel = Channel.newWifiChannel("IPAddress.of.your.printer");
PrinterDriverGenerateResult generateResult = PrinterDriverGenerator.openChannel(channel);
if (generateResult.getError().getCode() != OpenChannelError.ErrorCode.NoError) {
Log.e("", "Error - Open Channel: " + generateResult.getError().getCode());
return;
}
PrinterDriver printerDriver = generateResult.getDriver();
PTTemplatePrintSettings ptSettings = new PTTemplatePrintSettings(PrinterModel.YourPTModel);
ptSettings.setNumCopies(1);
//Create replacer if you want change objects
TemplateObjectReplacer replacer = new TemplateObjectReplacer(index, newText, encode);
ArrayList<TemplateObjectReplacer> replacers = new ArrayList<>();
replacers.add(replacer);
PrintError printError = printerDriver.printTemplate(templateKey, ptSettings, replacers);
if (printError.getCode() != PrintError.ErrorCode.NoError) {
Log.d("", "Error - Print Template: " + printError.getCode());
}
else {
Log.d("", "Success - Print Template");
}
printerDriver.closeChannel();
}
Android - kotlin:
fun printTemplate(templateKey: Int, index: Int, newText: String, encode: TemplateObjectReplacer.Encode) {
val channel = Channel.newWifiChannel("IPAddress.of.your.printer")
val generateResult = PrinterDriverGenerator.openChannel(channel)
if (generateResult.error.code != OpenChannelError.ErrorCode.NoError) {
Log.e("", "Error - Open Channel: " + result.getError().getCode());
return
}
val printerDriver = generateResult.driver
val ptSettings = PTTemplatePrintSettings(PrinterModel.YourPTModel)
ptSettings.numCopies = 1
//Create replacer if you want change objects
var replacer = ArrayList<TemplateObjectReplacer>()
replacer.add(TemplateObjectReplacer(index, newText, encode))
val printError = printerDriver.printTemplate(templateKey, ptSettings, replacer)
if(printError.code != PrintError.ErrorCode.NoError) {
Log.d("", "Error - Print Template: " + printError.getCode());
}
else {
Log.d("", "Success - Print Template");
}
driver.closeChannel()
}