我们有一堆扫描页面(大约600页),每个PDF查看器在右边缘显示零边距的图像,但左边约2英寸边距。 (据推测,在扫描时,使用了错误的设置......)
我们想要打印这些页面,最好是作为小册子。有没有办法永久性地将所有页面图像移向中心,并让PDF以更令人愉悦的方式显示这些页面? Ghostscript能做到吗?可以用其他方法做到这一点,比如在一些PDF处理库的帮助下编程吗?
答案 0 :(得分:9)
如果您不想编写自己的程序代码(如Nikolaus建议的那样),但是使用Ghostscript命令行,则需要知道3件事:
setpagedevice
运算符,它带有PageOffset
参数; -c ...
传递,则Ghostscript将处理PostScript代码的片段; 现在尝试使用此命令行将所有页面图像向左移动1英寸(== 72pt):
gswin32c.exe ^
-sDEVICE=pdfwrite ^
-o c:/path/to/output/pdf-shifted-by-1-inch-to-left.pdf ^
-dPDFSETTINGS=/prepress ^
-c "<</PageOffset [-72 0]>> setpagedevice" ^
-f c:/path/to/input/pdf-original.pdf
(我放入的-dPDFSETTINGS=/prepress
是为了不丢失扫描的任何图片质量......)
答案 1 :(得分:1)
您可以使用iText移动,缩放或裁剪pdf页面
您需要为源文件定义PdfReader,并为目标文件定义Document 然后你迭代页面如果Reader,在Document中创建一个新页面 并将sourcePage作为模板添加到新页面(在任何地方移动,缩放等)
PdfReader reader = new PdfReader( input );
int n = reader.getNumberOfPages();
Rectangle psize = reader.getPageSize(1);
float width = psize.getHeight();
float height = psize.getWidth();
Document document = new Document(new Rectangle(height, width));
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream( output ));
document.open();
PdfContentByte cb = writer.getDirectContent();
int i = 0;
while (i < n) {
i++;
document.newPage();
PdfImportedPage page = writer.getImportedPage(reader, i);
cb.addTemplate(page, factor, 0, 0, factor, left, down);
}
document.close();