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

Superimposing a landscape page with 90 degree rotation onto a landscape page with 0 rotation

我使用 superimpose example 将一个 pdf 叠加到另一个上。我 运行 在尝试将旋转 90 度的源文件中的页面叠加到目标页面上时遇到了一些麻烦,该目标页面具有 0 度旋转但横向(宽度大于高度)。

当我第一次尝试像示例中那样标记内容时,内容旋转了 -90,如下图左侧示例所示。当我尝试设置目标页面的旋转时,源内容被放置在正确的方向但目标页面已经转动(下图中右侧的示例)。

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

如何在不实际更改其显示方式的情况下操作源页面或目标页面来更改旋转值?

(正如您引用的 Java 示例,我还将参考 iText 的 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 个 float 表示应用于 XObject 的仿射变换,例如一个旋转。因此,您可以从源文档旋转导入的页面 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 参数。