2

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

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

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

portrait = box.Height > box.Width

我的问题是,即使在横向文档上,它也总是返回真实值。

4

3 回答 3

2

Doc 在每个页面上都可以有不同的 MediaBox。要检查第 N 页的媒体框:

doc.PageNumber = n
portrait = doc.Mediabox.Height > doc.Mediabox.Width
于 2013-06-05T14:29:44.347 回答
1

有两种方法可以在 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。

于 2013-06-20T10:57:17.193 回答
1

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

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

我不熟悉 ABCPDF,但我假设您可以访问页面旋转。

于 2013-03-22T15:04:30.947 回答