У нас есть набор отсканированных страниц (приблизительно 600), для которых каждое средство просмотра PDF отображает изображение с нулевым полем на правом краю, но приблизительно 2-дюймовым полем слева. (По-видимому, при сканировании, была неправильная установка, используемая...),
Мы хотим распечатать эти страницы, предпочтительно как буклет. Существует ли способ постоянно сместиться, все изображения страницы к центру и иметь PDF отображают эти страницы также более приятным способом? Ghostscript может сделать это? Можно сделать это с некоторым другим методом, такой как программно с помощью некоторой библиотеки обработки PDF?
Если вы не хотите писать свой собственный программный код (как предлагал Николаус), а вместо этого используете командную строку 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 для исходного файла и документ для целевого файла. затем вы перебираете страницы, если Reader создает новую страницу в документе и добавьте 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();