Как я могу сместить изображения страниц в файлах PDF больше влево или вправо? - PullRequest
10 голосов
/ 10 августа 2010

У нас есть несколько отсканированных страниц (около 600), для которых каждый просмотрщик PDF отображает изображение с нулевым полем по правому краю, но с окном около 2 дюймов слева.(Предположительно, при сканировании использовалась неправильная настройка ...)

Мы хотим напечатать эти страницы, желательно в виде буклета.Есть ли способ навсегда сместить все изображения страниц в центр и сделать так, чтобы PDF отображал эти страницы более приятным способом?Может ли Ghostscript сделать это?Можно ли сделать это с помощью другого метода, например, программно с помощью некоторой библиотеки обработки PDF?

Ответы [ 2 ]

9 голосов
/ 14 августа 2010

Если вы не хотите писать свой собственный программный код (как предложил Николаус), но вместо этого используете командную строку Ghostscript, вам нужно знать 3 вещи:

  1. PostScript имеет оператор setpagedevice, который принимает параметр PageOffset;
  2. Ghostscript будет обрабатывать фрагменты кода PostScript, если вы передадите их с помощью -c ... в командной строке;
  3. Ghostscript может оценивать и применять (некоторые) PostScript код даже для прямых PDF => PDF преобразований.

Теперь попробуйте эту командную строку, чтобы сместить все изображения страниц на 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 голос
/ 10 августа 2010

вы можете использовать iText для перемещения, масштабирования или обрезки pdf-страниц

вам нужно определить PdfReader для вашего исходного файла и 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();
...