【问题标题】:Rotate text in pdfbox with java [closed]使用java旋转pdfbox中的文本[关闭]
【发布时间】:2018-08-28 09:23:12
【问题描述】:

我想用 pdfbox 旋转文本,该文本将在图片中的一行上方

【问题讨论】:

  • 请附上你用来画线的代码。

标签: java javafx javafx-8 pdfbox


【解决方案1】:

由于你没有提供你的画线代码,我在这里自己画了一条线。您可能需要根据自己的情况调整它。

要将文本旋转到行上方,您必须更改文本矩阵或当前转换矩阵以旋转以下内容,例如像这样:

PDDocument doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
PDPageContentStream cos = new PDPageContentStream(doc, page);
cos.transform(Matrix.getRotateInstance(-Math.PI / 6, 100, 650));
cos.moveTo(0, 0);
cos.lineTo(125, 0);
cos.stroke();
cos.beginText();
String text = "0.72";
cos.newLineAtOffset(50, 5);
cos.setFont(PDType1Font.HELVETICA_BOLD, 12);
cos.showText(text);
cos.endText();
cos.close();
doc.save("TextOnLine.pdf");
doc.close();

(RotatedTextOnLine 测试testRotatedTextOnLineForCedrickKapema)

我选择使用当前的变换矩阵,因为它允许我旋转一条水平线和文本。

结果:

【讨论】:

  • 如果只有点 (x1,y1) 和 (x2,y2),使用 Math.atan2(y2 - y1, x2 - x1) 获取角度,使用 Math.sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1))) 获取线长。
  • 当我们做rotationInstance的时候,我们需要在tx和ty中放什么数据?
  • @Michel “当我们制作旋转实例时,我们需要在 tx 和 ty 中放入哪些数据?” - 根据 javadocs,getRotateInstance 返回 具有旋转和 x/y 平移的新矩阵。所以这个方法实际上返回了一个 translate-and-rotate 实例。因此,如果您只想围绕当前坐标系原点旋转,请使用 0,0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
相关资源
最近更新 更多