We have a bunch of scanned pages (about 600) for which every PDF viewer displays the image with zero margin on the right edge, but about 2 inch margin on the left. (Presumably while scanning, there was a wrong setting used...)
We want to print these pages, preferably as a booklet. Is there a way to permanently shift all page images towards the center and have the PDF display these pages also in a more pleasing way? Can Ghostscript do that? Can one do this with some other method, such as programatically with the help of some PDF processing library?
If you don't want to write your own program code (as Nikolaus suggested), but use a Ghostscript commandline instead, you need to know 3 things:
- PostScript has a
setpagedevice
operator that takes aPageOffset
parameter; - Ghostscript will process snippets of PostScript code if you pass them with
-c ...
on the commandline; - Ghostscript can evaluate and apply (some) PostScript code even for direct PDF=>PDF conversions.
Now try this commandline to shift all page images by 1 inch (==72pt) to the left:
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
(The -dPDFSETTINGS=/prepress
I put in in order to not loose any picture quality of the scans...)
you can use iText to move, scale or crop pdf-pages
you need to define a PdfReader for your source file, and a Document for your Target file then you iterate over the pages if the Reader, create a new page in the Document and add the sourcePage as a Template to the new page (shifting, scaling etc wherever you want)
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();
来源:https://stackoverflow.com/questions/3447720/how-can-i-shift-page-images-in-pdf-files-more-to-the-left-or-to-the-right