2016-08-25 8 views
0

У меня есть документ PDF со многими страницами 595x420 ppi, но мне нужны эти страницы, толкайте 595x210, но весь текст должен быть виден.Изменить размер PDF непропорционально Ghostscript

Итак. Могу ли я изменить масштаб PDF-страниц непропорционально (без увеличения), чтобы соответствовать размеру страницы с помощью ghostscript или мне нужно использовать какую-то другую программу?

+0

Как вы планируете вставлять весь текст с страницы 595x420 на половину страницы без изменения масштаба? – KenS

+0

Я знаю, что соотношение должно быть изменено, потому что мне нужно заполнить страницу контентом – DimmuBoy

ответ

1

Если вы хотите, чтобы масштабирование применялось к одной оси, а не к другой, вам нужно будет выполнить некоторое программирование PostScript. В /ghostpdl/Resource/Init/pdf_main.ps код, который вычисляет матрицу, необходимую:

/pdf_PDF2PS_matrix { % <pdfpagedict> -- matrix 
    matrix currentmatrix matrix setmatrix exch 
    % stack: savedCTM <pdfpagedict> 
    dup get_any_box 
    % stack: savedCTM <pdfpagedict> /Trim|Crop|Art|MediaBox <Trim|Crop|Art|Media Box> 
    oforce_elems normrect_elems fix_empty_rect_elems 4 array astore 
    //systemdict /PDFFitPage known { 
    PDFDEBUG { (Fiting PDF to imageable area of the page.) = flush } if 

Этот код вычисляет значения шкалы х и у, и делает их одинаковыми. Если вы хотите, чтобы они отличались, это то, что вам нужно будет изменить. Обратите внимание, что вам также необходимо установить определенный размер носителя с помощью -dDEVICEHEIGHTPOINTS и -dDEVICEWIDTHPOINTS и установить -dFIXEDMEDIA, чтобы предотвратить изменение размера файла PDF.

+0

Спасибо, но это более высокий уровень, чем я знаю. Можете ли вы рассказать мне больше об этом решении? Я нашел файл pdf_main.ps с этим кодом, но все же я не знаю, что я должен изменить. – DimmuBoy

+1

Вам понадобится понять язык PostScript, чтобы внести какие-либо полезные изменения здесь. PostScript использует матричный метод для сопоставления пространства пользователя с пространством устройства, и эта функция вычисляет новый CTM, где коэффициенты масштабирования x и y выбраны одинаковыми и минимальное расстояние от 1,1. Предположительно, вы захотите рассчитать минимальные значения x или y, необходимые для масштабирования носителя, а затем установите, какое изменение является наименьшим. – KenS

+0

Спасибо! Только одну строку, которую мне нужно добавить для масштабирования в мой размер '1 .5 scale'. Этот сайт помог мне понять язык PS http://www.mefco.com/psc/ – DimmuBoy

Смежные вопросы