印刷データを作成する
両SDKの違いを確認しStarXpand SDKへの移行を行ってください。
StarPRNT SDK
- 1. プリンターのエミュレーションを判定します。
- 2. ISCBBuilderクラスのインスタンスを作成します。
- 3. 印刷データの先頭でbeginDocument()メソッドを実行します。
- 4. 印刷する文字や画像の他、文字エンコーディングや国際文字の指定などのパラメータ、用紙カット指示などをappend...メソッドで追加していきます。
- 5. 最後にendDocument()メソッドを実行します。
- 6. commandsプロパティで印刷データを取得します。
- 7. 取得した印刷データを、SMPortクラスのwrite()メソッドでプリンターに送信します。
サンプルコード(GitHub)
ページ下部に実装例があります。
StarXpand SDK
- 1. StarXpandCommandBuilderクラスのインスタンスを作成します。
- 2. StarXpandCommandBuilderクラスのaddDocument()メソッドを実行します。
引数にはDocumentBuilderクラスのインスタンスを生成して指定します。 - 3. 2.で生成したStarXpandCommandBuilderインスタンスのaddPrinter()メソッドを実行します。
引数にはPrinterBuilderクラスのインスタンスを生成して指定します。 - 4. 3.で生成したPrinterBuilderインスタンスの以下のメソッドを使用して印刷内容や装飾などを追加していきます。
印刷するテキスト、バーコード、用紙カットなどの印刷処理: action...()メソッド (例: actionPrintText())
国際文字、下線、中央寄せなどのパラメータ: style...()メソッド (例: styleCharacterSpace())
PrinterBuilderに子要素のPrinterBuilderを追加: add()メソッド - 5. getCommands()メソッドで印刷データを取得します。
- 6. 取得した印刷データをprint(command:)メソッドでプリンターに送信します。
サンプルコード(GitHub)
ページ下部に実装例があります。
両SDKの比較
| StarPRNT SDK | StarXpand SDK | |
|---|---|---|
| プリンターエミュレーション [1] | 指定する | 自動判定 |
| 文字エンコード | 指定する | 自動判定 |
| 装飾の解除 [2] | 明示的に行う | 自動 |
| 印刷データ | バイナリ | テキスト |
| テンプレート印刷 | 非対応 | 対応 |
| ブラックマーク | 裏面のみ | 表面・裏面対応 |
[1] StarXpand SDKではプリンターエミュレーションが自動的に判定されるため、複数のプリンターモデルをサポートする場合でも、モデルごとに明示的にエミュレーションを指定する必要はありません。
[2] StarPRNT SDKでは、文字の装飾などを行った場合、装飾の解除も明示的に行う必要があります。 StarXpand SDKでは、PrinterBuilderを親子の階層構造にでき、子で適用した装飾は親に影響しないため、装飾は自動的に解除されます。
実装例
StarPRNT SDK
private func createPrinterCommand(emulation: StarIoExtEmulation, utf8: Bool ) -> Data {
let builder: ISCBBuilder = StarIoExt.createCommandBuilder(emulation)
builder.beginDocument()
if let logo = UIImage(named: "logo_01") {
builder.appendBitmap(logo, diffusion: false, width: 406, bothScale: true)
}
builder.append(SCBInternationalType.USA)
let encoding: String.Encoding
if utf8 == true {
encoding = String.Encoding.utf8
builder.append(SCBCodePageType.UTF8)
}
else {
encoding = String.Encoding.ascii
builder.append(SCBCodePageType.CP998)
}
builder.appendCharacterSpace(0)
builder.appendAlignment(SCBAlignmentPosition.center)
builder.append(("Star Clothing Boutique\n" +
"123 Star Road\n" +
"City, State 12345\n" +
"\n").data(using: encoding))
builder.appendAlignment(SCBAlignmentPosition.left)
builder.append(("Date:MM/DD/YYYY Time:HH:MM PM\n" +
"--------------------------------\n" +
"\n").data(using: encoding))
builder.appendEmphasis(true)
builder.append(("SALE \n").data(using: encoding))
builder.appendEmphasis(false)
builder.append(("SKU Description Total\n" +
"300678566 PLAIN T-SHIRT 10.99\n" +
"300692003 BLACK DENIM 29.99\n" +
"300651148 BLUE DENIM 29.99\n" +
"300642980 STRIPED DRESS 49.99\n" +
"300638471 BLACK BOOTS 35.99\n" +
"\n" +
"Subtotal 156.95\n" +
"Tax 0.00\n" +
"--------------------------------\n").data(using: encoding))
builder.append(("Total ").data(using: encoding))
builder.appendMultiple(2,height:2)
builder.append((" $156.95\n").data(using: encoding))
builder.appendMultiple(1,height:1)
builder.append(("--------------------------------\n" +
"\n" +
"Charge\n" +
"156.95\n" +
"Visa XXXX-XXXX-XXXX-0123\n" +
"\n").data(using: encoding))
builder.appendInvert(true)
builder.append(("Refunds and Exchanges\n").data(using: encoding))
builder.appendInvert(false)
builder.append(("Within ").data(using: encoding))
builder.appendUnderLine(true)
builder.append(("30 days").data(using: encoding))
builder.appendUnderLine(false)
builder.append((" with receipt\n" +
"And tags attached\n" +
"\n").data(using: encoding))
builder.appendAlignment(SCBAlignmentPosition.center)
builder.appendBarcodeData("0123456".data(using: String.Encoding.ascii), symbology: SCBBarcodeSymbology.JAN8, width: SCBBarcodeWidth.mode2, height: 40, hri: true)
builder.appendLineFeed(1)
builder.appendQrCodeData("Hello World.\n".data(using: String.Encoding.ascii), model: SCBQrCodeModel.no1, level: SCBQrCodeLevel.L , cell: 8)
builder.appendCutPaper(SCBCutPaperAction.partialCutWithFeed)
builder.endDocument()
let command = builder.commands.copy() as! Data
return command
}
StarXpand SDK
private func createPrinterCommand() -> String {
guard let logo = UIImage(named: "logo_01") else {
print("Failed to load \"logo_01.png\".")
return ""
}
let builder = StarXpandCommand.StarXpandCommandBuilder()
_ = builder.addDocument(StarXpandCommand.DocumentBuilder()
.addPrinter(StarXpandCommand.PrinterBuilder()
.actionPrintImage(StarXpandCommand.Printer.ImageParameter(image: logo, width: 406))
.styleInternationalCharacter(.usa)
.styleCharacterSpace(0)
.styleAlignment(.center)
.actionPrintText("Star Clothing Boutique\n" +
"123 Star Road\n" +
"City, State 12345\n" +
"\n")
.styleAlignment(.left)
.actionPrintText("Date:MM/DD/YYYY Time:HH:MM PM\n" +
"--------------------------------\n" +
"\n")
.add(
StarXpandCommand.PrinterBuilder()
.styleBold(true)
.actionPrintText("SALE \n")
)
.actionPrintText("SKU Description Total\n" +
"300678566 PLAIN T-SHIRT 10.99\n" +
"300692003 BLACK DENIM 29.99\n" +
"300651148 BLUE DENIM 29.99\n" +
"300642980 STRIPED DRESS 49.99\n" +
"300638471 BLACK BOOTS 35.99\n" +
"\n" +
"Subtotal 156.95\n" +
"Tax 0.00\n" +
"--------------------------------\n")
.actionPrintText("Total ")
.add(
StarXpandCommand.PrinterBuilder()
.styleMagnification(StarXpandCommand.MagnificationParameter(width: 2, height: 2))
.actionPrintText(" $156.95\n")
)
.actionPrintText("--------------------------------\n" +
"\n" +
"Charge\n" +
"156.95\n" +
"Visa XXXX-XXXX-XXXX-0123\n" +
"\n")
.add(
StarXpandCommand.PrinterBuilder()
.styleInvert(true)
.actionPrintText("Refunds and Exchanges\n")
)
.actionPrintText("Within ")
.add(
StarXpandCommand.PrinterBuilder()
.styleUnderLine(true)
.actionPrintText("30 days")
)
.actionPrintText(" with receipt\n" +
"And tags attached\n" +
"\n")
.styleAlignment(.center)
.actionPrintBarcode(
StarXpandCommand.Printer.BarcodeParameter(content: "0123456", symbology: .jan8)
.setBarDots(3)
.setHeight(5)
.setPrintHRI(true)
)
.actionFeedLine(1)
.actionPrintQRCode(
StarXpandCommand.Printer.QRCodeParameter(content: "Hello World.\n")
.setLevel(.l)
.setCellSize(8)
)
.actionCut(StarXpandCommand.Printer.CutType.partial)
)
)
return builder.getCommands()
}
各APIのStarPRNT SDKとStarXpand SDKへの対応状況は、対応API一覧をご確認ください。
両SDKの違いを確認しStarXpand SDKへの移行を行ってください。
StarPRNT SDK
- 1. プリンターのエミュレーションを判定します。
- 2. ICommandBuilderクラスのインスタンスを作成します。
- 3. 印刷データの先頭でbeginDocument()メソッドを実行します。
- 4. 印刷する文字や画像の他、文字エンコーディングや国際文字の指定などのパラメータ、用紙カット指示などをappend...メソッドで追加していきます。
- 5. 最後にendDocument()メソッドを実行します。
- 6. getCommands()メソッドで印刷データを取得します。
- 7. 取得した印刷データを、StarIOPortクラスのwritePort()メソッドでプリンターに送信します。
サンプルコード(GitHub)
ページ下部に実装例があります。
StarXpand SDK
- 1. StarXpandCommandBuilderクラスのインスタンスを作成します。
- 2. StarXpandCommandBuilderクラスのaddDocument()メソッドを実行します。
引数にはDocumentBuilderクラスのインスタンスを生成して指定します。 - 3. 2.で生成したStarXpandCommandBuilderインスタンスのaddPrinter()メソッドを実行します。
引数にはPrinterBuilderクラスのインスタンスを生成して指定します。 - 4. 3.で生成したPrinterBuilderインスタンスの以下のメソッドを使用して印刷内容や装飾などを追加していきます。
印刷するテキスト、バーコード、用紙カットなどの印刷処理: action...()メソッド (例: actionPrintText())
国際文字、下線、中央寄せなどのパラメータ: style...()メソッド (例: styleCharacterSpace())
PrinterBuilderに子要素のPrinterBuilderを追加: add()メソッド - 5. getCommands()メソッドで印刷データを取得します。
- 6. 取得した印刷データをprintAsync(command)メソッドでプリンターに送信します。
サンプルコード(GitHub)
ページ下部に実装例があります。
両SDKの比較
| StarPRNT SDK | StarXpand SDK | |
|---|---|---|
| プリンターエミュレーション [1] | 指定する | 自動判定 |
| 文字エンコード | 指定する | 自動判定 |
| 装飾の解除 [2] | 明示的に行う | 自動 |
| 印刷データ | バイナリ | テキスト |
| テンプレート印刷 | 非対応 | 対応 |
| ブラックマーク | 裏面のみ | 表面・裏面対応 |
[1] StarXpand SDKではプリンターエミュレーションが自動的に判定されるため、複数のプリンターモデルをサポートする場合でも、モデルごとに明示的にエミュレーションを指定する必要はありません。
[2] StarPRNT SDKでは、文字の装飾などを行った場合、装飾の解除も明示的に行う必要があります。 StarXpand SDKでは、PrinterBuilderを親子の階層構造にでき、子で適用した装飾は親に影響しないため、装飾は自動的に解除されます。
実装例
StarPRNT SDK
private fun createPrinterCommand(
emulation: StarIoExt.Emulation,
utf8: Boolean,
context: Context
): ByteArray {
val builder = StarIoExt.createCommandBuilder(emulation)
builder.beginDocument()
val logo = BitmapFactory.decodeResource(context.resources, R.drawable.logo_01)
builder.appendBitmap(logo, false, 406, true)
builder.appendInternational(ICommandBuilder.InternationalType.USA)
val encoding = if (utf8) {
builder.appendCodePage(ICommandBuilder.CodePageType.UTF8)
Charsets.UTF_8
} else {
builder.appendCodePage(ICommandBuilder.CodePageType.CP998)
Charsets.US_ASCII
}
builder.appendCharacterSpace(0)
builder.appendAlignment(ICommandBuilder.AlignmentPosition.Center)
builder.append(
"Star Clothing Boutique\n123 Star Road\nCity, State 12345\n\n".toByteArray(
encoding
)
)
builder.appendAlignment(ICommandBuilder.AlignmentPosition.Left)
builder.append(
"Date:MM/DD/YYYY Time:HH:MM PM\n--------------------------------\n\n".toByteArray(
encoding
)
)
builder.appendEmphasis(true)
builder.append("SALE \n".toByteArray(encoding))
builder.appendEmphasis(false)
builder.append((
"SKU Description Total\n" +
"300678566 PLAIN T-SHIRT 10.99\n" +
"300692003 BLACK DENIM 29.99\n" +
"300651148 BLUE DENIM 29.99\n" +
"300642980 STRIPED DRESS 49.99\n" +
"300638471 BLACK BOOTS 35.99\n" +
"\n" +
"Subtotal 156.95\n" +
"Tax 0.00\n" +
"--------------------------------\n").toByteArray(encoding)
)
builder.append("Total ".toByteArray(encoding))
builder.appendMultiple(2, 2)
builder.append(" $156.95\n".toByteArray(encoding))
builder.appendMultiple(1, 1)
builder.append((
"--------------------------------\n" +
"\n" +
"Charge\n" +
"156.95\n" +
"Visa XXXX-XXXX-XXXX-0123\n" +
"\n").toByteArray(encoding)
)
builder.appendInvert(true)
builder.append("Refunds and Exchanges\n".toByteArray(encoding))
builder.appendInvert(false)
builder.append("Within ".toByteArray(encoding))
builder.appendUnderLine(true)
builder.append("30 days".toByteArray(encoding))
builder.appendUnderLine(false)
builder.append(" with receipt\nAnd tags attached\n\n".toByteArray(encoding))
builder.appendAlignment(ICommandBuilder.AlignmentPosition.Center)
builder.appendBarcode(
"0123456".toByteArray(Charsets.US_ASCII),
ICommandBuilder.BarcodeSymbology.JAN8,
ICommandBuilder.BarcodeWidth.Mode2,
40,
true
)
builder.appendLineFeed(1)
builder.appendQrCode(
"Hello World.\n".toByteArray(Charsets.US_ASCII),
ICommandBuilder.QrCodeModel.No1,
ICommandBuilder.QrCodeLevel.L,
8
)
builder.appendCutPaper(ICommandBuilder.CutPaperAction.PartialCutWithFeed)
builder.endDocument()
return builder.commands
}
StarXpand SDK
private fun createPrinterCommand(): String {
val logo = BitmapFactory.decodeResource(resources, R.drawable.logo_01)
val builder = StarXpandCommandBuilder()
builder.addDocument(
DocumentBuilder()
.addPrinter(
PrinterBuilder()
.actionPrintImage(ImageParameter(logo, 406))
.styleInternationalCharacter(InternationalCharacterType.Usa)
.styleCharacterSpace(0.0)
.styleAlignment(com.starmicronics.stario10.starxpandcommand.printer.Alignment.Center)
.actionPrintText(
"Star Clothing Boutique\n" +
"123 Star Road\n" +
"City, State 12345\n" +
"\n",
).styleAlignment(com.starmicronics.stario10.starxpandcommand.printer.Alignment.Left)
.actionPrintText(
"Date:MM/DD/YYYY Time:HH:MM PM\n" +
"--------------------------------\n" +
"\n",
).add(
PrinterBuilder()
.styleBold(true)
.actionPrintText("SALE\n"),
).actionPrintText(
"SKU Description Total\n" +
"300678566 PLAIN T-SHIRT 10.99\n" +
"300692003 BLACK DENIM 29.99\n" +
"300651148 BLUE DENIM 29.99\n" +
"300642980 STRIPED DRESS 49.99\n" +
"300638471 BLACK BOOTS 35.99\n" +
"\n" +
"Subtotal 156.95\n" +
"Tax 0.00\n" +
"--------------------------------\n",
).actionPrintText("Total ")
.add(
PrinterBuilder()
.styleMagnification(MagnificationParameter(2, 2))
.actionPrintText(" $156.95\n"),
).actionPrintText(
"--------------------------------\n" +
"\n" +
"Charge\n" +
"156.95\n" +
"Visa XXXX-XXXX-XXXX-0123\n" +
"\n",
).add(
PrinterBuilder()
.styleInvert(true)
.actionPrintText("Refunds and Exchanges\n"),
).actionPrintText("Within ")
.add(
PrinterBuilder()
.styleUnderLine(true)
.actionPrintText("30 days"),
).actionPrintText(" with receipt\n")
.actionPrintText(
"And tags attached\n" +
"\n",
).styleAlignment(com.starmicronics.stario10.starxpandcommand.printer.Alignment.Center)
.actionPrintBarcode(
BarcodeParameter("0123456", BarcodeSymbology.Jan8)
.setBarDots(3)
.setHeight(5.0)
.setPrintHri(true),
).actionFeedLine(1)
.actionPrintQRCode(
QRCodeParameter("Hello, World\n")
.setLevel(QRCodeLevel.L)
.setCellSize(8),
).actionCut(CutType.Partial),
),
)
return builder.getCommands()
}
各APIのStarPRNT SDKとStarXpand SDKへの対応状況は、対応API一覧をご確認ください。

