iTextSharpを既存のDocument Imagingアプリケーションに統合しようとしています。これにより、スキャンされた個々のページを不適切な角度それは私が考えたよりも頻繁に起こる)。既存のマルチページPDFでiTextSharp/VBで単一ページを90度回転させる
実際のページデータは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度回転させる効果を持っていた、と私は望んでいたページのデータは、それがダウンシフトした(とにかく正しい場所に表示し、ページAから外れていなかった回転しますビット)。
私が言ったように、私は実際にAPIの内部の仕組みに精通していません。私はsourceforgeページでサンプルをオンラインでチェックしており、本(両方のエディション)を見てきましたが、私はこの請求書に適合するものは何も見ません。ここでは、新しく作成されたPDFのページの向きを示す例を見ましたが、既存のPDFのページの向きはありません。誰か助けてくれますか?ありがとう!
これは絶対に完璧です。私はあなたがpageDict.putコマンドでdesiredRotを意味し、curRotではなく、トリックを行ったようだと仮定しました。うーん、私は私のページフリップ変換をやっている方法を再評価する必要があるかもしれません。どうもありがとうございました! –
正解、それについて申し訳ありません。私はそれを修正するコードを編集しました。喜んで助けてください。 –
私はこのトリックがページフリップをするのにも役立つだろうと思いませんか?ナー、おそらくない。私はフリップを処理するために今すぐ変換を行いますが、フォームデータを強制終了するという効果があります。そして再び、スキャンされたPDFを反転させることは非常にまれなことになるだろうと推測しているので、おそらくそれほど心配する必要はありません。再度、感謝します! –