Java 删除PdfName。旋转值而不旋转

Java 删除PdfName。旋转值而不旋转,java,itext7,Java,Itext7,我必须将多个文件中的多个页面合并成一个新的PDF。所有页面的页面方向必须为纵向 完成这项工作后,我使用了几个程序将旋转重置为零,而没有真正旋转页面 我想使用itext删除旋转值 从itext示例中可以看出,我尝试过以下方法: protected void manipulatePdf(String dest) throws Exception { PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new Pdf

我必须将多个文件中的多个页面合并成一个新的PDF。所有页面的页面方向必须为纵向

完成这项工作后,我使用了几个程序将旋转重置为零,而没有真正旋转页面

我想使用itext删除旋转值

从itext示例中可以看出,我尝试过以下方法:

    protected void manipulatePdf(String dest) throws Exception {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(DEST));
        int n = pdfDoc.getNumberOfPages();
        PdfPage page;
        PdfNumber rotate;
        for (int p = 1; p <= n; p++) {
            page = pdfDoc.getPage(p);
            rotate = page.getPdfObject().getAsNumber(PdfName.Rotate);
            page.setRotation(0);
        pdfDoc.close();
    }
}
而功能
CopyPagesTo
的结果相同:页面方向已更改

这里有一个0、90、180 y 270度的示例文件。
目标是将所有页面的旋转值设置为零保持纵向模式


任何建议都将不胜感激。

我已经找到了一个使用
SetIgnorePageRotationForContent
功能的解决方案

对不起,但我并不感到惊讶。这不是C#,这不是Java,这是vb.net

Dim srcPdf As iText.Kernel.Pdf.PdfDocument = New iText.Kernel.Pdf.PdfDocument(New iText.Kernel.Pdf.PdfReader(srcFile))
Dim destPDF As New iText.Kernel.Pdf.PdfDocument(New iText.Kernel.Pdf.PdfWriter(destFile))


                For contador = 1 To srcPdf.GetNumberOfPages

                    Dim srcPage = srcPdf.GetPage(contador)

                    Dim rotacion As iText.Kernel.Pdf.PdfNumber = srcPage.GetPdfObject().GetAsNumber(iText.Kernel.Pdf.PdfName.Rotate)


                    If IsNothing(rotacion) OrElse rotacion.IntValue = 0 Then
                        srcPdf.CopyPagesTo(contador, contador, destPDF)
                        Continue For
                    End If

                    Dim destPage As iText.Kernel.Pdf.PdfPage = destPDF.AddNewPage(New iText.Kernel.Geom.PageSize(srcPage.GetPageSizeWithRotation))

                    If rotacion.IntValue = 180 Then
                        destPage.GetPdfObject().Put(iText.Kernel.Pdf.PdfName.Rotate, New iText.Kernel.Pdf.PdfNumber(180))
                    Else
                        destPage.GetPdfObject().Put(iText.Kernel.Pdf.PdfName.Rotate, New iText.Kernel.Pdf.PdfNumber(rotacion.IntValue + 180))
                    End If

                    destPage.SetIgnorePageRotationForContent(True)


                    Dim canvas As New iText.Kernel.Pdf.Canvas.PdfCanvas(destPage)


                    Dim pageCopy As iText.Kernel.Pdf.Xobject.PdfFormXObject = srcPage.CopyAsFormXObject(destPDF)
                    canvas.AddXObject(pageCopy, 0, 0)

                    destPage.GetPdfObject().Remove(iText.Kernel.Pdf.PdfName.Rotate)

                Next
                destPDF.Close()
                srcPdf.Close()

谢谢。

“受保护的void-manipulated-df(String-dest)抛出异常”嗯,这不是C,而是Java。编辑:这个问题中的每一行代码都是Java。为什么要将其标记为C#?问题是什么?如果删除90°或270°页面旋转,则纵向页面根据定义将变为横向页面。如果你想要一个肖像页面,请保持旋转。请打开示例文件。您将看到4个相同的页面。但是它们有0度、90度、180度和270度。“你会看到4个相同的页面。但是它们有0度、90度、180度和270度。”-是的。显然,通过删除90°或270°旋转值,您将获得横向页面。如果你想抵消这一点,你必须大幅改变页面。您必须在内容流前面加上与缺少的旋转等效的转换。您必须调整所有应用页面框,至少是媒体框。您必须调整所有注释的位置(和其他坐标属性);如果它们具有外观,则必须对其应用旋转。除非他们…除非他们设置了NoRotate标志,在这种情况下,您必须重新定位他们。您必须使用坐标调整所有目的地。当然还有其他一些任务。。。是否确实需要将页面旋转条目设置为0?可能更容易改进您希望执行此操作的流程,以便能够使用页面旋转操作。。。
Dim srcPdf As iText.Kernel.Pdf.PdfDocument = New iText.Kernel.Pdf.PdfDocument(New iText.Kernel.Pdf.PdfReader(srcFile))
Dim destPDF As New iText.Kernel.Pdf.PdfDocument(New iText.Kernel.Pdf.PdfWriter(destFile))


                For contador = 1 To srcPdf.GetNumberOfPages

                    Dim srcPage = srcPdf.GetPage(contador)

                    Dim rotacion As iText.Kernel.Pdf.PdfNumber = srcPage.GetPdfObject().GetAsNumber(iText.Kernel.Pdf.PdfName.Rotate)


                    If IsNothing(rotacion) OrElse rotacion.IntValue = 0 Then
                        srcPdf.CopyPagesTo(contador, contador, destPDF)
                        Continue For
                    End If

                    Dim destPage As iText.Kernel.Pdf.PdfPage = destPDF.AddNewPage(New iText.Kernel.Geom.PageSize(srcPage.GetPageSizeWithRotation))

                    If rotacion.IntValue = 180 Then
                        destPage.GetPdfObject().Put(iText.Kernel.Pdf.PdfName.Rotate, New iText.Kernel.Pdf.PdfNumber(180))
                    Else
                        destPage.GetPdfObject().Put(iText.Kernel.Pdf.PdfName.Rotate, New iText.Kernel.Pdf.PdfNumber(rotacion.IntValue + 180))
                    End If

                    destPage.SetIgnorePageRotationForContent(True)


                    Dim canvas As New iText.Kernel.Pdf.Canvas.PdfCanvas(destPage)


                    Dim pageCopy As iText.Kernel.Pdf.Xobject.PdfFormXObject = srcPage.CopyAsFormXObject(destPDF)
                    canvas.AddXObject(pageCopy, 0, 0)

                    destPage.GetPdfObject().Remove(iText.Kernel.Pdf.PdfName.Rotate)

                Next
                destPDF.Close()
                srcPdf.Close()