Я пытаюсь интегрировать iTextSharp в существующее приложение для работы с документами, которое позволяет пользователям поворачивать отдельные страницы, которые могли быть отсканированы, под неправильным углом (это происходит чаще, чем я думал).
У меня есть фактические данные страницы, вращающиеся правильно на 90/180 градусов, но ориентация страницы не вращается вместе с ней.Я только начал работать с iTextSharp, поэтому я все еще немного незнаком с его методами, но смог собрать то, что у меня есть, используя сообщения из StackOverflow.Это близко, но не совсем там.
Вот что у меня есть:
' Get the input document and total number of pages
Dim inputPdf As New iTextSharp.text.pdf.PdfReader(fileName)
Dim pageCount As Integer = inputPdf.NumberOfPages
' Load the input document
Dim inputDoc As New iTextSharp.text.Document(inputPdf.GetPageSizeWithRotation(1))
' Set up the file stream for our output document
Dim outFileName As String = Path.ChangeExtension(fileName, "pdf")
Using fs As New FileStream(outFileName, FileMode.Create)
' Create the output writer
Dim outputWriter As iTextSharp.text.pdf.PdfWriter = iTextSharp.text.pdf.PdfWriter.GetInstance(inputDoc, fs)
inputDoc.Open()
' Copy pages from input to output document
Dim cb As iTextSharp.text.pdf.PdfContentByte = outputWriter.DirectContent
For index As Integer = 1 To pageCount
inputDoc.SetPageSize(inputPdf.GetPageSizeWithRotation(index))
inputDoc.NewPage()
' If this is our page to be rotated, perform the desired transform
' TODO - 90 degree rotations need to change the page orientation as well
Dim page As iTextSharp.text.pdf.PdfImportedPage = outputWriter.GetImportedPage(inputPdf, index)
If index = pageNum Then
Select Case angle
Case 90
cb.AddTemplate(page, 0, -1, 1, 0, 0, page.Height)
Case 180
cb.AddTemplate(page, -1, 0, 0, -1, page.Width, page.Height)
Case 270
cb.AddTemplate(page, 0, 1, -1, 0, page.Width, 0)
Case Else
' Should not be here, but don't do anything
cb.AddTemplate(page, 1, 0, 0, 1, 0, 0)
End Select
Else
' No rotation; add as is
cb.AddTemplate(page, 1, 0, 0, 1, 0, 0)
End If
Next
inputDoc.Close()
End Using
Я попытался добавить следующий код вверху, чтобы получить размер страницы с существующей страницы и поменять местами размеры, если угол поворота был 90или 270:
For index As Integer = 1 To pageCount
Dim pageSize As iTextSharp.text.Rectangle = inputPdf.GetPageSizeWithRotation(index)
If angle = 90 OrElse angle = 270 Then
' For 90-degree rotations, change the orientation of the page, too
pageSize = New iTextSharp.text.Rectangle(pageSize.Height, pageSize.Width)
End If
inputDoc.SetPageSize(pageSize)
inputDoc.NewPage()
К сожалению, это приводило к повороту каждые страницы на 90 градусов, и данные на повернутой странице не всегда отображались в нужном месте.(немного сдвинуто вниз и со страницы).
Как я уже сказал, я не очень знаком с внутренней работой API.Я проверил примеры в Интернете на странице sourceforge и взглянул на книгу (оба издания), но я не вижу ничего, что отвечало бы требованиям.Я видел пример, который показывает ориентацию страницы для вновь составленных PDF-файлов, но ничего не для существующих.Кто-нибудь может мне помочь?Спасибо!