2013-03-22 3 views
2

Есть ли способ определить ориентацию каждой страницы в pdf-файле?Определить ориентацию каждой страницы в PDF с помощью ABCPDF

Я создаю приложение, которое добавляет водяные знаки (текст) в pdf-файлы. В этих файлах могут отображаться страницы, пейзаж или их комбинация.

Используя свойство doc.MediaBox, я использую следующую логику ниже:

portrait = box.Height > box.Width 

Моей проблема заключается в том, что она всегда возвращает истинное значение даже на ландшафтные документах.

+0

Это лучшее, что я мог бы придумать: http://www.websupergoo.com/helppdf9net/source/5-abcpdf/doc/1-methods/getinfo.htm Возможно, вы сможете его адаптировать. –

+0

Спасибо TheGreatCO! На самом деле у меня возникло соблазн сделать то, что они предложили в ссылке, которую вы дали, но я немного нерешительна, так как это ухудшит производительность приложения и даже увеличит использование памяти. Я обрабатываю большое количество файлов в пакетном режиме и обычно с 10-500 страницами на файл. – jerjer

+0

Я не использовал ABCPDF, поэтому я просто забрасывал небольшое время в Google. –

ответ

1

Пейзажные страницы могут быть созданы двумя способами: установите ширину, превышающую высоту, или установите поворот страницы на 90 или 270 градусов для страницы с портретом. Псевдо-код для определения, является ли страница книжную или альбомную будет выглядеть следующим образом:

bool isPortrait = width < height; 
if ((rotation == 90) || (rotation == -90) || (rotation == 270)) 
{ 
isPortrait = !isPortrait; 
} 

Я не знаком с ABCpdf, но я предполагаю, что у вас есть доступ к вращению страницы.

2

У Doc может быть другой MediaBox на каждой странице. Для проверки Mediabox на странице N:

doc.PageNumber = n 
portrait = doc.Mediabox.Height > doc.Mediabox.Width 
0

Существует два способа ориентации в PDF-документе.

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

string GetRotate(Doc doc) { 
     return GetInheritedValue(doc, doc.Page, "/Rotate*:Num"); 
    } 

#

string GetInheritedValue(Doc doc, int id, string name) { 
    string val = ""; 
    for (int i = 1; i < doc.PageCount * 2; i++) { // avoid overflow if doc corrupt 
    val = doc.GetInfo(id, name); 
    if (val.Length > 0) 
    break; 
    id = doc.GetInfoInt(id, "/Parent:Ref"); 
    if (id == 0) 
    break; 
    } 
    return val; 
    } 

Однако иногда ориентация страницы осуществляется путем установки MediaBox в ширину, а не размер высокой страницы. Вы можете проверить текущий MediaBox, используя свойство Doc.MediaBox.

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