有沒有辦法檢測pdf文件中每個頁面的方向?使用ABCPDF檢測PDF中每個頁面的方向
我正在創建一個將水印(文本)添加到pdf文件的應用程序。 這些文件可以具有頁面縱向,橫向或兩者的組合。
使用doc.MediaBox財產,我用下面的下面的邏輯:
portrait = box.Height > box.Width
我的問題是,它總是甚至在景觀文件返回真值。
有沒有辦法檢測pdf文件中每個頁面的方向?使用ABCPDF檢測PDF中每個頁面的方向
我正在創建一個將水印(文本)添加到pdf文件的應用程序。 這些文件可以具有頁面縱向,橫向或兩者的組合。
使用doc.MediaBox財產,我用下面的下面的邏輯:
portrait = box.Height > box.Width
我的問題是,它總是甚至在景觀文件返回真值。
風景頁面可以通過兩種方式創建:設置寬度大於高度或設置頁面旋轉爲90或270度的縱向頁面。用於確定一個頁面是縱向還是橫向看起來像這樣的僞代碼:
bool isPortrait = width < height;
if ((rotation == 90) || (rotation == -90) || (rotation == 270))
{
isPortrait = !isPortrait;
}
我不熟悉ABCPDF,但我相信你可以訪問頁面旋轉。
Doc可以在每個頁面上有不同的MediaBox。檢查Mediabox的第N頁:
doc.PageNumber = n
portrait = doc.Mediabox.Height > doc.Mediabox.Width
在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。
這是我能想到的最好的:http://www.websupergoo.com/helppdf9net/source/5-abcpdf/doc/1-methods/getinfo.htm你也許可以適應它。 – 2013-03-22 14:22:46
謝謝TheGreatCO!我真的很想在你給出的鏈接上做他們所建議的,但是我有點猶豫,因爲它會降低應用程序的性能,甚至增加內存使用量。我正在批量處理大量文件,通常每個文件大約有10-500個頁面。 – jerjer 2013-03-22 14:30:34
我還沒有使用ABCPDF,所以我只是在投入一點谷歌時間。 – 2013-03-22 14:33:14