首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iText image.setRotationDegrees()不保持一致的原点

iText image.setRotationDegrees()不保持一致的原点
EN

Stack Overflow用户
提问于 2018-09-03 16:00:10
回答 1查看 284关注 0票数 1

我正在使用iText for Java (5.5.13),并且正在使用Image进行旋转PDFTemplates的实验。问题是,当我旋转图像时,我无法理解iText用于原点的是什么(如果我愚蠢的话,我会提前道歉)。

附加的是我正在使用的代码

  • 我创建了一个PDFTemplate
  • 用一些随意的颜色填充它
  • 从此模板创建图像
  • 旋转图像90度
  • 设置图像的绝对和弦
  • 添加到作者

第二个矩形再次重复,但这次只旋转了30度。

这两种形状之间不应该有共同的起源吗?(看上去也有不想要的翻译)

代码语言:javascript
复制
// 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();

为了添加背景,我这样做是因为我希望能够将文本和图像封装在一个可旋转和可定位的包含(具有固定维数的图像类)中,然后我可以使用它来建立页面内布局的模型(目的是尝试一个word-art算法,而不是像wordle的)。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-10 11:03:30

这两种形状之间不应该有共同的起源吗?(看上去也有不想要的翻译)

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

事实并非如此。相反,您可以想象模板被旋转,然后确定边界框(边界与页面边缘平行),并且这个边界框的左下角被定位在使用Image.setAbsolutePosition设置的坐标处。

这一点通过绘制更多的矩形变得更加明显,例如0°、15°、30°、45°、60°、75°和90°:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52153094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档