首页 > 解决方案 > 将具有 90 度旋转的横向页面叠加到具有 0 度旋转的横向页面上

问题描述

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

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

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

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

在此处输入图像描述

标签: c#itext7

解决方案


(当您引用 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 表示应用于 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分别调整上面替换中的最后两个参数。


推荐阅读