使用ABCPDF检测PDF中每个页面的方向

时间:2013-03-22 13:58:24

标签: c# vb.net pdf abcpdf

有没有办法检测pdf文件中每个页面的方向?

我正在创建一个将水印(文本)添加到pdf文件的应用程序。 这些文件可以包含纵向,横向或两者的组合。

使用doc.MediaBox属性,我使用以下逻辑:

portrait = box.Height > box.Width

我的问题是,即使在横向文档上也总会返回一个真正的值。

3 个答案:

答案 0 :(得分:2)

Doc可以在每个页面上使用不同的MediaBox。要检查Mediabox页面N:

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

答案 1 :(得分:1)

可以通过两种方式创建横向页面:设置宽度大于高度或将页面旋转设置为纵向页面的90或270度。用于确定页面是纵向还是横向的伪代码如下所示:

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

我不熟悉ABCPDF,但我认为你可以访问页面轮换。

答案 2 :(得分: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设置为宽页面大小而不是高页面大小来实现页面方向。您可以使用Doc.MediaBox属性检查当前的MediaBox。