所以我的问题是,究竟怎样的setRotateContent()的作品
由于有点背景的,你需要知道每个PDF页面包含一个属性旋转被指定为“的显示或打印时页面顺时针旋转的度数,其值应为90的倍数。默认值:0。
如果你想添加一些具有非平凡旋转值(即360倍数)的网页,因此,有两种不同的情况:
- 要么你想无论页面最终如何旋转,在页面坐标系统的某个位置和方向上添加一些东西,或者您想在相对于页面显示方式的位置添加内容。
前者是微不足道的,只需要使用指定的坐标和方向,后者要求您阅读旋转值,并将其计入你的坐标和角度。
iText在这里试图帮助你,并为setRotateContent(true)
,首先添加一个变换overcontent和undercontent,让您只需继续选择坐标和角度,就好像没有页面旋转涉及。
看起来后一种情况已经被认为比前者更频繁地发生。因此,默认RotateContent
值是true
。因此,在前一种情况下,您实际上必须使用setRotateContent(false)
将其关闭。
由于问题是如何工作的准确:这是执行以初始化undercontent和overcontent ByteBuffer
表示的方法:
void applyRotation(PdfDictionary pageN, ByteBuffer out) {
if (!rotateContents)
return;
Rectangle page = reader.getPageSizeWithRotation(pageN);
int rotation = page.getRotation();
switch (rotation) {
case 90:
out.append(PdfContents.ROTATE90);
out.append(page.getTop());
out.append(' ').append('0').append(PdfContents.ROTATEFINAL);
break;
case 180:
out.append(PdfContents.ROTATE180);
out.append(page.getRight());
out.append(' ');
out.append(page.getTop());
out.append(PdfContents.ROTATEFINAL);
break;
case 270:
out.append(PdfContents.ROTATE270);
out.append('0').append(' ');
out.append(page.getRight());
out.append(PdfContents.ROTATEFINAL);
break;
}
}
(PdfStamperImp
)
与
static final byte ROTATE90[] = DocWriter.getISOBytes("0 1 -1 0 ");
static final byte ROTATE180[] = DocWriter.getISOBytes("-1 0 0 -1 ");
static final byte ROTATE270[] = DocWriter.getISOBytes("0 -1 1 0 ");
static final byte ROTATEFINAL[] = DocWriter.getISOBytes(" cm\n");
(PdfContents
)
PS:虽然RotateContent
属性控制这些转换是否被添加到该overcontent和undercontent与否,存在一种用于注释类似的机制不能由被禁用该属性,比照。 this answer。
来源
2017-01-23 10:54:32
mkl
您可以添加简码的代码吗?开始一个新项目,只添加足够的代码来显示你在做什么和看到什么。这应该让你围绕你的限制,因为否则你将不被允许在Stack Overflow上发布问题...... –