我正在使用iText for Java(5.5.13),并且正在尝试使用Image类旋转PDFTemplates。问题是,旋转图像时,我无法理解iText用于原点的功能(如果我很笨,我会提前道歉)。

附件是我正在使用的代码


我创建一个PDFTemplate
用任意颜色填充它
从此模板创建图像
将影像旋转90度
设置图像的绝对坐标
添加到作者


使用第二个矩形再次重复,但是这次仅旋转了30度。

两种形状之间不应该有共同的起源吗?
(似乎也有不需要的翻译)

// step 1
Rectangle pageSize = PageSize.A4;
Document document = new Document(pageSize);

// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(OUTPUT_FILENAME));

// step 3
document.open();

// step 4
float boxWidth = 200;
float boxHeight = 50;
float xStart = pageSize.getWidth()/2;
float yStart = pageSize.getHeight()/2;

// Add one filled rectangle rotated 90 degrees
{
    PdfContentByte canvas = writer.getDirectContent();
    PdfTemplate textTemplate = canvas.createTemplate(boxWidth, boxHeight);
    textTemplate.saveState();
    textTemplate.setColorFill(BaseColor.RED);
    textTemplate.rectangle(0, 0, boxWidth, boxWidth);
    textTemplate.fill();
    textTemplate.restoreState();

    Image img = Image.getInstance(textTemplate);
    img.setInterpolation(true);
    img.scaleAbsolute(boxWidth, boxHeight);
    img.setAbsolutePosition(xStart, yStart);
    img.setRotationDegrees(90);
    writer.getDirectContent().addImage(img);
}

// And another rotated 30 degrees
{
    PdfContentByte canvas = writer.getDirectContent();
    PdfTemplate textTemplate = canvas.createTemplate(boxWidth, boxHeight);
    textTemplate.saveState();
    textTemplate.setColorFill(BaseColor.BLACK);
    textTemplate.rectangle(0, 0, boxWidth, boxWidth);
    textTemplate.fill();
    textTemplate.restoreState();

    Image img = Image.getInstance(textTemplate);
    img.setInterpolation(true);
    img.scaleAbsolute(boxWidth, boxHeight);
    img.setAbsolutePosition(xStart, yStart);
    img.setRotationDegrees(30);
    writer.getDirectContent().addImage(img);
}

// step 5
document.close();




只是为了添加背景,我这样做是因为我希望能够将文本和图像包装在一个可旋转且可定位的包含对象(具有固定尺寸的图像类)中,然后将其用于建立一个模型在页面内的位置进行布局(以尝试使用艺术算法而不是像wordle一样)。

谢谢!

最佳答案

两种形状之间不应该有共同的起源吗? (似乎也有不需要的翻译)


您在这里的隐含假设似乎是先放置模板然后围绕某个明显的特殊点旋转模板,例如模板的左下角。

不是这种情况。相反,您可以想象模板已旋转,然后确定边界框(其边缘与页面边缘平行),并且此边界框的左下角位于使用Image.setAbsolutePosition设置的坐标处。

通过绘制更多矩形,例如适用于0°,15°,30°,45°,60°,75°和90°:

java - iText image.setRotationDegrees()不一致-LMLPHP

关于java - iText image.setRotationDegrees()不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52153094/

10-13 08:24