Java >> Java Program >  >> Java

JavaFX Print API

Detta är ett JavaFX-utskriftsexempel. JavaFX lade till stöd för utskrift av noder genom Print API i javafx.print paket. API:t består av följande klasser:

  • Skrivare
  • Skrivarattribut
  • Utskriftsupplösning
  • Skrivarjobb
  • Jobbinställningar
  • Papper
  • PaperSource
  • Sidlayout
  • Sidintervall

Förekomster av de ovan angivna klasserna representerar olika delar av utskriftsprocessen. Till exempel representerar en skrivare en skrivare som kan användas för utskriftsjobb. Ett PrinterJob representerar ett utskriftsjobb som kan skickas till en Printer för utskrift. Och ett papper representerar pappersstorlekarna som är tillgängliga på skrivare.

Print-API:et ger stöd för att skriva ut noder som kan vara kopplade till en scengraf eller inte.

Om en nod modifieras under utskriftsprocessen kanske den utskrivna noden inte visas korrekt. Observera att utskriften av en nod kan sträcka sig över flera pulshändelser vilket resulterar i samtidiga förändringar i innehållet som skrivs ut. För att säkerställa korrekt utskrift, se till att Node som skrivs ut ändras inte under utskriftsprocessen.

Noder kan skrivas ut på vilken tråd som helst, inklusive JavaFX Application Thread. Det rekommenderas att stora, tidskrävande utskriftsjobb skickas i en bakgrundstråd för att hålla användargränssnittet responsivt.

Klasser i Print API är slutgiltiga eftersom de representerar befintliga utskriftsenhetsegenskaper. De flesta av dem tillhandahåller ingen offentlig konstruktör eftersom du inte kan skapa en utskriftsenhet. Istället får du deras referenser med hjälp av fabriksmetoder i olika klasser.

Följande tabell visar en översikt över hela artikeln:

Innehållsförteckning

1. Lista över tillgängliga skrivare
1.1 Koden
1.2 GUI
2. Hämta standardskrivaren
2.1 Koden
2.2 GUI
3. Utskrift av noder
3.1 Koden
3.2 GUI
4. Visar sidinställningarna
4.1 Koden
4.2 GUI
5. Visar utskriftsdialogrutorna
5.1 Koden
5.2 GUI
6. Anpassa inställningar för skrivarjobb
6.1 Koden
6.2 GUI
7. Ställa in sidlayout
7.1 Koden
7.2 GUI
8. Ladda ner Java-källkod

Följande exempel använder Java SE 8 och JavaFX 2.2.

1. Lista över tillgängliga skrivare

1.1 Koden

FxPrintExample1.java

import javafx.application.Application;
import javafx.collections.ObservableSet;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.print.Printer;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FxPrintExample1 extends Application
{
	public static void main(String[] args) 
	{
		Application.launch(args);
	}
	
	@Override
	public void start(Stage stage)
	{
		// Create the TextArea
		final TextArea textArea = new TextArea();
		// Create the Button
		Button button = new Button("Get all Printers");

		// Create the Event-Handlers for the Buttons
		button.setOnAction(new EventHandler <ActionEvent>() 
		{
            public void handle(ActionEvent event) 
            {
            	//Get all Printers
        		ObservableSet<Printer> printers = Printer.getAllPrinters();
        		
        		for(Printer printer : printers) 
        		{
        			textArea.appendText(printer.getName()+"\n");
        		}		
            }
        });
		
		// Create the VBox with a 10px spacing
		VBox root = new VBox(10);	
		// Add the Children to the VBox
		root.getChildren().addAll(button,textArea);	
		// Set the Size of the VBox
		root.setPrefSize(400, 250);		
		// Set the Style-properties of the VBox
		root.setStyle("-fx-padding: 10;" +
				"-fx-border-style: solid inside;" +
				"-fx-border-width: 2;" +
				"-fx-border-insets: 5;" +
				"-fx-border-radius: 5;" +
				"-fx-border-color: blue;");
		
		// Create the Scene
		Scene scene = new Scene(root);
		// Add the scene to the Stage
		stage.setScene(scene);
		// Set the title of the Stage
		stage.setTitle("Showing all Printers");
		// Display the Stage
		stage.show();		
	}
}

Printer.getAllPrinters() statisk metod returnerar en observerbar lista över installerade skrivare på maskinen. Observera att listan över skrivare som returneras av metoden kan ändras med tiden när nya skrivare installeras eller gamla skrivare tas bort. Använd getName() metod för Printer för att få namnet på skrivaren.

Följande kodavsnitt listar alla installerade skrivare på maskinen som kör koden. Du kan få en annan utdata.

//Get all Printers
ObservableSet<Printer> printers = Printer.getAllPrinters();

for(Printer printer : printers) 
{
	textArea.appendText(printer.getName()+"\n");
}		

1.2 GUI

Följande GUI visar en lista över alla skrivare:

Visar alla skrivare med JavaFX Print API

2. Hämta standardskrivaren

2.1 Koden

FxPrintExample2.java

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.print.Printer;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FxPrintExample2 extends Application
{
	public static void main(String[] args) 
	{
		Application.launch(args);
	}
	
	@Override
	public void start(Stage stage)
	{
		// Create the TextArea
		final TextArea textArea = new TextArea();
		// Create the Button
		Button button = new Button("Get the Default Printer");

		// Create the Event-Handlers for the Buttons
		button.setOnAction(new EventHandler <ActionEvent>() 
		{
            public void handle(ActionEvent event) 
            {
            	//Get the Default Printer
        		Printer defaultprinter = Printer.getDefaultPrinter();

        		if (defaultprinter != null) 
        		{
        			String name = defaultprinter.getName();
        			textArea.appendText("Default printer name: " + name);
        		} 
        		else 
        		{
        			textArea.appendText("No printers installed.");
        		}		
            }
        });
		
		// Create the VBox with a 10px spacing
		VBox root = new VBox(10);	
		// Add the Children to the VBox
		root.getChildren().addAll(button,textArea);	
		// Set the Size of the VBox
		root.setPrefSize(400, 250);		
		// Set the Style-properties of the VBox
		root.setStyle("-fx-padding: 10;" +
				"-fx-border-style: solid inside;" +
				"-fx-border-width: 2;" +
				"-fx-border-insets: 5;" +
				"-fx-border-radius: 5;" +
				"-fx-border-color: blue;");
		
		// Create the Scene
		Scene scene = new Scene(root);
		// Add the scene to the Stage
		stage.setScene(scene);
		// Set the title of the Stage
		stage.setTitle("Show the default Printer");
		// Display the Stage
		stage.show();		
	}
}

Printer.getDefaultPrinter() metod returnerar standardvärdet Printer . Metoden kan returnera null om ingen skrivare är installerad. Standardskrivaren kan ändras på en maskin. Därför kan metoden returnera olika skrivare från samtal till samtal, och skrivaren som returneras kanske inte är giltig efter en tid.

Följande kodavsnitt visar hur man får standard Printer .

//Get the Default Printer
Printer defaultprinter = Printer.getDefaultPrinter();

if (defaultprinter != null) 
{
	String name = defaultprinter.getName();
	textArea.appendText("Default printer name: " + name);
} 
else 
{
	textArea.appendText("No printers installed.");
}		

2.2 GUI

Följande bild visar standardskrivaren. I det här fallet är det en CutePDF Writer.

Skaffa standardskrivaren med JavaFX Print API

3. Utskrift av noder

3.1 Koden

FxPrintExample3.java

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.print.PrinterJob;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FxPrintExample3 extends Application
{
	// Create the JobStatus Label
	private Label jobStatus = new Label();
	
	public static void main(String[] args) 
	{
		Application.launch(args);
	}
	
	@Override
	public void start(Stage stage)
	{
		// Create the VBox
		final VBox root = new VBox(5);

		// Create the Text Label
		Label textLabel = new Label("Please insert your Text:");
		
		// Create the TextArea
		final TextArea textArea = new TextArea();
		
		// Create the Buttons
		Button printTextButton = new Button("Print Text");
		Button printSceneButton = new Button("Print Scene");
		
		// Create the Event-Handlers for the Buttons
		printTextButton.setOnAction(new EventHandler <ActionEvent>() 
		{
            public void handle(ActionEvent event) 
            {
            	print(textArea);
            }
        });

		printSceneButton.setOnAction(new EventHandler <ActionEvent>() 
		{
            public void handle(ActionEvent event) 
            {
            	print(root);
            }
        });
		
		// Create the Status Box
		HBox jobStatusBox = new HBox(5, new Label("Job Status: "), jobStatus);
		// Create the Button Box
		HBox buttonBox = new HBox(5, printTextButton, printSceneButton);

		// Add the Children to the VBox		
		root.getChildren().addAll(textLabel, textArea, buttonBox, jobStatusBox);
		// Set the Size of the VBox
		root.setPrefSize(400, 300);		
		
		// Set the Style-properties of the VBox
		root.setStyle("-fx-padding: 10;" +
				"-fx-border-style: solid inside;" +
				"-fx-border-width: 2;" +
				"-fx-border-insets: 5;" +
				"-fx-border-radius: 5;" +
				"-fx-border-color: blue;");
		
		// Create the Scene
		Scene scene = new Scene(root);
		// Add the scene to the Stage
		stage.setScene(scene);
		// Set the title of the Stage
		stage.setTitle("A Printing Nodes Example");
		// Display the Stage
		stage.show();		
	}
	
	private void print(Node node) 
	{
		// Define the Job Status Message
		jobStatus.textProperty().unbind();
		jobStatus.setText("Creating a printer job...");
		
		// Create a printer job for the default printer
		PrinterJob job = PrinterJob.createPrinterJob();
		
		if (job != null) 
		{
			// Show the printer job status
			jobStatus.textProperty().bind(job.jobStatusProperty().asString());
			
			// Print the node
			boolean printed = job.printPage(node);

			if (printed) 
			{
				// End the printer job
				job.endJob();
			} 
			else 
			{
				// Write Error Message
				jobStatus.textProperty().unbind();
				jobStatus.setText("Printing failed.");
			}
		} 
		else 
		{
			// Write Error Message
			jobStatus.setText("Could not create a printer job.");
		}
	}	
}

Skriver ut en Node är lätt. Skapa en PrinterJob och ring dess printPage() metod som skickar Node ska skrivas ut.

Detaljerna i följande kodavsnitt kommer att diskuteras i nästa meningar.

// Create a printer job for the default printer
PrinterJob job = PrinterJob.createPrinterJob();

if (job != null) 
{
	// Show the printer job status
	jobStatus.textProperty().bind(job.jobStatusProperty().asString());

	// Print the node
	boolean printed = job.printPage(node);

	if (printed) 
	{
		// End the printer job
		job.endJob();
	} 
	else 
	{
		// Write Error Message
		jobStatus.textProperty().unbind();
		jobStatus.setText("Printing failed.");
	}
} 
else 
{
	// Write Error Message
	jobStatus.setText("Could not create a printer job.");
}

Du kan använda createPrinterJob() statisk metod för PrinterJob klass för att skapa ett skrivarjobb:

  • offentlig statisk PrinterJob createPrinterJob()
  • offentlig statisk PrinterJob createPrinterJob(Skrivarskrivare)

Metoden med no-args skapar ett skrivarjobb för standardskrivaren. Du kan använda den andra versionen av metoden för att skapa ett skrivarjobb för den angivna skrivaren.

Du kan byta skrivare mot en PrinterJob genom att anropa dess setPrinter() metod. Om de aktuella skrivarjobbinställningarna inte stöds av den nya skrivaren, återställs inställningarna automatiskt för den nya skrivaren.

Ställa in Printer till null för jobbet kommer att använda standardskrivaren. Använd en av följande printPage() metoder för att skriva ut en Node :

  • boolean printPage(nodnod)
  • boolean printPage(PageLayout pageLayout, Nod node)

Den första versionen av metoden tar endast noden som ska skrivas ut som parameter. Den använder standard sidlayout för jobbet för utskrift.

Den andra versionen låter dig ange en sidlayout för utskrift av Node . Den angivna sidlayouten kommer att åsidosätta PageLayout för jobbet och det kommer endast att användas för att skriva ut den angivna noden. För efterföljande utskrift, standard PageLayout för jobbet kommer att användas. Du kan skapa en PageLayout med Printer klass.

printPage() metod returnerar sant om utskriften lyckades. Annars returnerar det falskt. När du är klar med utskriften ringer du endJob() metod. Metoden returnerar sant om jobbet kan spoolas till skrivarkön. Annars returnerar det falskt, vilket kan indikera att jobbet inte kunde spoolas eller att det redan var slutfört. Efter framgångsrikt slutförande av jobbet kan jobbet inte längre återanvändas.

Du kan avbryta ett utskriftsjobb med cancelJob() metod för PrinterJob . Utskriften får inte avbrytas omedelbart, till exempel när en sida är mitt i utskriften. Avbokningen sker så snart som möjligt. Metoden har ingen effekt om,

  • Jobbet har redan begärts att avbrytas.
  • Jobbet är redan slutfört.
  • Det finns ett fel i jobbet.

En PrinterJob har en skrivskyddad status, som definieras av en av konstanterna för PrinterJob.JobStatus enum:

  • INTE_STARTAD
  • UTSKRIFT
  • AVSTÄLLD
  • KLAR
  • FEL

NOT_STARTED status indikerar ett nytt jobb. I denna status kan jobbet konfigureras och utskrift kan påbörjas. PRINTING status indikerar att jobbet har begärt att skriva ut minst en sida och att utskriften inte har avslutats. I denna status kan jobbet inte konfigureras.

De andra tre statuserna, CANCELED , DONE och ERROR , anger jobbets avslutningsstatus. När jobbet är i en av dessa statusar ska det inte återanvändas. Du behöver inte ringa endJob() metod när statusen går till CANCELED eller ERROR . DONE status anges när utskriften lyckades och endJob() metoden kallades. Klassen PrinterJob innehåller en skrivskyddad jobStatus egenskap som anger aktuell status för utskriftsjobbet.

3.2 GUI

GUI för ovanstående program visar hur man skriver ut noder. Den visar ett TextArea där du kan skriva in text.

Två knappar tillhandahålls:en skriver ut TextArea noden och den andra hela scenen. När utskriften påbörjas visas utskriftsjobbets status i en etikett.

Skriva ut en nod eller text med JavaFX Print API

När du har tryckt på knappen Print, visas följande dialogruta:

Välja fildestination för utskriftsjobbet med JavaFX Print API

Nu kan du definiera platsen och namnet på dokumentet.

4. Visar sidinställningarna

4.1 Koden

FxPrintExample4.java

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.print.PrinterJob;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FxPrintExample4 extends Application
{
	// Create the JobStatus Label	
	private final Label jobStatus = new Label();
	
	public static void main(String[] args) 
	{
		Application.launch(args);
	}
	
	@Override
	public void start(final Stage stage)
	{
		// Create the Text Label
		Label textLabel = new Label("Please insert your Text:");

		// Create the TextArea
		final TextArea textArea = new TextArea();

		// Create the Buttons
		Button pageSetupButton = new Button("Page Setup and Print");
		
		// Create the Event-Handlers for the Button
		pageSetupButton.setOnAction(new EventHandler <ActionEvent>() 
		{
            public void handle(ActionEvent event) 
            {
            	pageSetup(textArea, stage);
            }
        });
		
		// Create the Status Box
		HBox jobStatusBox = new HBox(5, new Label("Job Status: "), jobStatus);
		// Create the Button Box
		HBox buttonBox = new HBox(pageSetupButton);
		
		// Create the VBox
		VBox root = new VBox(5);

		// Add the Children to the VBox		
		root.getChildren().addAll(textLabel, textArea, buttonBox, jobStatusBox);
		// Set the Size of the VBox
		root.setPrefSize(400, 300);		
		
		// Set the Style-properties of the VBox
		root.setStyle("-fx-padding: 10;" +
				"-fx-border-style: solid inside;" +
				"-fx-border-width: 2;" +
				"-fx-border-insets: 5;" +
				"-fx-border-radius: 5;" +
				"-fx-border-color: blue;");
		
		// Create the Scene
		Scene scene = new Scene(root);
		// Add the scene to the Stage
		stage.setScene(scene);
		// Set the title of the Stage
		stage.setTitle("A Printing Dialog Example");
		// Display the Stage
		stage.show();		
	}
	
	private void pageSetup(Node node, Stage owner) 
	{
		// Create the PrinterJob
		PrinterJob job = PrinterJob.createPrinterJob();
		
		if (job == null) 
		{
			return;
		}
		
		// Show the page setup dialog
		boolean proceed = job.showPageSetupDialog(owner);
		
		if (proceed) 
		{
			print(job, node);
		}
	}
	
	private void print(PrinterJob job, Node node) 
	{
		// Set the Job Status Message
		jobStatus.textProperty().bind(job.jobStatusProperty().asString());
		
		// Print the node
		boolean printed = job.printPage(node);
	
		if (printed) 
		{
			job.endJob();
		}
	}	
}

Print API tillåter användare att interagera med utskriftsprocessen. Användare kan ändra skrivarinställningarna interaktivt innan utskriften påbörjas. API:et låter dig visa dialogrutorna Utskriftsinställningar och Utskriftsinställningar för att ställa in sidegenskaper och skrivarinställningar för jobbet.

Du kan låta användaren konfigurera sidlayouten genom att visa en dialogruta för sidinställningar. Använd
showPageSetupDialog(Window owner) metod för PrinterJob för att visa en dialogruta för sidinställningar. Användaren kan ställa in sidstorlek, källa, orientering och marginal. Dialogrutan kan tillåta användaren att komma åt andra utskriftsegenskaper såsom listan över skrivare.

När användaren har bekräftat inställningarna i dialogrutan visas PrinterJob har de nya inställningarna. Metoden returnerar true om användaren bekräftar inställningarna i dialogrutan. Den returnerar falskt om användaren avbryter dialogrutan. Den returnerar också false om dialogrutan inte kan visas, till exempel när jobbet inte finns i NOT_STARTED stat.

Ägarparametern till metoden är fönstret som kommer att vara ägare till dialogrutan. Det kan vara null. Om det anges kommer ingångarna till fönstret att blockeras medan dialogrutan visas.

Följande kodavsnitt visar hur man skapar en PageSetupDialog :

// Create the PrinterJob
PrinterJob job = PrinterJob.createPrinterJob();

if (job == null) 
{
	return;
}

// Show the page setup dialog
boolean proceed = job.showPageSetupDialog(owner);

if (proceed) 
{
	print(job, node);
}

4.2 GUI

Följande bild visar ett exempel på dialogrutan Sidinställningar:

Definition av sidinställningarna med JavaFX Print API

Efter att ha tryckt på Utskriftsformat och Skriv ut Button , kommer följande dialogruta att visas:

Definition av sidinställningarna med JavaFX Print API

Nu kan du definiera formatet och andra attribut.

5. Visar utskriftsdialogrutorna

5.1 Koden

FxPrintExample5.java

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.print.PrinterJob;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FxPrintExample5 extends Application
{
	// Create the JobStatus Label	
	private final Label jobStatus = new Label();
	
	public static void main(String[] args) 
	{
		Application.launch(args);
	}
	
	@Override
	public void start(final Stage stage)
	{
		// Create the Text Label
		Label textLabel = new Label("Please insert your Text:");

		// Create the TextArea
		final TextArea textArea = new TextArea();

		// Create the Buttons
		Button printSetupButton = new Button("Print Setup and Print");
		
		// Create the Event-Handlers for the Button
		printSetupButton.setOnAction(new EventHandler () 
		{
            public void handle(ActionEvent event) 
            {
            	printSetup(textArea, stage);
            }
        });
		
		// Create the Status Box
		HBox jobStatusBox = new HBox(5, new Label("Job Status: "), jobStatus);
		// Create the Button Box
		HBox buttonBox = new HBox(printSetupButton);
		
		// Create the VBox
		VBox root = new VBox(5);

		// Add the Children to the VBox		
		root.getChildren().addAll(textLabel, textArea, buttonBox, jobStatusBox);
		// Set the Size of the VBox
		root.setPrefSize(400, 300);		
		
		// Set the Style-properties of the VBox
		root.setStyle("-fx-padding: 10;" +
				"-fx-border-style: solid inside;" +
				"-fx-border-width: 2;" +
				"-fx-border-insets: 5;" +
				"-fx-border-radius: 5;" +
				"-fx-border-color: blue;");
		
		// Create the Scene
		Scene scene = new Scene(root);
		// Add the scene to the Stage
		stage.setScene(scene);
		// Set the title of the Stage
		stage.setTitle("A Printing Dialog Example");
		// Display the Stage
		stage.show();		
	}
	
	private void printSetup(Node node, Stage owner) 
	{
		// Create the PrinterJob		
		PrinterJob job = PrinterJob.createPrinterJob();
	
		if (job == null) 
		{
			return;
		}

		// Show the print setup dialog
		boolean proceed = job.showPrintDialog(owner);
		
		if (proceed) 
		{
			print(job, node);
		}
	}
	
	private void print(PrinterJob job, Node node) 
	{
		// Set the Job Status Message
		jobStatus.textProperty().bind(job.jobStatusProperty().asString());
		
		// Print the node
		boolean printed = job.printPage(node);
	
		if (printed) 
		{
			job.endJob();
		}
	}	
}

Du kan använda showPrintDialog(Window owner) metod för att visa en utskriftsdialogruta där användaren kan ändra skrivaren och inställningarna för PrinterJob . Returvärdet och parametern för denna metod har liknande betydelser som showPageSetupDialog() metod.

Följande kodavsnitt visar hur man skapar en utskriftsdialog:

// Create the PrinterJob		
PrinterJob job = PrinterJob.createPrinterJob();

if (job == null) 
{
	return;
}

// Show the print setup dialog
boolean proceed = job.showPrintDialog(owner);

if (proceed) 
{
	print(job, node);
}

5.2 GUI

Följande bild visar ett exempel på dialogrutan Print Setup:

Definition av utskriftsinställningen med JavaFX Print API

Efter att ha tryckt på Print Setup och Print Button , kommer följande dialogruta att visas:

Definition av utskriftsinställningen med JavaFX Print API

Nu kan du definiera skrivaren, sidorna och andra attribut.

6. Anpassa inställningar för skrivarjobb

6.1 Koden

FxPrintExample6.java

import java.util.Set;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.print.Collation;
import javafx.print.JobSettings;
import javafx.print.PageOrientation;
import javafx.print.PrintSides;
import javafx.print.Printer;
import javafx.print.PrinterAttributes;
import javafx.print.PrinterJob;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FxPrintExample6 extends Application
{
	// Create the TextArea
	final TextArea textArea = new TextArea();
	
	public static void main(String[] args) 
	{
		Application.launch(args);
	}
	
	@Override
	public void start(Stage stage)
	{
		// Create the Button
		Button button = new Button("Get all Printer Attributes");
		
		// Create the Event-Handlers for the Buttons
		button.setOnAction(new EventHandler <ActionEvent>() 
		{
            public void handle(ActionEvent event) 
            {
            	printAttributes();
            }
        });
		
		// Create the VBox with a 10px spacing
		VBox root = new VBox(10);	
		// Add the Children to the VBox
		root.getChildren().addAll(button, textArea);	
		// Set the Size of the VBox
		root.setPrefSize(400, 250);		
		// Set the Style-properties of the VBox
		root.setStyle("-fx-padding: 10;" +
				"-fx-border-style: solid inside;" +
				"-fx-border-width: 2;" +
				"-fx-border-insets: 5;" +
				"-fx-border-radius: 5;" +
				"-fx-border-color: blue;");
		
		// Create the Scene
		Scene scene = new Scene(root);
		// Add the scene to the Stage
		stage.setScene(scene);
		// Set the title of the Stage
		stage.setTitle("Showing all Printer Attributes");
		// Display the Stage
		stage.show();			
	}
	
	private void printAttributes()
	{
		// Get the Default Printer
		Printer printer = Printer.getDefaultPrinter();
		// Get the Printer Attributes
		PrinterAttributes attribs = printer.getPrinterAttributes();

		// Read some printer attributes
		int maxCopies = attribs.getMaxCopies();
		PrintSides printSides = attribs.getDefaultPrintSides();
		Set<PageOrientation> orientations = attribs.getSupportedPageOrientations();
		Set<Collation> collations = attribs.getSupportedCollations();
		
		// Print the printer attributes
		textArea.appendText("Max. Copies: " + maxCopies + "\n");
		textArea.appendText("Print Sides: " + printSides + "\n");
		textArea.appendText("Supported Orientation: " + orientations + "\n");
		textArea.appendText("Supported Collations: " + collations + "\n");
		
		// Create a printer job for the default printer
		PrinterJob job = PrinterJob.createPrinterJob();
		// Get the JobSettings for the print job
		JobSettings jobSettings = job.getJobSettings();
		
		// Print the printer attributes
		textArea.appendText("Print Sides: " + jobSettings.getPrintSides() + "\n");
		
		// Set the printSides to DUPLEX
		jobSettings.setPrintSides(PrintSides.DUPLEX);
		
		// Print the printer attributes
		textArea.appendText("Print Sides: " + jobSettings.getPrintSides() + "\n");				
	}
}

Print API innehåller två klasser som är relaterade till skrivar- och skrivarjobbinställningar:

  • Skrivarattribut
  • Jobbinställningar

En Printer har attribut som indikerar skrivarens utskriftsmöjligheter. Exempel på skrivarattribut är standardpappersstorlek, pappersstorlekar som stöds, maximalt antal kopior och standardsortering.

Ett PrinterAttributes-objekt kapslar in attributen för en Printer . Print API låter dig inte ändra skrivarens attribut eftersom du inte kan ändra funktionerna hos en skrivare. Du kan bara använda dess kapacitet.

Du kan inte skapa en PrinterAttributes objekt direkt. Du måste hämta den från en Printer objekt med getPrinterAttributes() metod.

Följande kodavsnitt skriver ut några attribut för standardskrivaren i maskinen:Du kan få en annan utdata.

// Get the Default Printer
Printer printer = Printer.getDefaultPrinter();
// Get the Printer Attributes
PrinterAttributes attribs = printer.getPrinterAttributes();

// Read some printer attributes
int maxCopies = attribs.getMaxCopies();
PrintSides printSides = attribs.getDefaultPrintSides();
Set<PageOrientation> orientations = attribs.getSupportedPageOrientations();
Set<Collation> collations = attribs.getSupportedCollations();

// Print the printer attributes
textArea.appendText("Max. Copies: " + maxCopies + "\n");
textArea.appendText("Print Sides: " + printSides + "\n");
textArea.appendText("Supported Orientation: " + orientations + "\n");
textArea.appendText("Supported Collations: " + collations + "\n");

En JobSettings innehåller de skrivarattribut som ska användas för ett utskriftsjobb för en specifik skrivare. Du kan få JobSettings av ett utskriftsjobb med getJobSettings() metod för PrinterJob objekt. En JobSettings är ett föränderligt objekt. Den innehåller en egenskap för varje skrivarattribut som kan ställas in för ett utskriftsjobb. Som standard initieras dess egenskaper till skrivarens standardegenskaper. Du kan ändra egenskapen som ska användas för det aktuella utskriftsjobbet. Om du ändrar egenskapen för en JobSettings som inte stöds av skrivaren, återgår egenskapen till standardvärdet för skrivaren.

Följande kodavsnitt ställer in printSides egenskap till DUPLEX . I det här fallet stöder skrivaren endast ONE_SIDED utskrift.

Därför printSides egenskapen är inställd på ONE_SIDED , som är standard och endast stöds printSides värde av skrivaren. Du kan få en annan utdata.

// Create a printer job for the default printer
PrinterJob job = PrinterJob.createPrinterJob();
// Get the JobSettings for the print job
JobSettings jobSettings = job.getJobSettings();

// Print the printer attributes
textArea.appendText("Print Sides: " + jobSettings.getPrintSides() + "\n");

// Set the printSides to DUPLEX
jobSettings.setPrintSides(PrintSides.DUPLEX);

// Print the printer attributes
textArea.appendText("Print Sides: " + jobSettings.getPrintSides() + "\n");				

För ett utskriftsjobb kan du ange sidintervallen med pageRanges egenskapen för JobSettings .

Egenskapen pageRanges är en array av PageRange. En PageRange har startPage och endPage egenskaper som definierar intervallet.

6.2 GUI

Följande bild visar ett exempel på hur man skaffar Printer attribut:

Visar alla skrivarattribut med JavaFX Print API

7. Ställa in sidlayout

7.1 Koden

FxPrintExample7.java

import javafx.print.JobSettings;
import javafx.print.PageLayout;
import javafx.print.PageOrientation;
import javafx.print.Paper;
import javafx.print.Printer;
import javafx.print.PrinterJob;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.stage.Stage;

public class FxPrintExample7 extends Application
{
	// Create the TextArea
	final TextArea textArea = new TextArea();
	
	public static void main(String[] args) 
	{
		Application.launch(args);
	}
	
	@Override
	public void start(Stage stage)
	{
		// Create the Button
		Button button = new Button("Get all Page Attributes");
		
		// Create the Event-Handlers for the Buttons
		button.setOnAction(new EventHandler () 
		{
            public void handle(ActionEvent event) 
            {
            	printAttributes();
            }
        });
		
		// Create the VBox with a 10px spacing
		VBox root = new VBox(10);	
		// Add the Children to the VBox
		root.getChildren().addAll(button, textArea);	
		// Set the Size of the VBox
		root.setPrefSize(400, 250);		
		// Set the Style-properties of the VBox
		root.setStyle("-fx-padding: 10;" +
				"-fx-border-style: solid inside;" +
				"-fx-border-width: 2;" +
				"-fx-border-insets: 5;" +
				"-fx-border-radius: 5;" +
				"-fx-border-color: blue;");
		
		// Create the Scene
		Scene scene = new Scene(root);
		// Add the scene to the Stage
		stage.setScene(scene);
		// Set the title of the Stage
		stage.setTitle("Showing all Page Layout Attributes");
		// Display the Stage
		stage.show();			
	}

	private void printAttributes()
	{
		// Create the Printer Job
		PrinterJob printerJob = PrinterJob.createPrinterJob();
		
		// Get The Printer Job Settings
		JobSettings jobSettings = printerJob.getJobSettings();
		
		// Get the Page Layout
		PageLayout pageLayout = jobSettings.getPageLayout();
		
		// Get the Page Attributes
		double pgW = pageLayout.getPrintableWidth();
		double pgH = pageLayout.getPrintableHeight();
		double pgLM = pageLayout.getLeftMargin();
		double pgRM = pageLayout.getRightMargin();
		double pgTM = pageLayout.getTopMargin();
		double pgBM = pageLayout.getBottomMargin();
		
		// Show the Page Attributes
		textArea.appendText("Printable Width: " + pgW + "\n");				
		textArea.appendText("Printable Height: " + pgH + "\n");	
		textArea.appendText("Page Left Margin: " + pgLM + "\n");	
		textArea.appendText("Page Right Margin: " + pgRM + "\n");	
		textArea.appendText("Page Top Margin: " + pgTM + "\n");	
		textArea.appendText("Page Bottom Margin: " + pgBM + "\n");	
		
		// Get The Printer
		Printer printer = printerJob.getPrinter();
		// Create the Page Layout of the Printer
		pageLayout = printer.createPageLayout(Paper.A4,
				PageOrientation.LANDSCAPE,Printer.MarginType.EQUAL);
		
		jobSettings.setPageLayout(pageLayout);
		
		// Get the Page Attributes
		pgW = pageLayout.getPrintableWidth();
		pgH = pageLayout.getPrintableHeight();
		pgLM = pageLayout.getLeftMargin();
		pgRM = pageLayout.getRightMargin();
		pgTM = pageLayout.getTopMargin();
		pgBM = pageLayout.getBottomMargin();
		
		// Show the Page Attributes
		textArea.appendText("Printable Width: " + pgW + "\n");				
		textArea.appendText("Printable Height: " + pgH + "\n");	
		textArea.appendText("Page Left Margin: " + pgLM + "\n");	
		textArea.appendText("Page Right Margin: " + pgRM + "\n");	
		textArea.appendText("Page Top Margin: " + pgTM + "\n");	
		textArea.appendText("Page Bottom Margin: " + pgBM + "\n");			
	}
	
}

En instans av PageLayout klass representerar sidinställningarna för ett utskriftsjobb. Som standard är det inställt på skrivarens standardvärde. Du har redan sett hur du ställer in sidlayouten med hjälp av dialogrutan Utskriftsformat. En PageLayout kapslar in tre saker:

  • Pappersstorleken
  • Sidorienteringen
  • Sidmarginalerna

En PageLayout används för att konfigurera sidans utskrivbara område, som måste ligga inom hårdvarans utskrivbara område. Om en sida renderas utanför det utskrivbara området för hårdvaran klipps innehållet. Du kan inte skapa en PageLayout objekt direkt. Du måste använda en av createPageLayout() metoder för Printer för att få en PageLayout .

  • Sidlayout skapa Sidlayout(Papperspapper, Sidorientering, dubbel lMargin, dubbel rMargin, dubbel tMargin, dubbel bMargin)
  • Sidlayout skapa Sidlayout(papperspapper, sidorientering, Printer.MarginType mType)

Marginalerna kan anges som siffror eller som en av följande konstanter för Printer.MarginType enum.

  • STANDARD
  • LIKA
  • EQUAL_OPPOSITES
  • HARDWARE_MINIMUM

DEFAULT marginaltyp begär standard 0,75 tum på alla sidor.

EQUAL marginaltypen använder den största av de fyra hårdvarumarginalerna på alla fyra sidorna, så marginalerna är lika på alla fyra sidorna.

EQUAL_OPPOSITES marginaltyp använder den största av vänster och höger hårdvarumarginaler för vänster och höger sida, och den större av de övre och nedre hårdvarumarginalerna för de övre och nedre sidorna.

HARDWARE_MINIMUM begär att de minsta tillåtna hårdvarumarginalerna ska ställas in på alla sidor.

Följande kodavsnitt skapar en PageLayout för papper i A4-storlek, LANDSCAPE sidorientering och lika marginaler på alla sidor. PageLayout är inställd på ett utskriftsjobb.

// Get The Printer
Printer printer = printerJob.getPrinter();
// Create the Page Layout of the Printer
pageLayout = printer.createPageLayout(Paper.A4,
		PageOrientation.LANDSCAPE,Printer.MarginType.EQUAL);

jobSettings.setPageLayout(pageLayout);

// Get the Page Attributes
pgW = pageLayout.getPrintableWidth();
pgH = pageLayout.getPrintableHeight();
pgLM = pageLayout.getLeftMargin();
pgRM = pageLayout.getRightMargin();
pgTM = pageLayout.getTopMargin();
pgBM = pageLayout.getBottomMargin();

Ibland vill du veta storleken på det utskrivbara området på sidan. Du kan få det med getPrintableWidth() och getPrintableHeight() metoder för PageLayout . Detta är användbart om du vill ändra storlek på en nod före utskrift, så att den passar det utskrivbara området.

// Create the Printer Job
PrinterJob printerJob = PrinterJob.createPrinterJob();

// Get The Printer Job Settings
JobSettings jobSettings = printerJob.getJobSettings();

// Get the Page Layout
PageLayout pageLayout = jobSettings.getPageLayout();

// Get the Page Attributes
double pgW = pageLayout.getPrintableWidth();
double pgH = pageLayout.getPrintableHeight();
double pgLM = pageLayout.getLeftMargin();
double pgRM = pageLayout.getRightMargin();
double pgTM = pageLayout.getTopMargin();
double pgBM = pageLayout.getBottomMargin();

// Show the Page Attributes
textArea.appendText("Printable Width: " + pgW + "\n");				
textArea.appendText("Printable Height: " + pgH + "\n");	
textArea.appendText("Page Left Margin: " + pgLM + "\n");	
textArea.appendText("Page Right Margin: " + pgRM + "\n");	
textArea.appendText("Page Top Margin: " + pgTM + "\n");	
textArea.appendText("Page Bottom Margin: " + pgBM + "\n");	

7.2 GUI

Följande bild visar ett exempel på hur man får sidattributen:

Visar alla sidlayoutattribut med JavaFX Print API

8. Ladda ner Java-källkod

Detta var ett exempel på javafx.print JavaFX utskrift

Java-tagg