2015-02-13 3 views
0

Я использую ItextPdf PdfSmartCopy и PdfDictionary. Я должен определить вращение входного файла pdf, основываясь на ротации, я должен решить, сколько я должен вращать, чтобы довести его до нулевой степени (нормальный вид). Обычно, если пользователь сканирует файл, он поворачивает его влево или вправо перед сохранением, моя программа должна обнаруживать его при загрузке пользователя. Я использую приведенный ниже код, но для всех типов файлов, вращение происходит только как ноль. Любая идея, как я могу это исправить?Невозможно обнаружить вращение с помощью Itext PDF

com.itextpdf.text.pdf.PdfReader existing = new com.itextpdf.text.pdf.PdfReader("c:\\pdf_issue\\rotate270.pdf"); 
     com.itextpdf.text.Document document1 = new com.itextpdf.text.Document(); 
     com.itextpdf.text.pdf.PdfCopy copy = new PdfSmartCopy(document1, new FileOutputStream("c:\\pdf_issue\\TestRotation270.pdf")); 
     document1.open(); 
    int n1 = existing.getNumberOfPages(); 
     PdfDictionary pageDict; 
     int rot; 
     for (int i = 1; i <= n1; i++) { 
      rot = existing.getPageRotation(i); 

      switch(rot) 
      { 
      case 90: 
       { 
       pageDict = existing.getPageN(i); 
       pageDict.put(PdfName.ROTATE, new PdfNumber(rot + 270)); 
       break; 
       } 
      case 180: 
       { 
       pageDict = existing.getPageN(i); 
       pageDict.put(PdfName.ROTATE, new PdfNumber(rot + 180)); 
       break;    
} 
      case 270: 
       { 
       pageDict = existing.getPageN(i); 
       pageDict.put(PdfName.ROTATE, new PdfNumber(rot + 90)); 
       break; 
} 
      default: 
       { 
       pageDict = existing.getPageN(i); 
       pageDict.put(PdfName.ROTATE, new PdfNumber(rot + 0)); 
       break; 
} 
      } 

     } 
     for (int page = 0; page < n1;) { 
      copy.addPage(copy.getImportedPage(existing, ++page)); 
     } 
    document1.close(); 
+0

Но если я явно поворачиваю файл без обнаружения вращения, файл поворачивается на любую стандартную степень, которую я даю. – dev123

ответ

1

Возможно, вам придется применить некоторые эвристики для обнаружения вращения. Проблема в том, что у вас может быть страница, которая изначально была 5X10, а затем вращать ее, изменяя размеры страницы до 10X5 и сохраняя индикатор поворота страницы в формате PDF как 0. Теперь страница является пейзажной, но вращение все равно 0. В некоторых в другом PDF индикатор поворота страницы был изменен на 90, сохраняя размер страницы на 5X10, и теперь у вас есть пейзаж, который будет показывать то же самое, но он отличается от внутреннего.

Чтобы убедиться в правильности вращения и размера страницы.

+0

Предположим, что пользователь будет вращаться вправо или влево, но, как вы сказали, индикатор вращения по-прежнему равен нулю. В этом случае размер будет равен 10x5 в обоих случаях, как я могу определить, действительно ли он повернут вправо или влево? Coz Я должен нейтрализовать его, чтобы привести его к нормальному виду. – dev123

+0

Возможно, вы посмотрите на матрицу преобразования в потоковом содержимом, чтобы проверить, было ли применено какое-либо вращение, но оно не будет работать все время, следовательно, эвристика. –

Смежные вопросы