【发布时间】:2018-08-28 09:23:12
【问题描述】:
我想用 pdfbox 旋转文本,该文本将在图片中的一行上方
【问题讨论】:
-
请附上你用来画线的代码。
标签: java javafx javafx-8 pdfbox
我想用 pdfbox 旋转文本,该文本将在图片中的一行上方
【问题讨论】:
标签: java javafx javafx-8 pdfbox
由于你没有提供你的画线代码,我在这里自己画了一条线。您可能需要根据自己的情况调整它。
要将文本旋转到行上方,您必须更改文本矩阵或当前转换矩阵以旋转以下内容,例如像这样:
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)
我选择使用当前的变换矩阵,因为它允许我旋转一条水平线和文本。
结果:
【讨论】:
Math.atan2(y2 - y1, x2 - x1) 获取角度,使用 Math.sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1))) 获取线长。
getRotateInstance 返回 具有旋转和 x/y 平移的新矩阵。所以这个方法实际上返回了一个 translate-and-rotate 实例。因此,如果您只想围绕当前坐标系原点旋转,请使用 0,0。