Skip to content

Printing with P-touch Template

Overview

This feature enables replacing the texts and printing by transferring a predefined template via the following steps.

  1. Create a template with P-touch Editor (*.pd3, *.pdz, *.blf) (*1)
  2. Transfer the template to a printer
  3. 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.

iOS Android
transferTemplateFiles:(NSArray )urls progress:(void (^)(NSURL current, int progress))progress; transferTemplateFiles(final List paths, [TransferProgressCallback](#transferprogresscallback) progress);

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()
}

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 Android
BRLMTemplateObjectReplacer TemplateObjectReplacer
printTemplateWithKey:(NSUInteger)key settings:(id)settings replacers:(NSArray*)replacers printTemplate(final Integer key, final ITemplatePrintSettings printSettings, final ArrayList replacers)

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()
}