首页 > 解决方案 > 删除 PdfName.Rotate 值而不旋转

问题描述

我必须将多个文件中的多个页面组合成一个新的 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();
    }
}

这:

PdfDictionary diccionario = page.getPdfObject();
diccionario.Remove(iText.Kernel.Pdf.PdfName.Rotate);

并且CopyPagesTo具有相同结果的功能:页面方向已更改。

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

https://filebin.ca/4vep0uuU1p2s/1.pdf

任何建议将不胜感激。

标签: javaitext7

解决方案


我找到了使用该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()

谢谢。


推荐阅读