2017-08-10 5 views
1

C#のitextsharpライブラリを使用して、C言語でitextsharpライブラリを使用して、風景や肖像画のいずれの方向を識別することができますか

ここに私のコードは、PDFストリームを取得し、イメージを回転させていますが、私の問題はどのように我々は方向を特定できますか?

public static string ReadPdfFile(string fileName) 
     { 
     StringBuilder text = new StringBuilder(); 

     if (File.Exists(fileName)) 
     { 




      byte[] bytes = System.IO.File.ReadAllBytes(fileName); 



      using (MemoryStream ms = new MemoryStream()) 
      { 
       Document doc = new Document(); 
       PdfWriter writer = PdfWriter.GetInstance(doc, ms); 
       doc.Open(); 
       PdfContentByte cb = writer.DirectContent; 
       PdfImportedPage page; 
       PdfReader reader; 
       reader = new PdfReader(bytes); 
       int pages = reader.NumberOfPages; 

       // loop over document pages 
       for (int i = 1; i <= pages; i++) 
       { 

        page = writer.GetImportedPage(reader, i); 
        //Rectangle pagesize = reader.GetPageSizeWithRotation(0); 
        AffineTransform scale = new AffineTransform(0, 1.0F, -1.0F, 0, 500, 500); 
        cb.AddTemplate(page,scale); 
       } 

       doc.Close(); 
       var rotatedFile = ms.GetBuffer(); 

       ms.Flush(); 
       ms.Dispose(); 
       string filepath = @"D:\test2.pdf"; 
       File.Delete(filepath); 
       using (FileStream Writer = new System.IO.FileStream(filepath, FileMode.Create, FileAccess.Write)) 
       { 
        Writer.Write(rotatedFile, 0, rotatedFile.Length); 
        string actualFilePath = "test2.pdf"; 
        filepath = actualFilePath; 
       } 


      } 

ご協力ありがとうございました!

答えて

2

私はそれを見つけるためにページの長方形のサイズを評価します。何かを覚えておいてください...同じファイル内で複数の向きを持つことができるので、最初のページだけに基づいてファイルが横向きであると判断することはできません。すべてのページが横長の場合はファイルが横向きです。それ以外の場合は、混在した向きのファイルです。

Rectangle currentPageRectangle = pdfReader.GetPageSizeWithRotation(<PageNumberHere>); 
if (currentPageRectangle.Width > currentPageRectangle.Height) 
{ 
    //page is landscape 
} 
else 
{ 
    //page is portrait 
} 
+0

ありがとうございます、スケールの考え方はありますか? pdfがポートレートの場合のように、 'AffineTransform scale = new AffineTransform(0,1.0F、-1.0F、0,500,500); cb.AddTemplate(page、scale);' それ以外の場合はランドスケープチェックをしないでください。私はデフォルトスケールをしたいので、スケールを与えたくありません。どうすればデフォルトスケールを与えることができますか? –

+0

申し訳ありませんスケールについてはわかりません。 –