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