使用 inkcov 时使用 Ghostscript 仅查看特定区域

Using Ghostscript to look only at specific area when using inkcov

我使用 Ghostscript 通过裁剪我感兴趣的区域(在 vb.net 中使用 iTextSharp)然后 运行 检查 pdf 页面的部分内容是否为空:

gswin64c.exe -o - -sDEVICE=inkcov c:\cropped.pdf

这很好用,但如果我能让 Ghostscript 查看页面上的特定矩形区域(而不是整个页面),从而消除先裁剪的需要,那就更好了。

这可能吗?

您可以使用 -dDEVICEWIDTHPOINTS 和 -dDEVICEHEIGHTPOINTS 以及 -dFIXEDMEDIA 来指定固定的介质大小。您要将其设置为您要使用的 'window' 大小。

然后您需要移动 PDF 内容,使您感兴趣的页面部分位于 window 下方。为此,您需要编写一些 PostScript 代码。

您需要定义一个 BeginPage 过程,该过程将在每个页面的开头执行,其中您需要翻译页面原点。

所以让我们举一个具体的例子:

假设您有一个 A4 页面(612x792 点)并且您想要将呈现的内容限制在右上角的 1x2 英寸矩形内。我们首先定义介质尺寸:

-dDEVICEWIDTHPOINTS=72 -dDEVICEHEIGHTPOINTS=144 -dFIXEDMEDIA

然后我们需要移动PostScript和PDF中左下角的原点(0,0),这样页面上只有右上角的内容。这意味着我们需要将内容向左移动 540 点,向下移动 648 点。所以我们的 BeginPage 过程是:

/BeginPage {-540 -648 translate}

然后我们将其安装在当前页面设备中:

<<
/BeginPage {-540 -648 translate}
>> setpagedevice

为了引入任意 PostScript,我们使用 -c 命令(我们需要在完成时告诉 GS,我们通常为此使用 -f 开关,但任何开关都可以)

所以你原来的命令行将是:

gswin64c -dDEVICEWIDTHPOINTS=72 -dDEVICEHEIGHTPOINTS=144 -dFIXEDMEDIA -sDEVICE=inkcov -o - -c "<</BeginPage {-540 -648 translate}>> setpagedevice" -f original.pdf

显然这里的确切数字将由您决定。