X отмечает место - задание на печать

10

Учитывая два числа, напечатайте страницу со знаком «X» в указанном месте (± 10%).

Числа должны быть либо процентами, либо долями размеров области печати страницы, например, [25,75]или ["15%","0%"]или [0.33,1]. Вам не нужно учитывать наценки. Просто не забудьте указать, какое число является шириной, а какое высотой, а какой угол является источником.

Вы, конечно, можете предположить, что принтер подключен, и любой виртуальный принтер тоже считается. На самом деле, вы можете установить принтер PDF в качестве принтера по умолчанию, прежде чем начинать эту задачу.

Вы можете создать файл для печати (например, PDF) и отправить его на виртуальный принтер, который, в свою очередь, создает ваш PDF-файл с результатами, но вы не можете напрямую создавать окончательный PDF-файл. Это должно быть правильное задание на печать.

Если возможно, укажите фотографию, отсканируйте или сделайте снимок экрана с результатом или ссылку на онлайн-документ. Обратите внимание, что Imgur принимает PDF-файлы.

Вы, конечно, получите больше голосов, если вы на самом деле поместите X вместо вывода новых строк и пробелов с предполагаемым шрифтом и размером бумаги.

пример

Для высоты ввода 75% и ширины 25% сверху слева выведите следующий документ:


[25,75]


Адам
источник
Разрешено ли читать файл изображения откуда угодно?
Бета-распад
@BetaDecay Какой файл изображения?
Адам
Изображение в вашем вопросе: i.stack.imgur.com/rfZeO.png
бета-распад
@BetaDecay Вы должны создавать документ, а не читать изображение.
Адам
Какой размер бумаги мы должны использовать / принимать, или это имеет значение?
Стивен

Ответы:

6

MacOS Bash + OfficeJet Pro 8600, 46

(yes ''|sed $[$2*3/5]q;printf %$[$1*4/5]sX)|lp

Происхождение - верхний левый угол.

Я сделал тестовую распечатку, чтобы проверить размеры символов того, что печатается lpна моем принтере - кажется, это 82w x 64h, так что (целое число), умножая проценты на 3/5 и 4/5 соответственно, попадает в пределы допуска 10%.

Результат, с вводом командной строки 25 75:

введите описание изображения здесь

Цифровая травма
источник
6
Вау, должно быть первая подача физического объекта на PPCG.
Адам
@ Adám Нету - у меня тоже были вопросы по принтеру :)
Цифровая травма
1
@ Адам, что насчёт этого ?
NoOneIsHere
1

APL (Dyalog) на Windows, 36 35 байт

Анонимная функция, принимающая (Y, X) в процентах от левого верхнего угла в качестве аргумента

{'X.'WC'Text'(2'X'WC'Printer')⍵}

Начнем со списка трех элементов:

{ анонимная функция (все переменные являются локальными)

 аргумент, например 75 25

( справа от

  'X'⎕WC'Printer'W INDOWS C объект reate принтера с именем X , возвратившись'#.X'

  2↓ бросьте два символа, чтобы получить только 'X'

) справа от

'Text' что мы добавим

'X.'⎕WCВт INDOWS С reate а (тип, содержание, положение) объекта в объекте X , возвращая'#.X'

} конец функции (поскольку X локально, он уничтожается при завершении функции, сообщая Windows, что мы закончили с заданием печати, что заставляет Windows распечатать его)


X @ 75 25

Адам
источник
0

Java 8, 210 209 байт

-1 байт: изменен на синтаксис карри

import java.awt.print.*;
x->y->{PrinterJob j=PrinterJob.getPrinterJob();j.setPrintable((g,p,i)->{g.drawString("X",(int)(p.getWidth()*x),(int)(p.getHeight()*y));return i;});try{j.print();}catch(Exception e){}};

Принимает входные данные как с плавающей точкой версии процентов: 0.25, 0.75.

Если размер бумаги может быть принят как 8,5x11 дюймов (72 точек на дюйм), 184 байта

import java.awt.print.*;
x->y->{PrinterJob j=PrinterJob.getPrinterJob();j.setPrintable((g,p,i)->{g.drawString("X",x*612/100,y*792/100);return i;});try{j.print();}catch(Exception e){}};

Использует значения по умолчанию для печати в PDF. Теперь требуется ввод как целый вариант процентов: 25, 75.

Если ОС Windows также может быть принята, 177 байт

import sun.awt.windows.*;
x->y->{WPrinterJob j=new WPrinterJob();j.setPrintable((g,p,i)->{g.drawString("X",x*612/100,y*792/100);return i;});try{j.print();}catch(Exception e){}};

Такие же входы , как и выше: 25, 75.

Применение

import java.awt.print.*;
...
Function<Double, Consumer<Double>> f =
x->y->{PrinterJob j=PrinterJob.getPrinterJob();j.setPrintable((g,p,i)->{g.drawString("X",(int)(p.getWidth()*x),(int)(p.getHeight()*y));return i;});try{j.print();}catch(Exception e){}};
...
f.apply(.25).accept(.75);

Прецедент

Для ввода 0.25, 0.75:

Java Printing Test Case

(У меня нет физического принтера, но это все равно должно работать без проблем)

Джастин Маринер
источник
Очень впечатляюще. Зачем вам нужен catch(Exception e){}?
Адам
@ Adám Потому что PrinterJob.print()выбрасывает, PrinterExceptionи я не вижу способа обойти это.
Джастин Маринер
0

C #, 259 202 201 байт

namespace System.Drawing.Printing{w=>h=>{var p=new PrintDocument();p.PrintPage+=(s,e)=>e.Graphics.DrawString("X",new Font("Onyx",9),Brushes.Red,e.PageBounds.Width*w,e.PageBounds.Height*h);p.Print();};}

Оникс - это шрифт, установленный на моем компьютере с Windows 10 по умолчанию, где 4 кажется самым коротким именем шрифта. Я проверил это, запустив следующее в C #, а затем проверив blahв отладчике.

var blah = FontFamily.Families.GroupBy(o => o.Name.Length)
                              .OrderBy(g => g.Key);

Полная / отформатированная версия:

namespace System.Drawing.Printing
{
    class P
    {
        static void Main(string[] args)
        {
            Func<float, Action<float>> f = w => h =>
            {
                var p = new PrintDocument();
                p.PrintPage += (s, e) =>
                    e.Graphics.DrawString("X", new Font("Onyx", 9), Brushes.Red,
                                          e.PageBounds.Width * w, e.PageBounds.Height * h);
                p.Print();
            };

            f(0.25f)(0.75f);
        }
    }
}

Контрольный пример (0,25, 0,75):


Пример документа

TheLethalCoder
источник