我需要一个矩形,其中包含一些上下文作为文本.我必须将矩形旋转到某个Angular ,比如说逆时针旋转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的输出:

enter image description here

推荐答案

随着你对AffineTransform transform人的介绍,你已经走上了正确的道路.但是你必须应用旋转before添加你想要旋转的内容.此处的转换不会更改已添加的内容,而是更改即将添加的内容的坐标系.

此外,您需要使transform围绕一个合理的旋转中心旋转.您的实例围绕坐标系的原点旋转,即页面的左下角,但您显然希望围绕矩形的左下角旋转.

因此:

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);
    }
}

(100 test 101)

You may have to add 100 as second parameter of the 101 constructor. In iText 7.2.x (which I used here) that parameter has been removed while it appears to still be required in the version 7.1.0 you use.

结果:

screenshot

Java相关问答推荐

int Array Stream System. out. print方法在打印Java8时在末尾添加% sign

Spring boot:Bean和动态扩展器

如何打印本系列的第n项y=-(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5)...Java中的(1+2+3+4...+n)

嵌入式ActiveMQ Artemis Web控制台加载错误

Java 21 struct 化连接货币,需要可预知的子任务异常排序

我无法获取我的Java Spring应用程序的Logback跟踪日志(log)输出

使用REST客户端和对象映射器从字符串反序列化Json

在Spring Boot应用程序中导致";MediaTypeNotSupportdException&qot;的映像上载

为什么Spring Boot项目无法为基于MySQL的CRUD应用程序找到从JPARepository接口扩展的ProductRepository?

%This内置函数示例

JNI:将代码打包成自包含的二进制文件

JavaFX:无论何时显示应用程序,如何更改组件/ node 位置?

如何处理两个几乎相同的XSD文件?

从12小时开始的日期模式

如何调整JButton的大小以适应图标?

在权限列表中找不到我的应用程序

我无法在我的Spring Boot应用程序中导入CSV依赖项

验证没有';t work on Hibernate Entity';s字段

JOOQ:批处理CRUD操作使用动态表定义,如何?

如何转换Vector<;对象>;转换为int?