Nano Hash - криптовалюты, майнинг, программирование

GhostScript (PostScript): Принтер обрезает границы при уменьшении масштаба с A* до A4.

Я работаю над «GS Wrapper» (используя SDK 9.20) для использования внешним приложением. Там я уменьшаю, например, лист A0 до A1, A2 и A3, и он отлично работает. (PDF в PS, затем печать)

Проблема: когда я уменьшаю любой входной формат до A4, принтер обрезает границы содержимого (это технические чертежи с черной рамкой через каждые 5 мм от края листа).

  • Есть ли возможность уменьшить А4 (до А4) еще раз примерно на 95% и центрировать изображение? (Это должно привести к уменьшению базового изображения, скажем, черные границы впоследствии находятся на расстоянии ~ 10 мм от границы листа)

Я использую следующий параметр для масштабирования:

GhostArg[0] = "-dNOPAUSE";
GhostArg[1] = "-dBATCH";
GhostArg[2] = "-dSAFER";
GhostArg[3] = "-dNOPAUSE";
GhostArg[4] = "-g2480x3508";
GhostArg[5] = "-dPDFFitPage";
GhostArg[6] = "-r300x300";
GhostArg[7] = "-sDEVICE=ps2write";
GhostArg[8] = Output;
GhostArg[9] = Input;

Обновление решения:

Мне удалось решить эту проблему, вставив эти три строки между Arg[8] и Arg[9]:

GhostArg[9] = "-c";
GhostArg[10] = "<< /BeginPage { 0.99 0.99 scale 10 10 translate } >> setpagedevice";
GhostArg[11] = "-f"; 

Спасибо KenS за подсказку /BeginPage.

16.01.2017

Ответы:


1

Похоже, у вашего принтера есть непечатаемая область. Это не редкость, при обращении с бумагой необходимо удерживать бумагу во время печати, и это может привести к тому, что некоторые области носителя не будут пригодны для печати.

Если ваш контент достигает края носителя, возможно, простой принтер не может печатать там, в результате чего контент обрезается.

Вполне возможно, что ps2write отбросит медиаконтент до меньшего размера, но вы не можете (автоматически) уменьшить его масштаб, а также сместить местоположение контента, потому что контент соответствует размеру медиа.

Однако механизм FitPage не просматривает содержимое, а только запрашивает размер носителя. Таким образом, если вход запрашивает A3, а выбранный носитель имеет формат A4 (и фиксированный), то применяется коэффициент масштабирования для масштабирования содержимого до требуемого размера носителя (и запрос носителя для A3 игнорируется).

Итак, что вы можете сделать, так это оставить код, который у вас есть, как есть, но добавить процедуру BeginPage или Install, которая использует оператор масштабирования для дальнейшего уменьшения размера меток на странице и оператор перевода для небольшого смещения начала координат, чтобы что окончательный контент центрирован.

Что-то вроде (только пример, непроверенный):

<<
  /BeginPage {
    0.95 0.95 scale
    16 20 translate
  }
>> setpagedevice

Кстати, вы понимаете, что Ghostscript находится под лицензией AGPL?

Кроме того, я очень настоятельно рекомендую вам не использовать ключи -g и -r, а вместо этого просто использовать -dDEVICEWIDTHPOINTS и -dDEVICEHEIGHTPOINTS для изменения размера носителя.

Переключатель -g работает с пикселями, но устройства вывода высокого уровня (например, pdfwrite и ps2write) не испускают пиксели, они записывают векторные объекты высокого уровня. Однако из-за различий в графических моделях PostScript и PDF некоторые элементы необходимо преобразовывать в изображения и заключать таким образом в вывод PostScript. Установив разрешение на 300, вы фиксируете разрешение, при котором отображаются эти элементы (например, страницы с прозрачностью). Я бы посоветовал вам не делать этого, если только вы не работаете в очень строго контролируемом рабочем процессе и не знаете разрешение конечного вывода.

Используя переключатели DEVICEHEIGHTPOINTS и DEVICEWIDTHPOINTS, вы можете управлять размером носителя без привязки к разрешению. Обратите внимание, что в PostScript (и PDF) 1 пункт = 1/72 дюйма.

16.01.2017
  • Я попытался добавить /BeginPage (..) с переключателем -c и -f, но это больше не приводит к выводу, может быть, я не могу использовать его с PDFFitPage одновременно? Я не изменяю исходный код, просто использую его как библиотеку, чтобы использовать его в управляемом контексте. Значит, мне не нужно распространять свой код? Тем не менее, я каждый раз знаю разрешение конечного вывода, но я думаю, что изменю свой код на -dDEVICE* с -gx. 16.01.2017
  • Если вы используете библиотеку (предположительно DLL), то вы должны соответствовать AGPL, насколько я понимаю, потому что ваши пользователи должны иметь возможность заменить используемую вами «библиотеку» другой, потенциально другая версия, что означает, что API мог измениться. Если это произойдет, они должны иметь возможность изменять ваш исходный код, поэтому вам необходимо AGPL для вашего кода. Конечно, я не юрист, ваша интерпретация может отличаться. Вы должны иметь возможность использовать BeginPage с -dFitPage, но я (как я уже сказал) не пробовал. Вы можете попробовать использовать /Install вместо /BeginPage. Я попробую позже. 16.01.2017
  • Хм, я использую этот API: ghostscript.com/doc/9.02/API.htm . Просто из-за использования Google я не уверен в лицензии, единственное, что я делаю, это использую библиотеку для личного использования, поэтому я не уверен в ее распространении (поскольку я не трогаю их DLL, просто используйте заголовок и библиотеку файл и экспортировать метод в мою собственную DLL, созданную для моих нужд, в управляемый код...) Я пробовал и с FitPage, и без, без GS будет использовать только кусок листа при создании PS. Я обновил свой вопрос своим решением; команды масштабирования и перевода сделали это за меня. 16.01.2017
  • Если это личное использование, у вас все равно все в порядке, проблема заключается только в предоставлении кода или службы, использующей код, другим людям. Личное использование всегда в порядке. О, и я рад, что это сработало для вас :-) 16.01.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..