温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - Superimposing a landscape page with 90 degree rotation onto a landscape page with 0 rotation
c# itext7

c# - 将旋转90度的横向页面叠加到旋转0度的横向页面上

发布于 2020-05-05 09:33:20

我已经使用了叠加示例将一个pdf叠加到另一个。尝试将旋转90度的源文件中的页面叠加到旋转0度但横向的目标页面上时遇到麻烦(它宽于高)。

当我第一次尝试在示例中对内容进行标记时,如左图所示,它使内容旋转-90,如下图所示。当我尝试设置目标页面的旋转角度时,源内容放置在正确的方向,但是目标页面已经旋转(下图中的正确示例)。

var sourcePageRotation = sourcePage.GetRotation();
destinationPage.SetRotation(sourcePageRotation);

如何在不实际更改显示值的情况下操纵源页面或目标页面以更改旋转值?

在此处输入图片说明

查看更多

提问者
Alexander Don'valderath
被浏览
26
mkl 2020-02-18 20:21

(正如您所引用的Java示例一样,我还将引用iText for Java。)

SuperImpose示例中,要叠加的页面使用

canvas.addXObject(page, 0, 0);

但也有其他PdfCanvas.addXObject超载

public PdfCanvas addXObject(PdfXObject xObject, float a, float b, float c, float d, float e, float f)

6 floats为仿射变换施加到x对象,例如旋转。因此,您可以旋转从源文档导入的页面XObject以匹配目标文档页面的方向,例如,替换

canvas.addXObject(page, 0, 0);

通过

canvas.addXObject(page, 0, 1, -1, 0, page.getHeight(), 0);

或者,如果这样会使页面内容上下颠倒,则通过

canvas.addXObject(page, 0, -1, 1, 0, 0, page.getWidth());

就像您引用的示例一样,在此我假设所涉及页面的左下角是各自的坐标系原点。如果这一假设是错误的,则需要float在上述替换中分别调整最后两个参数。