上标或下标指的是一行中位置比文本略高或略低的数字。例如,设置数字的平方或立方时,需要用到上标,而输入化学方程式时,则需要用到下标。本文将使用Java代码来演示如何在PDF文档中绘制上标文本和下标文本。
需要注意的是,本教程会用到一个名为 Free Spire.PDF for Java 的控件。在运行代码前,需将控件里的Jar包导入IDEA中。可通过 E-iceblue中文官网 下载产品包,然后手动导入;也可直接在Maven pom.xml里引用以下依赖。
<repositories>
<repository>
<id>com.e-iceblue</id>
<url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf.free</artifactId>
<version>3.9.0</version>
</dependency>
</dependencies>
代码示例
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import java.awt.*;
import java.awt.geom.*;
public class SuperscriptText {
public static void main(String[] args) {
//创建PdfDocument实例
PdfDocument doc = new PdfDocument();
//添加一个页面
PdfPageBase page = doc.getPages().add();
//设置字体
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", Font.ITALIC,20));
PdfSolidBrush brush = new PdfSolidBrush(new PdfRGBColor(Color.black));
String text = "ABC";
//绘制上标
DrawSuperscript(page, text, font, brush);
//绘制下标
DrawSubscript(page, text, font, brush);
String result="output/superScriptAndSubScript.pdf";
//保存文档
doc.saveToFile(result);
}
private static void DrawSuperscript(PdfPageBase page,String text,PdfTrueTypeFont font,PdfSolidBrush brush)
{
//设置x,y坐标初始值
float x = 120f;
float y = 100f;
page.getCanvas().drawString(text, font, brush, new Point2D.Float(x, y));
//计算文本的尺寸
Dimension2D size = font.measureString(text);
//设置上标的X坐标
x += size.getWidth();
//设置格式为上标
PdfStringFormat format = new PdfStringFormat();
format.setSubSuperScript(PdfSubSuperScript.Super_Script);
//绘制上标
text = "23";
page.getCanvas().drawString(text, font, brush, new Point2D.Float(x, y), format);
}
private static void DrawSubscript(PdfPageBase page, String text, PdfTrueTypeFont font,PdfSolidBrush brush)
{
//设置x,y坐标初始值
float x = 120f;
float y = 150f;
page.getCanvas().drawString(text, font, brush, new Point2D.Float(x, y));
//计算文本的尺寸
Dimension2D size = font.measureString(text);
//设置上标的X坐标
x += size.getWidth();
//设置格式为下标
PdfStringFormat format = new PdfStringFormat();
format.setSubSuperScript(PdfSubSuperScript.Sub_Script);
//绘制下标
text = "56";
page.getCanvas().drawString(text, font, brush, new Point2D.Float(x, y), format);
}
}
结果文档