当前位置: 首页 > 知识库问答 >
问题:

为什么我的代码要将文档旋转180度?

狄珂
2023-03-14

我写了一个C#代码,在下载时合并两个pdf文件,但是它将一些(不是全部)文档旋转了180度。我已经附上了我上传的样本文件。

请帮助我。

示例文件

try
    {
        string NewFileName = "InspectionReport" + DateTime.Now.ToString("ddMMMyyyy HHmmss").Replace(" ", "");
        destinationFile = HostingEnvironment.MapPath(@"/Downloads/CNGCertificates/" + NewFileName + ".pdf");

        int f = 0;

        PdfReader reader = new PdfReader(sourceFiles[f]);

        int n = reader.NumberOfPages;

        Document document = new Document(reader.GetPageSizeWithRotation(1));

        PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create));

        document.Open();
        PdfContentByte cb = writer.DirectContent;
        PdfImportedPage page;
        int rotation;

        while (f < sourceFiles.Length)
        {
            int i = 0;
            while (i < n)
            {
                i++;
                document.SetPageSize(reader.GetPageSizeWithRotation(i));
                document.NewPage();
                page = writer.GetImportedPage(reader, i);
                rotation = reader.GetPageRotation(i);
                if (rotation == 90 || rotation == 270)
                {
                    cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                }
                else
                {
                    cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                }

            }
            f++;
            if (f < sourceFiles.Length)
            {
                reader = new PdfReader(sourceFiles[f]);

                n = reader.NumberOfPages;

            }
        }

        document.Close();
    }

共有1个答案

沈茂
2023-03-14

您正在以相同的方式处理 90270旋转。因此,如果按预期方式处理旋转值为 90 的源页面,则旋转值为 270 的源页面最终将颠倒过来。

因此,您必须单独处理 270,使用仿射变换以另一种方式旋转:

cb.AddTemplate(page, 0, 1f, -1f, 0, reader.GetPageSizeWithRotation(i).Width, 0);

同样,您也必须单独处理< code>180值,除非您希望这样的页面上下颠倒:

cb.AddTemplate(page, -1f, 0, 0, -1f, reader.GetPageSizeWithRotation(i).Width, reader.GetPageSizeWithRotation(i).Height);

尽管如此,您实际上根本不应该使用普通的< code>PdfWriter进行合并,您应该使用< code>PdfCopy。使用< code>PdfCopy,您不必再处理旋转等细节。此外,使用< code>PdfWriter时,批注会被复制,而不会被删除。请看这里的例子。(如果您使用的是5.5.x版本,您不必再区分这里提到的< code>PdfCopy变体,您可以将普通的< code>PdfCopy用于所有用例。但是,如果您使用的是4.x版本,您必须做出适当的选择。)

 类似资料:
  • 通过阅读HSL / HSV色彩理论,我得到的印象是色调分量是一个周期性属性,每360度重复一次,可以独立于饱和度和亮度/值而改变。如果我错了,请纠正我,但这些陈述在逻辑上遵循前面的定义: < li >将色调旋转360度会产生相同的颜色 < li >将色调旋转180度两次会产生原始颜色 < li >将色调旋转180度,然后旋转-180度,产生原始颜色 但是,只有选项 1 是正确的。将色调旋转 4 倍

  • 同时研究。net,我碰到了SpinLock和SpinWait。从表面上看,在我看来,SpinWait将永远是一条出路..当线程实际上必须等待来自线程外部的信号时,为什么还要继续忙碌等待而不放弃CPU呢?在这些空闲等待中花费的周期可能已经被线程使用,该线程可能会发出信号并释放正在忙碌等待的线程。 为什么会存在SpinLock?它与使用while循环的简单忙等待有什么不同?在什么情况下会想使用Spin

  • 问题内容: 为什么要编译Python脚本?您可以直接从.py文件运行它们,并且效果很好,那么在性能上有什么优势吗? 我还注意到,我的应用程序中的某些文件被编译为.pyc,而另一些则没有,为什么? 问题答案: 它被编译为字节码,可以更快,更快速地使用。 无法编译某些文件的原因是,每次运行脚本时都会重新编译与之一起调用的主脚本。所有导入的脚本将被编译并存储在磁盘上。 Ben Blank的 重要补充:

  • 每个人。我需要一个VBA代码来将excel数据转换为PDf到word doc,我写了一个宏,将excel打印为pdf,但现在我想从该pdf打印为word,所以简短的版本,Excel到PDF到Word。所有这些都是为了我想保留excel数据的格式

  • 好的,我的vs代码正常,然后我重新启动了我的笔记本电脑,没有关闭应用程序。我打开后,几乎所有的文字都是白色的。这不是主题,因为它总是在黑暗中。我想我没有点击任何会导致这一点的重要内容。这样编码真的很难。顺便说一下,这是javascript文件。 正如您所看到的,绿色的注释是白色的,文件导入和橙色的文本是白色的“等待”是指紫色是白色。即使“const”也是白色的。有人知道如何解决这个问题吗?

  • 我希望我的移动菜单上的向下箭头旋转180度,并在点击时朝上。我还想动画旋转平稳过渡。我使用Javascript切换一个". js-Rotate"类在我的". fa-角-向下"字体-真棒类。 JS函数中的最后一行控制此行为: 我尝试添加一个“transition:transform1s到“.fa角度向下”,但我没有运气。 CSS可通过以下链接的sass/组件/_navigation.scss获得:h