Удалить значение PdfName.Rotate без вращения - PullRequest
0 голосов
/ 20 сентября 2019

Мне нужно объединить несколько страниц из нескольких файлов в новый 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 и 270 градусов.
Цель - установить значение поворотавсех страниц в ноль с сохранением портретного режима :

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

Любой совет будет принят с благодарностью.

1 Ответ

0 голосов
/ 24 сентября 2019

Я нашел решение, используя функцию 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()

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...