Example #1
0
 public MyLayoutInlineText(
     YiPdfFont font,
     double fontSize,
     double letterSpacing,
     YiPdfColor color,
     String text,
     double travel,
     YiPdfTag lineTag,
     Double lineHeight,
     DecorationType decoration) {
   this.font = font;
   this.fontSize = fontSize;
   this.letterSpacing = letterSpacing;
   this.color = color;
   this.text = text;
   this.travel = travel;
   this.lineTag = lineTag;
   this.lineHeight = lineHeight;
   this.decoration = decoration;
   lowerPerpend = fontSize * font.getLowerPerpend('A') / 1000;
   upperPerpend = fontSize * font.getUpperPerpend('A') / 1000;
   fontLowerPerpend = lowerPerpend;
   fontUpperPerpend = upperPerpend;
   if (lineHeight != null) {
     double h = upperPerpend - lowerPerpend;
     if (h < lineHeight) {
       upperPerpend += (lineHeight - h) / 2;
       lowerPerpend = upperPerpend - lineHeight;
     }
   }
 }
Example #2
0
 public List<MyLayoutInlineText> explode() {
   List<MyLayoutInlineText> result = new ArrayList<MyLayoutInlineText>();
   for (int i = 0; i < text.length(); ++i) {
     result.add(
         new MyLayoutInlineText(
             font,
             fontSize,
             letterSpacing,
             color,
             text.substring(i, i + 1),
             letterSpacing + fontSize * font.getTravel(text.charAt(i)) / 1000,
             lineTag,
             lineHeight,
             decoration));
   }
   return result;
 }
Example #3
0
 @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();
   }
 }