/Rotate を付けてもらうには…
- Adobe Acrobat 8.0 を使用
- 複合機でスキャンした PDF を回転
サンプル PDF はこちら。
/Rotate の付与状況は PDFXplorer で確認できます。
こうしてできてしまった PDF を正規化するサンプルコード。iTextSharp 4.1.6 を使用しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | public void MakePdf2( string fppdfIn, string fppdfOut) { using (var si = File.OpenRead(fppdfIn)) { PdfReader reader = new PdfReader(si); reader.ConsolidateNamedDestinations(); using (var fs = File.Create(fppdfOut)) { Document document = null ; PdfWriter writer = null ; int numPages = reader.NumberOfPages; for ( int pageNum = 1; pageNum <= numPages; pageNum++) { var pageSizeAfterRotation = reader.GetPageSizeWithRotation(pageNum); if (document == null ) { document = new Document(pageSizeAfterRotation); writer = PdfWriter.GetInstance(document, fs); document.Open(); } else { document.SetPageSize(pageSizeAfterRotation); document.NewPage(); } PdfTemplate background = writer.GetImportedPage(reader, pageNum); float [] transferMatrix = new float [6]; switch (reader.GetPageRotation(pageNum)) { case 0: default : transferMatrix[0] = 1; transferMatrix[3] = 1; break ; case 270: transferMatrix[0] = ( float )Math.Cos(( float )(270 / 180.0f * Math.PI)); transferMatrix[1] = ( float )-Math.Sin(( float )(270 / 180.0f * Math.PI)); transferMatrix[2] = -transferMatrix[1]; transferMatrix[3] = transferMatrix[0]; transferMatrix[4] = pageSizeAfterRotation.Width; //transferMatrix[5] = pageSizeAfterRotation.Height; break ; case 180: transferMatrix[0] = ( float )Math.Cos(( float )(180 / 180.0f * Math.PI)); transferMatrix[1] = ( float )-Math.Sin(( float )(180 / 180.0f * Math.PI)); transferMatrix[2] = -transferMatrix[1]; transferMatrix[3] = transferMatrix[0]; transferMatrix[4] = pageSizeAfterRotation.Width; transferMatrix[5] = pageSizeAfterRotation.Height; break ; case 90: transferMatrix[0] = ( float )Math.Cos(( float )(90 / 180.0f * Math.PI)); transferMatrix[1] = ( float )-Math.Sin(( float )(90 / 180.0f * Math.PI)); transferMatrix[2] = -transferMatrix[1]; transferMatrix[3] = transferMatrix[0]; //transferMatrix[4] = pageSizeAfterRotation.Width; transferMatrix[5] = pageSizeAfterRotation.Height; break ; } var ww = writer.DirectContentUnder; ww.AddTemplate(background, transferMatrix[0], transferMatrix[1], transferMatrix[2], transferMatrix[3], transferMatrix[4], transferMatrix[5]); } document.Close(); writer.Close(); } } } |
0 件のコメント:
コメントを投稿