X marque l'endroit - un travail d'impression

10

Étant donné deux nombres, imprimez une page avec un «X» à l'emplacement spécifié (± 10%).

Les nombres doivent être des pourcentages ou des fractions des dimensions de la zone d'impression de la page, par exemple [25,75]ou ["15%","0%"]ou [0.33,1]. Vous n'avez pas à considérer les marges. N'oubliez pas d'indiquer quel nombre est la largeur, lequel est la hauteur et quel coin est l'origine.

Vous pouvez bien sûr supposer qu'une imprimante est connectée et que toute imprimante virtuelle compte également. En fait, vous souhaiterez peut-être définir une imprimante PDF comme imprimante par défaut avant de commencer ce défi.

Vous pouvez créer un fichier imprimable (par exemple un PDF) et l'envoyer à une imprimante virtuelle, qui à son tour crée votre PDF de résultat, mais vous ne pouvez pas créer directement le PDF final. Ce doit être un travail d'impression approprié.

Si possible, veuillez inclure une photo, une numérisation ou une capture d'écran du résultat, ou un lien vers un document en ligne. Notez qu'Imgur accepte les PDF.

Vous obtiendrez bien sûr plus de votes positifs si vous placez un X plutôt que de générer des retours à la ligne et des espaces avec une police et une taille de papier supposées.

Exemple

Pour une hauteur d'entrée de 75% et une largeur de 25%, en haut à gauche, imprimez le document suivant:


[25,75]


Adam
la source
Sommes-nous autorisés à lire le fichier image de n'importe où?
Beta Decay
@BetaDecay Quel fichier image?
Adám
L'image dans votre question: i.stack.imgur.com/rfZeO.png
Beta Decay
@BetaDecay Vous êtes censé générer un document, pas lire une image.
Adám
Quel format de papier devrions-nous utiliser / assumer, ou est-ce important?
Stephen

Réponses:

6

MacOS Bash + OfficeJet Pro 8600, 46

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

L'origine est le coin supérieur gauche.

J'ai fait un test d'impression pour vérifier les dimensions des caractères de ce qui est imprimé par lpmon imprimante - il semble être 82w x 64h, donc (entier) multiplier les pourcentages par 3/5 et 4/5 respectivement se situe dans la tolérance de 10%.

Résultat, avec une entrée de ligne de commande de 25 75:

entrez la description de l'image ici

Traumatisme numérique
la source
6
Whoa, doit être la première soumission d' objet physique sur PPCG.
Adám
@ Adám nope - J'en avais aussi sur ma question d'imprimante :)
Digital Trauma
1
@ Adám qu'en est- il ?
NoOneIsHere
1

APL (Dyalog) sur Windows, 36 35 octets

Fonction anonyme prenant (Y, X) en pourcentage à partir du coin supérieur gauche comme argument

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

Nous commençons par une liste de trois éléments:

{ une fonction anonyme (toutes les variables sont locales)

 l'argument, par exemple 75 25

( à la droite de

  'X'⎕WC'Printer'W indows C réer un objet imprimante nommé X , le retour'#.X'

  2↓ déposez deux caractères pour obtenir juste 'X'

) à la droite de

'Text' ce que nous ajouterons

'X.'⎕WCW indows C recrée un objet (type, contenu, position) dans l'objet X , renvoyant'#.X'

} fin de la fonction (puisque X est local, il est détruit lorsque la fonction se termine, signalant à Windows que nous avons terminé le travail d'impression, ce qui oblige Windows à l'imprimer)


X @ 75 25

Adam
la source
0

Java 8, 210 209 octets

-1 octet: changé en syntaxe de curry

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){}};

Prend entrée en tant que version à virgule flottante de pour cent: 0.25, 0.75.

Si le format de papier peut être supposé 8,5 x 11 pouces (72 dpi), 184 octets

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){}};

Utilise les valeurs par défaut pour l'impression au format PDF. Maintenant prend entrée en tant que version entière de pour cent: 25, 75.

Si un système d'exploitation Windows peut également être supposé, 177 octets

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){}};

Entrées Comme ci - dessus: 25, 75.

Usage

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);

Cas de test

Pour l'entrée de 0.25, 0.75:

Java Printing Test Case

(Je n'ai pas d'imprimante physique, mais cela devrait fonctionner sans problème)

Justin Mariner
la source
Très impressionnant. Pourquoi as-tu besoin catch(Exception e){}?
Adám
@ Adám Parce que PrinterJob.print()jette un PrinterExceptionet je n'ai vu aucun moyen de le contourner.
Justin Mariner
0

C #, 259 202 201 octets

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 est une police installée sur ma machine Windows 10 par défaut où 4 semble être le nom de police le plus court. J'ai testé cela en exécutant ce qui suit en C # puis en inspectant blahdans le débogueur.

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

Version complète / formatée:

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);
        }
    }
}

Cas de test (0,25, 0,75):


Exemple de document

TheLethalCoder
la source