I iTextSharp in eine bestehenden Document Imaging-Anwendung zu integrieren versuchen die Benutzer einzelne Seiten zu drehen, erlaubt es, die zu einem falschen Winkel in abgetastet worden sein (es passiert öfter als ich gedacht hätte).drehen, um eine einzelne Seite um 90 Grad mit iTextSharp/VB in einer bestehenden mehrseitigen PDF-
Ich habe die tatsächliche Seitendaten über 90/180 Grad richtig zu drehen, aber die Seitenausrichtung ist, mit sich nicht dreht. Ich habe gerade angefangen, mit iTextSharp zu arbeiten, also bin ich immer noch ein wenig mit seinen Methoden nicht vertraut, konnte aber das, was ich bisher verwendet habe, mit Posts von StackOverflow kombinieren. Es ist nah, aber nicht ganz da.
Hier ist, was ich bisher habe:
' 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
ich oben den folgenden Code hinzugefügt versucht, die Seitengröße aus der bestehenden Seite zu packen und die Dimensionen tauschen, wenn der Drehwinkel 90 oder 270 war:
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()
Leider ist dies die Wirkung der rotierenden hatte jede Seite 90 Grad, und die Daten auf der Seite, die ich gedreht wollte nicht zeigen ohnehin an der richtigen Stelle (es wurde nach unten verschoben und von der Seite einer Bit).
Wie ich schon sagte, ich bin nicht wirklich vertraut mit dem Innenleben des API. Ich habe die Beispiele online auf der Seite von sourceforge ausgecheckt und habe mir das Buch angesehen (beide Editionen), aber ich sehe nichts, was zur Rechnung passt. Ich habe hier ein Beispiel gesehen, das die Seitenausrichtung für neu zusammengestellte PDFs zeigt, aber nichts für vorhandene PDFs. Kann mir jemand helfen? Vielen Dank!
Das ... ist absolut perfekt. Ich nahm an, du meintest selledRot im Befehl pageDict.put und nicht curRot, und es scheint der Trick gewesen zu sein. Hmm, ich muss vielleicht neu bewerten, wie ich meine Page-Flip-Transformation auch mache. Vielen Dank! –
Richtig, tut mir leid. Ich habe den Code bearbeitet, um ihn zu beheben. Froh, dass ich Helfen kann. –
Ich glaube nicht, dass dieser Trick funktioniert, um Seitenumbrüche zu machen, oder? Nein, wahrscheinlich nicht. Ich mache jetzt eine Transformation, um Flips zu behandeln, aber es hat den Effekt, alle Formulardaten zu löschen. Andererseits glaube ich, dass das Scannen gescannter PDFs, die umgedreht werden, eine sehr seltene Sache ist, also muss ich mich wahrscheinlich nicht viel darum kümmern. Danke noch einmal! –