X代表现场–打印作业


10

给定两个数字,请在指定位置(±10%)上打印带有“ X”的页面。

这些数字必须是百分比或页面的打印区域尺寸的分数,例如[25,75]["15%","0%"][0.33,1]。您不必考虑边距。只要记住声明哪个数字是宽度,哪个数字是高度,以及哪个角是原点即可。

您当然可以假设已连接打印机,并且任何虚拟打印机也都可以计数。实际上,您可能想在开始此挑战之前将PDF打印机设置为默认打印机。

您可以创建一个可打印的文件(例如PDF),然后将其发送到虚拟打印机,后者又会创建您的结果PDF,但您可能不会直接创建最终的PDF。这必须是正确的打印作业。

如果可能,请提供结果的照片,扫描结果或屏幕截图,或链接到在线文档。请注意,Imgur接受PDF。

如果您实际放置一个X而不是使用假定的字体和纸张尺寸输出换行符和空格,那么您当然会获得更多的好评。

对于左上角输入的高度75%和宽度25%,打印以下文档:


[25,75]



我们可以从任何地方读取图像文件吗?
Beta Decay's

@BetaDecay什么图像文件?
阿达姆(Adám)'17年

您问题中的图片:i.stack.imgur.com/rfZeO.png
Beta Decay

@BetaDecay您应该生成一个文档,而不是读取图像。
阿达姆(Adám)'17

我们应该使用/假定哪种纸张尺寸,或者这很重要?
斯蒂芬

Answers:


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)'17年


1
@亚当什么这个
NoOneIsHere

1

Windows上的APL(Dyalog)36 35字节

以左上角的百分比(Y,X)作为参数的匿名函数

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

我们从三个元素的列表开始:

{ 一个匿名函数(所有变量都是本地的)

 争论,例如 75 25

( 在 - 的右边

  'X'⎕WC'Printer'w ^ INDOWS ç名为reate打印机对象X,返回'#.X'

  2↓ 放两个字符就可以了 'X'

) 在 - 的右边

'Text' 我们将添加什么

'X.'⎕WCW indows C在对象中创建一个(类型,内容,位置)对象 X中,返回'#.X'

} 函数的结尾(由于X是本地的,因此它在函数终止时被销毁,并向Windows发出信号,表明我们已完成打印作业,这将导致Windows进行打印)


X @ 75 25


0

Java 8,210 209字节

-1个字节:更改为currying语法

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英寸(72dpi),则为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)'17

@Adám因为PrinterJob.print()抛出a 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();};}

Onyx是默认情况下安装在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):


范例文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.