2013-03-22 68 views
2

有沒有辦法檢測pdf文件中每個頁面的方向?使用ABCPDF檢測PDF中每個頁面的方向

我正在創建一個將水印(文本)添加到pdf文件的應用程序。 這些文件可以具有頁面縱向,橫向或兩者的組合。

使用doc.MediaBox財產,我用下面的下面的邏輯:

portrait = box.Height > box.Width 

我的問題是,它總是甚至在景觀文件返回真值。

+0

這是我能想到的最好的:http://www.websupergoo.com/helppdf9net/source/5-abcpdf/doc/1-methods/getinfo.htm你也許可以適應它。 – 2013-03-22 14:22:46

+0

謝謝TheGreatCO!我真的很想在你給出的鏈接上做他們所建議的,但是我有點猶豫,因爲它會降低應用程序的性能,甚至增加內存使用量。我正在批量處理大量文件,通常每個文件大約有10-500個頁面。 – jerjer 2013-03-22 14:30:34

+0

我還沒有使用ABCPDF,所以我只是在投入一點谷歌時間。 – 2013-03-22 14:33:14

回答

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; 
    } 

但是有時頁面方向是由媒體框設置爲寬而不是高的頁面大小來實現。您可以使用Doc.MediaBox屬性檢查當前的MediaBox。

相關問題