有没有办法检测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