我必须有一个矩形,其中包含一些上下文作为文本。我必须将矩形旋转到某个角度(例如逆时针 90'),这样内容也会旋转。然而,当我编写这段代码时,它只显示一个矩形。
这是代码:
package main;
import java.io.FileNotFoundException;
import com.itextpdf.kernel.geom.AffineTransform;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.property.Property;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.VerticalAlignment;
public class main {
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
String dest = "C:\\Users\\beast\\Desktop\\samplePdf";
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfPage page = pdf.addNewPage();
PdfCanvas pdfCanvas = new PdfCanvas(page);
Rectangle rect1 = new Rectangle(183, 488, 180, 32);
// cordinates after rotation 90' counter clockwise
Rectangle rect2 = new Rectangle(151, 488, 32, 180);
pdfCanvas.rectangle(rect1);
pdfCanvas.stroke();
Canvas canvas = new Canvas(pdfCanvas, pdf, rect1);
Text title = new Text("Thbvhs ybhsvb");
Paragraph p = new Paragraph().add(title);
canvas.add(p);
AffineTransform transform=AffineTransform.getRotateInstance((float)(Math.PI/2));
pdfCanvas.concatMatrix(transform);
canvas.close();
canvas=new Canvas(pdfCanvas, pdf, rect2);
pdfCanvas.rectangle(rect2);
pdfCanvas.stroke();
canvas.add(p);
canvas.close();
pdf.close();
}
}
这是 pdf 的输出:
随着您的介绍AffineTransform transform
你已经走在正确的道路上了。但你必须应用旋转before添加您想要旋转的内容。这里的转换不会更改已添加的内容,而是更改即将出现的内容的坐标系。
另外你需要做transform
围绕合理的旋转中心旋转。您的实例围绕坐标系的原点(即页面的左下角)旋转,但您显然希望围绕矩形的左下角旋转。
Thus:
try (PdfDocument pdf = new PdfDocument(new PdfWriter("RotatedForAnkushGupta.pdf"))) {
PdfPage page = pdf.addNewPage();
PdfCanvas pdfCanvas = new PdfCanvas(page);
Rectangle rect1 = new Rectangle(183, 488, 180, 32);
AffineTransform transform = AffineTransform.getRotateInstance(Math.PI/2, rect1.getX(), rect1.getY());
pdfCanvas.concatMatrix(transform);
pdfCanvas.rectangle(rect1);
pdfCanvas.stroke();
try (Canvas canvas = new Canvas(pdfCanvas, rect1)) {
Text title = new Text("Thbvhs ybhsvb");
Paragraph p = new Paragraph().add(title);
canvas.add(p);
}
}
(旋转一些内容 test testForAnkushGupta
)
您可能需要添加pdf
作为第二个参数Canvas
构造函数。在 iText 7.2.x(我在这里使用的)中,该参数已被删除,但在您使用的版本 7.1.0 中似乎仍然需要该参数。
结果:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)