Ustawianie rozmiaru, skali i orientacji

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

W sekcji Drukowanie strony szczegółowo omówiono procedurę drukowania prostego zadania, w którym wydruk był bezpośrednim odzwierciedleniem ekranowego rozmiaru i położenia ikonki. Jednak drukarki drukują z różnymi rozdzielczościami i mogą być skonfigurowane w sposób negatywnie wpływający na wygląd wydrukowanej ikonki.

Środowiska wykonawcze Flash mogą odczytywać ustawienia drukowania obowiązujące w systemie operacyjny, ale uzyskane w ten sposób właściwości są przeznaczone tylko do odczytu: można uwzględniać ich wartości, ale nie można ich zmieniać. Możliwe jest zatem odczytanie rozmiaru strony wybranego w drukarce i dopasowanie drukowanej treści do tego rozmiaru. Można także odczytać rozmiary marginesów i orientację strony. Aby uwzględnić ustawienia drukarki, należy określić obszar drukowania, skompensować różnicę między rozdzielczością ekranu a wymiarami punktowymi w drukarce lub przekształcić treść tak, aby była pod względem rozmiaru i orientacji dopasowana do ustawień drukarki użytkownika.

Prostokąty jako obszary drukowania

Metoda PrintJob.addPage() umożliwia określenie regionu ikonki, który chcemy wydrukować. Drugi parametr, printArea, , ma postać obiektu Rectangle. Wartość tego parametru można podać na trzy sposoby:

  • Można utworzyć obiekt Rectangle o konkretnych właściwościach i użyć go w wywołaniu addPage() , tak jak w poniższym przykładzie:

    private var rect1:Rectangle = new Rectangle(0, 0, 400, 200); 
    myPrintJob.addPage(sheet, rect1);
  • Jeśli obiekt Rectangle jeszcze nie został zdefiniowany, można go zdefiniować wprost w wywołaniu, co ilustruje poniższy przykład:

    myPrintJob.addPage(sheet, new Rectangle(0, 0, 100, 100));
  • Jeśli chcemy podać wartość trzeciego parametru w wywołaniu addPage() , ale nie chcemy określać prostokąta, w miejsce drugiego parametru należy podać wartość null :

    myPrintJob.addPage(sheet, null, options);

Porównanie punktów i pikseli

Szerokość i wysokość prostokąta są wyrażone w pikselach. W drukarce stosowana jest inna miara wydruku: punkt. Punkty mają stały rozmiar fizyczny (1/72 cala), natomiast wielkość piksela na ekranie jest uzależniona od rozdzielczości ekranu. Współczynnik konwersji między pikselami i punktami jest uzależniony od ustawień drukarki oraz od tego, czy ikonka jest skalowany. Nieskalowany obiekt Sprite, który ma szerokość równą 72 pikselom, będzie na wydruku miał szerokość 1 cala — jeden piksel jest równy jednemu punktowi bez względu na rozdzielczość ekranu.

Do przeliczania cali lub centymetrów na punkty lub twipy (1/20 punktu typograficznego) można korzystać z poniższych wzorów:

  • 1 punkt = 1/72 cala = 20 twipów

  • 1 cal = 72 punkty = 1440 twipów

  • 1 centymetr = 567 twipów

Jeśli parametr printArea zostanie pominięty lub zostanie określony niepoprawnie, zostanie wydrukowany cały obszar ikonki.

Skalowanie

Jeśli chcemy przeskalować obiekt Sprite przed wydrukowaniem go, należy ustawić właściwości skali (patrz Zmiana wielkości i skalowanie obiektów ) przed wywołaniem metody PrintJob.addPage() , a po wydrukowaniu przywrócić ich pierwotne wartości. Skala obiektu Sprite nie ma związku z właściwością printArea . Innymi słowy, jeśli określimy obszar drukowania o wymiarach 50 na 50 pikseli, zostanie wydrukowanych 2500 pikseli. W przypadku zmiany skali obiektu Sprite również drukowane będą piksele (2500 pikseli), ale obiekt Sprite będzie drukowany w określonej skali.

Przykład można znaleźć w rozdziale Przykład z drukowaniem: skalowanie, obcinanie i reagowanie .

Drukowanie w orientacji poziomej lub pionowej

Ponieważ program Flash Player i środowisko AIR mogą wykryć ustawienia orientacji wydruku, program w języku ActionScript może dopasować rozmiar lub obrót treści do ustawień drukarki, co ilustruje poniższy przykład:

if (myPrintJob.orientation == PrintJobOrientation.LANDSCAPE) 
{ 
    mySprite.rotation = 90; 
}
Uwaga: Jeśli użytkownik chce odczytać ustawienie papieru dla orientacji treści na papierze, należy zaimportować klasę PrintJobOrientation . Klasa PrintJobOrientation udostępnia stałe wartości, które definiują orientację treści na stronie. Do importowania klasy służy poniższa instrukcja:
import flash.printing.PrintJobOrientation;

Reagowanie na wysokość i szerokość strony

Korzystając z podobnej strategii, jak przy uwzględnianiu orientacji papieru, można odczytać wysokość i szerokość strony, a następnie odpowiednio zareagować, osadzając odpowiednią logikę w instrukcji if . Poniżej przedstawiono odpowiedni przykładowy kod:

if (mySprite.height > myPrintJob.pageHeight) 
{ 
    mySprite.scaleY = .75; 
}

Ponadto możliwe jest obliczenie marginesów. Należy w tym celu porównać wymiary strony i papieru, co ilustruje poniższy przykład:

margin_height = (myPrintJob.paperHeight - myPrintJob.pageHeight) / 2; 
margin_width = (myPrintJob.paperWidth - myPrintJob.pageWidth) / 2;