@Override public void draw(MyLayoutPageContext pageContext, double x, double y) throws IOException { x += posX; y += posY; boolean verticalWritingMode = font.isVertical(); YiPdfPage page = pageContext.getPdfPage(); if (lineTag != null) { page.beginTextTag(lineTag.makeChild("Span")); } page.setFont(font); page.setFontSize(fontSize); page.setCharSpace(letterSpacing); page.setTextColor(color); if (transparentFlag) { page.setTextRenderingMode(3); } page.drawText( !verticalWritingMode ? x + letterSpacing / 2 : x, !verticalWritingMode ? y : y + letterSpacing / 2, text); if (transparentFlag) { page.setTextRenderingMode(0); } if (decoration != null) { page.setLineWidth(1); page.setDashPattern(null, 0); page.setLineCap(0); page.setDrawColor(color); page.drawLine( x, y, x + (!verticalWritingMode ? travel : 0), y + (!verticalWritingMode ? 0 : travel)); } if (lineTag != null) { page.endTextTag(); } if (beforeRp != null) { if (!verticalWritingMode) { beforeRp.setPos(-beforeRp.getTravel(), -fontUpperPerpend + beforeRp.getLowerPerpend()); } else { beforeRp.setPos(fontUpperPerpend - beforeRp.getLowerPerpend(), -beforeRp.getTravel()); } pageContext.addRuby(beforeRp, x, y); } if (rubyList != null) { for (MyLayoutInlineText ruby : rubyList) { if (!verticalWritingMode) { ruby.setPos(ruby.getRubyTravelDiff(), -fontUpperPerpend + ruby.getLowerPerpend()); } else { ruby.setPos(fontUpperPerpend - ruby.getLowerPerpend(), ruby.getRubyTravelDiff()); } pageContext.addRuby(ruby, x, y); } } if (afterRp != null) { if (!verticalWritingMode) { afterRp.setPos(this.getTravel(), -fontUpperPerpend + afterRp.getLowerPerpend()); } else { afterRp.setPos(fontUpperPerpend - afterRp.getLowerPerpend(), getTravel()); } pageContext.addRuby(afterRp, x, y); } if (rubyLastFlag) { pageContext.invokeRuby(); } }