我需要在热敏打印机中逐行打印。在 %n 处换行我想在打印时保留字符串模式.. 我不太熟悉打印机 api 和图形 2d api.. 我需要修复这 1 小时的时间.. 非常感谢您的快速回答..在此先感谢我的字符串格式是这样的:
String printStat =
" ***** %n"
+ " W*** OF ** AND ***** %n"
+ " 4/400 kfjkasjfdkas ajdksa %n"
+ " aksdka ajke ajeklaje kajke ka a %n"
+ " Date: "+now.get(Calendar.DAY_OF_MONTH)+"/"+(now.get(Calendar.MONTH)+1)+"/"+now.get(Calendar.YEAR)+" Time: "+now.get(Calendar.HOUR_OF_DAY)+":"+now.get(Calendar.MINUTE)+"%n"
+ "--------------------------------------%n"
+ " Name Qty Price %n"
+ "--------------------------------------%n";
打印方法:
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
/* We'll assume that Jav2D is available. Create a copy
* of it so that we can pass the original Graphics
* instance to the PageFormat instance.
*/
Graphics2D g2d = (Graphics2D) graphics.create();
/* Move the origin from the corner of the Paper to the corner
* of the imageable area.
*/
g2d.translate(format.getImageableX(), format.getImageableY());
/* Set the text color.
*/
g2d.setPaint(Color.black);
g2d.setFont(new Font("Arial", Font.BOLD, 10));
/* Use a LineBreakMeasurer instance to break our text into
* lines that fit the imageable area of the page.
*/
Point2D.Float pen = new Point2D.Float();
AttributedCharacterIterator charIterator = mStyledText.getIterator();
//LineBreakMeasurer measurer = new LineBreakMeasurer(charIterator, g2d.getFontRenderContext());
LineBreakMeasurer measurer = new LineBreakMeasurer(charIterator, g2d.getFontRenderContext());
float wrappingWidth = (float) format.getImageableWidth();
while (measurer.getPosition() < charIterator.getEndIndex()) {
TextLayout layout = measurer.nextLayout(wrappingWidth);
pen.y += layout.getAscent();
float dx = layout.isLeftToRight() ? 0 : (wrappingWidth - layout.getAdvance());
layout.draw(g2d, pen.x + dx, pen.y);
pen.y += layout.getDescent() + layout.getLeading();
}
g2d.dispose();
g2d = null;
/* Calling the PageFormat is not part of the printing API,
* but it is a useful convention. In this example PageFormat
* does not implement Printable and so it is not invoked here.
* In later examples, PageFormat will implement Printable.
*/
try {
Printable formatPainter = (Printable) format;
formatPainter.print(graphics, format, pageIndex);
/* Nothing to do here. The PageFormat has nothing to print.
*/
} catch (ClassCastException exception) {
}
return Printable.PAGE_EXISTS;
}