我们有一堆扫描的页面(大约 600 个),每个 PDF 查看器都会在右侧边缘显示零边距的图像,但在左边大约 2 英寸的边距。(大概在扫描时,使用了错误的设置......)
我们想打印这些页面,最好是作为小册子。有没有办法将所有页面图像永久地移向中心并让 PDF 以更令人愉悦的方式显示这些页面?Ghostscript 可以做到这一点吗?可以使用其他方法来做到这一点,例如在某些 PDF 处理库的帮助下以编程方式吗?
我们有一堆扫描的页面(大约 600 个),每个 PDF 查看器都会在右侧边缘显示零边距的图像,但在左边大约 2 英寸的边距。(大概在扫描时,使用了错误的设置......)
我们想打印这些页面,最好是作为小册子。有没有办法将所有页面图像永久地移向中心并让 PDF 以更令人愉悦的方式显示这些页面?Ghostscript 可以做到这一点吗?可以使用其他方法来做到这一点,例如在某些 PDF 处理库的帮助下以编程方式吗?
如果您不想编写自己的程序代码(如 Nikolaus 建议的那样),而是使用 Ghostscript 命令行,您需要了解 3 件事:
setpagedevice
带参数的运算符PageOffset
;-c ...
;现在尝试使用此命令行将所有页面图像向左移动 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
我为了不丢失扫描的任何图片质量而放入...)
您可以使用 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();