2014-01-03 2 views
1

У меня есть формат PDF в альбомной ориентации и является «Распространение страницы».Как разделить одну страницу pdf в половине по вертикали с помощью ghostscript

  1. Мне нужно разделить страницу пополам по центру.

    Я использовал эту настройку, чтобы вырезать PDF пополам: это один получает левую часть страницы

    "C:\Program Files (x86)\gs\gs9.10\bin\gswin32c.exe" -o output.pdf 
    -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER -dSubsetFonts=true -dEmbedAllFonts=true -g 750x1085 -c 
    "<</BeginPage{0.95 0.96 scale 20 22 translate}>> setpagedevice" "<</PageOffset [0 0]>> setpagedevice" -f input.pdf 
    
  2. Эта команда отлично работает. Моя проблема теперь в том, что мне нужно установить Mediabox, Cropbox, Bleedbox, Trimbox и artbox аналогично размеру разделенной страницы. В приведенном выше примере; он должен быть 750x1085.

    Какова должна быть правильная команда/настройки для работы на GS, чтобы у Mediabox, Cropbox, Bleedbox, Trimbox и artbox были одинаковые размеры?

UPDATE
Это образец файла PDF я пытаюсь разрезать пополам: PDF FILE TO SPLIT

Я теперь с помощью/PAGE pdfmark и это команда, я пытаюсь использовать:

 "C:\Program Files (x86)\gs\gs9.10\bin\gswin32c.exe" -o output.pdf -sDEVICE=pdfwrite -dNOPAUSE -dBATCH 
    -dSAFER -dUseCropbox -dSubsetFonts=true -dEmbedAllFonts=true -g7500x10850 
    -c "[/CropBox [0 0 750 1085] /PAGES pdfmark" 
    "[/MediaBox [0 0 750 1085] /PAGES pdfmark" 
    "[/TrimBox [0 0 750 1085] /PAGES pdfmark" 
    "[/BleedBox [0 0 750 1085] /PAGES pdfmark" 
    "[/ArtBox [0 0 750 1085] /PAGES pdfmark" 
    "<</BeginPage{0.95 0.96 scale 20 22 translate}>> setpagedevice" 
    "<</PageOffset [0 0]>> setpagedevice" 
    -f input.pdf 

Я до сих пор не могу добиться установления Cropbox, MediaBox, TrimBox, BleedBox, Artbox с тем же размером.

Какими должны быть правильные настройки для команды?

+0

MediaBox по крайней мере должен быть размером указанного носителя, а остальные поля обычно не установлены. Если вы хотите их установить, вам понадобится использовать/PAGE pdfmark. – KenS

+0

@ KenS Я в замешательстве. но, например, в моем коде выше? Где я могу вставить «/ PAGE pdfmark»? – SandoMarco

+0

Вы помещаете его в командной строке, окруженной -c и -f, с его PostScript. – KenS

ответ

0

Переходя к ответу здесь, комментарии слишком малы.

Ваша основная проблема заключается в том, что исходный файл PDF уже содержит все параметры Box, которые вы пытаетесь изменить. Интерпретатор Ghostscript PDF для определенных классов устройства вывода сохранит эти поля, написав собственную версию pdfmark для устройства. Потому что это происходит после ваш pdfmark, он заменяет ваш.

К сожалению, для этого не существует механизма. Кроме того, поскольку вы используете Windows, у вас есть ресурсы, встроенные в файловую систему ROM, поэтому вы не можете их легко модифицировать.

Итак, на данный момент вы ничего не можете поделать. Если вам удобно загружать источник и вмешиваться в некоторые PostScript, дайте мне знать, и я думаю, что смогу дать вам решение (вам не нужно перестраивать GS, но ресурсы PostScript недоступны отдельно).

EDIT, чтобы включить некоторые предложенные обходные

В pdf_main.ps:

% Test whether the current output device handles pdfmark. 
/.writepdfmarkdict 1 dict dup /pdfmark //null put readonly def 
/.writepdfmarks { % - .writepdfmarks <bool> 
    currentdevice //.writepdfmarkdict .getdeviceparams 
    mark eq { //false } { pop pop //true } ifelse 
    systemdict /DOPDFMARKS known or 
} bind def 

Вы можете изменяющие /.writepdmarks быть:

/.writepdfmarks { % - .writepdfmarks <bool> 
    false 
} bind def 

Но обратите внимание, что ряд другие вещи перестанут выделяться в выходном файле PDF.

Вместо этого вы могли бы посмотреть на код в pdf_showpage_finish:

/pdfshowpage_finish { % <pagedict> pdfshowpage_finish - 
    save /PDFSave exch store 
... 
... 
    .writepdfmarks { 

     % Copy the boxes. 
    { /CropBox /BleedBox /TrimBox /ArtBox } { 
     2 copy pget { 
     % .pdfshowpage_Install transforms the user space do same here with the boxes 
     oforce_elems 
     2 { Page pdf_cached_PDF2PS_matrix transform 4 2 roll } repeat 
     normrect_elems 4 index 5 1 roll fix_empty_rect_elems 4 array astore 
     mark 3 1 roll {/PAGE pdfmark} stopped {cleartomark} if 
     } { 
     pop 
     } ifelse 
    } forall 

Вы можете изменить строку '{/ CropBox/BleedBox/TrimBox/Artbox}', любые коробки вы не хотите, чтобы сохранить вы можете удалите из этой строки.

Если вы хотите, чтобы предотвратить любой их переопределение ваши требования, а затем удалите строки из «% Копирование коробки» до «% Копирование аннотации и ссылки»

Пожалуйста, обратите внимание, это только работы по система, в которой ресурсы не встроены в файловую систему ROM или где ресурсы по меньшей мере доступны на диске, а путь к файлам ресурсов задается с помощью переключателя -I.

+0

Hi @KenS. Означает ли это, когда я пытаюсь изменить параметры Box, он просто возвращает его обратно и заменяет мои настройки? Фактически я собираюсь использовать LINUX для запуска этой команды, и я использую PHP для вызова команды. Можете ли вы помочь мне в решении этого? Дело в том, что мне понадобится PHP для вызова команды для разделения файла. Я действительно открыт для предложений и решений. Благодарю. – SandoMarco

+0

Да, параметры Box в файлах PDF переопределяют параметры из ваших операций pdfmark. Если вы посмотрите в gs/Resources/Init, вы найдете файл pdf_main.ps. Есть несколько мест, которые вы можете изменить, в зависимости от того, что вы хотите сделать. Вместо того, чтобы попробовать и поместить это в комментарии, я отредактировал свой ответ ..... – KenS