下面列出了java.awt.print.Paper#setImageableArea ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static void doTest() {
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(Chromaticity.MONOCHROME);
MediaSize isoA5Size = MediaSize.getMediaSizeForName(MediaSizeName.ISO_A5);
float[] size = isoA5Size.getSize(Size2DSyntax.INCH);
Paper paper = new Paper();
paper.setSize(size[0] * 72.0, size[1] * 72.0);
paper.setImageableArea(0.0, 0.0, size[0] * 72.0, size[1] * 72.0);
PageFormat pf = new PageFormat();
pf.setPaper(paper);
Book pageable = new Book();
pageable.append(new WrongPaperForBookPrintingTest(), pf);
PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(pageable);
if (job.printDialog()) {
try {
job.print(aset);
} catch (PrinterException pe) {
throw new RuntimeException(pe);
}
}
}
public EPSPrinter(Printable printable, String title,
PrintStream stream,
int x, int y, int wid, int hgt) {
this.printable = printable;
this.epsTitle = title;
this.stream = stream;
llx = x;
lly = y;
urx = llx+wid;
ury = lly+hgt;
// construct a PageFormat with zero margins representing the
// exact bounds of the applet. ie construct a theoretical
// paper which happens to exactly match applet panel size.
Paper p = new Paper();
p.setSize((double)wid, (double)hgt);
p.setImageableArea(0.0,0.0, (double)wid, (double)hgt);
pf = new PageFormat();
pf.setPaper(p);
}
private static void doTest() {
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(Chromaticity.MONOCHROME);
MediaSize isoA5Size = MediaSize.getMediaSizeForName(MediaSizeName.ISO_A5);
float[] size = isoA5Size.getSize(Size2DSyntax.INCH);
Paper paper = new Paper();
paper.setSize(size[0] * 72.0, size[1] * 72.0);
paper.setImageableArea(0.0, 0.0, size[0] * 72.0, size[1] * 72.0);
PageFormat pf = new PageFormat();
pf.setPaper(paper);
Book pageable = new Book();
pageable.append(new WrongPaperForBookPrintingTest(), pf);
PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(pageable);
if (job.printDialog()) {
try {
job.print(aset);
} catch (PrinterException pe) {
throw new RuntimeException(pe);
}
}
}
private static void doTest() {
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(Chromaticity.MONOCHROME);
MediaSize isoA5Size = MediaSize.getMediaSizeForName(MediaSizeName.ISO_A5);
float[] size = isoA5Size.getSize(Size2DSyntax.INCH);
Paper paper = new Paper();
paper.setSize(size[0] * 72.0, size[1] * 72.0);
paper.setImageableArea(0.0, 0.0, size[0] * 72.0, size[1] * 72.0);
PageFormat pf = new PageFormat();
pf.setPaper(paper);
Book pageable = new Book();
pageable.append(new WrongPaperForBookPrintingTest(), pf);
PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(pageable);
if (job.printDialog()) {
try {
job.print(aset);
} catch (PrinterException pe) {
throw new RuntimeException(pe);
}
}
}
/**
*
*/
public void actionPerformed(ActionEvent e)
{
if (e.getSource() instanceof mxGraphComponent)
{
mxGraphComponent graphComponent = (mxGraphComponent) e
.getSource();
PrinterJob pj = PrinterJob.getPrinterJob();
if (pj.printDialog())
{
PageFormat pf = graphComponent.getPageFormat();
Paper paper = new Paper();
double margin = 36;
paper.setImageableArea(margin, margin, paper.getWidth()
- margin * 2, paper.getHeight() - margin * 2);
pf.setPaper(paper);
pj.setPrintable(graphComponent, pf);
try
{
pj.print();
}
catch (PrinterException e2)
{
System.out.println(e2);
}
}
}
}
protected PageFormat getPageFormatFromAttributes() {
Pageable pageable = null;
if (attributes == null || attributes.isEmpty() ||
!((pageable = getPageable()) instanceof OpenBook)) {
return null;
}
PageFormat newPf = attributeToPageFormat(
getPrintService(), attributes);
PageFormat oldPf = null;
if ((oldPf = pageable.getPageFormat(0)) != null) {
// If orientation, media, imageable area attributes are not in
// "attributes" set, then use respective values of the existing
// page format "oldPf".
if (attributes.get(OrientationRequested.class) == null) {
newPf.setOrientation(oldPf.getOrientation());
}
Paper newPaper = newPf.getPaper();
Paper oldPaper = oldPf.getPaper();
boolean oldPaperValWasSet = false;
if (attributes.get(MediaSizeName.class) == null) {
newPaper.setSize(oldPaper.getWidth(), oldPaper.getHeight());
oldPaperValWasSet = true;
}
if (attributes.get(MediaPrintableArea.class) == null) {
newPaper.setImageableArea(
oldPaper.getImageableX(), oldPaper.getImageableY(),
oldPaper.getImageableWidth(),
oldPaper.getImageableHeight());
oldPaperValWasSet = true;
}
if (oldPaperValWasSet) {
newPf.setPaper(newPaper);
}
}
return newPf;
}
public void processPhysicalPage( final PageGrid pageGrid, final LogicalPageBox logicalPage, final int row,
final int col, final PhysicalPageKey pageKey ) throws IOException {
final PhysicalPageBox page = pageGrid.getPage( row, col );
final Paper paper = new Paper();
paper.setSize( StrictGeomUtility.toExternalValue( page.getWidth() ), StrictGeomUtility.toExternalValue( page
.getHeight() ) );
paper.setImageableArea( StrictGeomUtility.toExternalValue( page.getImageableX() ), StrictGeomUtility
.toExternalValue( page.getImageableY() ), StrictGeomUtility.toExternalValue( page.getImageableWidth() ),
StrictGeomUtility.toExternalValue( page.getImageableHeight() ) );
drawArea = new StrictBounds( page.getGlobalX(), page.getGlobalY(), page.getWidth(), page.getHeight() );
plainTextPage = new PlainTextPage( paper, driver, encoding );
processPageBox( logicalPage );
plainTextPage.writePage();
}
public void testGetPageFormat() {
PrinterJob pj = PrinterJob.getPrinterJob();
PageFormat expResult = PrintPreferences.getPageFormat(pj);
PrintPreferences.setPageFormat(expResult);
PageFormat result = PrintPreferences.getPageFormat(pj);
assertEquals(expResult.getHeight(), result.getHeight());
assertEquals(expResult.getWidth(), result.getWidth());
assertEquals(expResult.getOrientation(), result.getOrientation());
assertEquals(expResult.getPaper().getHeight(), result.getPaper().getHeight());
assertEquals(expResult.getPaper().getWidth(), result.getPaper().getWidth());
assertEquals(expResult.getPaper().getImageableHeight(), result.getPaper().getImageableHeight());
assertEquals(expResult.getPaper().getImageableWidth(), result.getPaper().getImageableWidth());
assertEquals(expResult.getPaper().getImageableX(), result.getPaper().getImageableX());
assertEquals(expResult.getPaper().getImageableY(), result.getPaper().getImageableY());
double w = expResult.getPaper().getWidth() + 10;
double h = expResult.getPaper().getHeight() + 10;
Paper p = expResult.getPaper();
double ix = p.getImageableX() + 10;
double iy = p.getImageableY() + 10;
double iw = p.getImageableWidth() + 10;
double ih = p.getImageableHeight() + 10;
p.setImageableArea(ix, iy, iw, ih);
p.setSize(w, h);
expResult.setPaper(p);
PrintPreferences.setPageFormat(expResult);
assertEquals(h, PrintPreferences.getPageFormat(pj).getHeight());
assertEquals(w, PrintPreferences.getPageFormat(pj).getWidth());
assertEquals(ix, PrintPreferences.getPageFormat(pj).getPaper().getImageableX());
assertEquals(iy, PrintPreferences.getPageFormat(pj).getPaper().getImageableY());
assertEquals(iw, PrintPreferences.getPageFormat(pj).getPaper().getImageableWidth());
assertEquals(ih, PrintPreferences.getPageFormat(pj).getPaper().getImageableHeight());
expResult.setOrientation(PageFormat.REVERSE_LANDSCAPE);
PrintPreferences.setPageFormat(expResult);
assertEquals(PageFormat.REVERSE_LANDSCAPE, PrintPreferences.getPageFormat(pj).getOrientation());
}
public void printableJob(Printable printable) throws PrintException {
try {
synchronized(this) {
if (job != null) { // shouldn't happen
throw new PrintException("already printing");
} else {
job = new PSPrinterJob();
}
}
job.setPrintService(getPrintService());
job.setCopies(copies);
job.setJobName(jobName);
PageFormat pf = new PageFormat();
if (mediaSize != null) {
Paper p = new Paper();
p.setSize(mediaSize.getX(MediaSize.INCH)*72.0,
mediaSize.getY(MediaSize.INCH)*72.0);
p.setImageableArea(72.0, 72.0, p.getWidth()-144.0,
p.getHeight()-144.0);
pf.setPaper(p);
}
if (orient == OrientationRequested.REVERSE_LANDSCAPE) {
pf.setOrientation(PageFormat.REVERSE_LANDSCAPE);
} else if (orient == OrientationRequested.LANDSCAPE) {
pf.setOrientation(PageFormat.LANDSCAPE);
}
job.setPrintable(printable, pf);
job.print(reqAttrSet);
notifyEvent(PrintJobEvent.DATA_TRANSFER_COMPLETE);
return;
} catch (PrinterException pe) {
notifyEvent(PrintJobEvent.JOB_FAILED);
throw new PrintException(pe);
} finally {
printReturned = true;
notifyEvent(PrintJobEvent.NO_MORE_EVENTS);
}
}
/**
* The passed in PageFormat will be copied and altered to describe
* the default page size and orientation of the PrinterJob's
* current printer.
* Platform subclasses which can access the actual default paper size
* for a printer may override this method.
*/
public PageFormat defaultPage(PageFormat page) {
PageFormat newPage = (PageFormat)page.clone();
newPage.setOrientation(PageFormat.PORTRAIT);
Paper newPaper = new Paper();
double ptsPerInch = 72.0;
double w, h;
Media media = null;
PrintService service = getPrintService();
if (service != null) {
MediaSize size;
media =
(Media)service.getDefaultAttributeValue(Media.class);
if (media instanceof MediaSizeName &&
((size = MediaSize.getMediaSizeForName((MediaSizeName)media)) !=
null)) {
w = size.getX(MediaSize.INCH) * ptsPerInch;
h = size.getY(MediaSize.INCH) * ptsPerInch;
newPaper.setSize(w, h);
newPaper.setImageableArea(ptsPerInch, ptsPerInch,
w - 2.0*ptsPerInch,
h - 2.0*ptsPerInch);
newPage.setPaper(newPaper);
return newPage;
}
}
/* Default to A4 paper outside North America.
*/
String defaultCountry = Locale.getDefault().getCountry();
if (!Locale.getDefault().equals(Locale.ENGLISH) && // ie "C"
defaultCountry != null &&
!defaultCountry.equals(Locale.US.getCountry()) &&
!defaultCountry.equals(Locale.CANADA.getCountry())) {
double mmPerInch = 25.4;
w = Math.rint((210.0*ptsPerInch)/mmPerInch);
h = Math.rint((297.0*ptsPerInch)/mmPerInch);
newPaper.setSize(w, h);
newPaper.setImageableArea(ptsPerInch, ptsPerInch,
w - 2.0*ptsPerInch,
h - 2.0*ptsPerInch);
}
newPage.setPaper(newPaper);
return newPage;
}
public boolean printDialog() {
boolean proceedWithPrint = false;
printerJob = PrinterJob.getPrinterJob();
if (printerJob == null) {
return false;
}
DialogType d = this.jobAttributes.getDialog();
PrintService pServ = printerJob.getPrintService();
if ((pServ == null) && (d == DialogType.NONE)){
return false;
}
copyAttributes(pServ);
DefaultSelectionType select =
this.jobAttributes.getDefaultSelection();
if (select == DefaultSelectionType.RANGE) {
attributes.add(SunPageSelection.RANGE);
} else if (select == DefaultSelectionType.SELECTION) {
attributes.add(SunPageSelection.SELECTION);
} else {
attributes.add(SunPageSelection.ALL);
}
if (frame != null) {
attributes.add(new DialogOwner(frame));
}
if ( d == DialogType.NONE) {
proceedWithPrint = true;
} else {
if (d == DialogType.NATIVE) {
attributes.add(DialogTypeSelection.NATIVE);
} else { // (d == DialogType.COMMON)
attributes.add(DialogTypeSelection.COMMON);
}
if (proceedWithPrint = printerJob.printDialog(attributes)) {
if (pServ == null) {
// Windows gives an option to install a service
// when it detects there are no printers so
// we make sure we get the updated print service.
pServ = printerJob.getPrintService();
if (pServ == null) {
return false;
}
}
updateAttributes();
translateOutputProps();
}
}
if (proceedWithPrint) {
JobName jname = (JobName)attributes.get(JobName.class);
if (jname != null) {
printerJob.setJobName(jname.toString());
}
pageFormat = new PageFormat();
Media media = (Media)attributes.get(Media.class);
MediaSize mediaSize = null;
if (media != null && media instanceof MediaSizeName) {
mediaSize = MediaSize.getMediaSizeForName((MediaSizeName)media);
}
Paper p = pageFormat.getPaper();
if (mediaSize != null) {
p.setSize(mediaSize.getX(MediaSize.INCH)*72.0,
mediaSize.getY(MediaSize.INCH)*72.0);
}
if (pageAttributes.getOrigin()==OriginType.PRINTABLE) {
// AWT uses 1/4" borders by default
p.setImageableArea(18.0, 18.0,
p.getWidth()-36.0,
p.getHeight()-36.0);
} else {
p.setImageableArea(0.0,0.0,p.getWidth(),p.getHeight());
}
pageFormat.setPaper(p);
OrientationRequested orient =
(OrientationRequested)attributes.get(OrientationRequested.class);
if (orient!= null &&
orient == OrientationRequested.REVERSE_LANDSCAPE) {
pageFormat.setOrientation(PageFormat.REVERSE_LANDSCAPE);
} else if (orient == OrientationRequested.LANDSCAPE) {
pageFormat.setOrientation(PageFormat.LANDSCAPE);
} else {
pageFormat.setOrientation(PageFormat.PORTRAIT);
}
printerJob.setPrintable(this, pageFormat);
}
return proceedWithPrint;
}
/**
* The passed in PageFormat will be copied and altered to describe
* the default page size and orientation of the PrinterJob's
* current printer.
* Platform subclasses which can access the actual default paper size
* for a printer may override this method.
*/
public PageFormat defaultPage(PageFormat page) {
PageFormat newPage = (PageFormat)page.clone();
newPage.setOrientation(PageFormat.PORTRAIT);
Paper newPaper = new Paper();
double ptsPerInch = 72.0;
double w, h;
Media media = null;
PrintService service = getPrintService();
if (service != null) {
MediaSize size;
media =
(Media)service.getDefaultAttributeValue(Media.class);
if (media instanceof MediaSizeName &&
((size = MediaSize.getMediaSizeForName((MediaSizeName)media)) !=
null)) {
w = size.getX(MediaSize.INCH) * ptsPerInch;
h = size.getY(MediaSize.INCH) * ptsPerInch;
newPaper.setSize(w, h);
newPaper.setImageableArea(ptsPerInch, ptsPerInch,
w - 2.0*ptsPerInch,
h - 2.0*ptsPerInch);
newPage.setPaper(newPaper);
return newPage;
}
}
/* Default to A4 paper outside North America.
*/
String defaultCountry = Locale.getDefault().getCountry();
if (!Locale.getDefault().equals(Locale.ENGLISH) && // ie "C"
defaultCountry != null &&
!defaultCountry.equals(Locale.US.getCountry()) &&
!defaultCountry.equals(Locale.CANADA.getCountry())) {
double mmPerInch = 25.4;
w = Math.rint((210.0*ptsPerInch)/mmPerInch);
h = Math.rint((297.0*ptsPerInch)/mmPerInch);
newPaper.setSize(w, h);
newPaper.setImageableArea(ptsPerInch, ptsPerInch,
w - 2.0*ptsPerInch,
h - 2.0*ptsPerInch);
}
newPage.setPaper(newPaper);
return newPage;
}
/**
* updates a Paper object to reflect the current printer's selected
* paper size and imageable area for that paper size.
* Default implementation copies settings from the original, applies
* applies some validity checks, changes them only if they are
* clearly unreasonable, then sets them into the new Paper.
* Subclasses are expected to override this method to make more
* informed decisons.
*/
protected void validatePaper(Paper origPaper, Paper newPaper) {
if (origPaper == null || newPaper == null) {
return;
} else {
double wid = origPaper.getWidth();
double hgt = origPaper.getHeight();
double ix = origPaper.getImageableX();
double iy = origPaper.getImageableY();
double iw = origPaper.getImageableWidth();
double ih = origPaper.getImageableHeight();
/* Assume any +ve values are legal. Overall paper dimensions
* take precedence. Make sure imageable area fits on the paper.
*/
Paper defaultPaper = new Paper();
wid = ((wid > 0.0) ? wid : defaultPaper.getWidth());
hgt = ((hgt > 0.0) ? hgt : defaultPaper.getHeight());
ix = ((ix > 0.0) ? ix : defaultPaper.getImageableX());
iy = ((iy > 0.0) ? iy : defaultPaper.getImageableY());
iw = ((iw > 0.0) ? iw : defaultPaper.getImageableWidth());
ih = ((ih > 0.0) ? ih : defaultPaper.getImageableHeight());
/* full width/height is not likely to be imageable, but since we
* don't know the limits we have to allow it
*/
if (iw > wid) {
iw = wid;
}
if (ih > hgt) {
ih = hgt;
}
if ((ix + iw) > wid) {
ix = wid - iw;
}
if ((iy + ih) > hgt) {
iy = hgt - ih;
}
newPaper.setSize(wid, hgt);
newPaper.setImageableArea(ix, iy, iw, ih);
}
}
public boolean printDialog() {
boolean proceedWithPrint = false;
printerJob = PrinterJob.getPrinterJob();
if (printerJob == null) {
return false;
}
DialogType d = this.jobAttributes.getDialog();
PrintService pServ = printerJob.getPrintService();
if ((pServ == null) && (d == DialogType.NONE)){
return false;
}
copyAttributes(pServ);
DefaultSelectionType select =
this.jobAttributes.getDefaultSelection();
if (select == DefaultSelectionType.RANGE) {
attributes.add(SunPageSelection.RANGE);
} else if (select == DefaultSelectionType.SELECTION) {
attributes.add(SunPageSelection.SELECTION);
} else {
attributes.add(SunPageSelection.ALL);
}
if (frame != null) {
attributes.add(new DialogOwner(frame));
}
if ( d == DialogType.NONE) {
proceedWithPrint = true;
} else {
if (d == DialogType.NATIVE) {
attributes.add(DialogTypeSelection.NATIVE);
} else { // (d == DialogType.COMMON)
attributes.add(DialogTypeSelection.COMMON);
}
if (proceedWithPrint = printerJob.printDialog(attributes)) {
if (pServ == null) {
// Windows gives an option to install a service
// when it detects there are no printers so
// we make sure we get the updated print service.
pServ = printerJob.getPrintService();
if (pServ == null) {
return false;
}
}
updateAttributes();
translateOutputProps();
}
}
if (proceedWithPrint) {
JobName jname = (JobName)attributes.get(JobName.class);
if (jname != null) {
printerJob.setJobName(jname.toString());
}
pageFormat = new PageFormat();
Media media = (Media)attributes.get(Media.class);
MediaSize mediaSize = null;
if (media != null && media instanceof MediaSizeName) {
mediaSize = MediaSize.getMediaSizeForName((MediaSizeName)media);
}
Paper p = pageFormat.getPaper();
if (mediaSize != null) {
p.setSize(mediaSize.getX(MediaSize.INCH)*72.0,
mediaSize.getY(MediaSize.INCH)*72.0);
}
if (pageAttributes.getOrigin()==OriginType.PRINTABLE) {
// AWT uses 1/4" borders by default
p.setImageableArea(18.0, 18.0,
p.getWidth()-36.0,
p.getHeight()-36.0);
} else {
p.setImageableArea(0.0,0.0,p.getWidth(),p.getHeight());
}
pageFormat.setPaper(p);
OrientationRequested orient =
(OrientationRequested)attributes.get(OrientationRequested.class);
if (orient!= null &&
orient == OrientationRequested.REVERSE_LANDSCAPE) {
pageFormat.setOrientation(PageFormat.REVERSE_LANDSCAPE);
} else if (orient == OrientationRequested.LANDSCAPE) {
pageFormat.setOrientation(PageFormat.LANDSCAPE);
} else {
pageFormat.setOrientation(PageFormat.PORTRAIT);
}
printerJob.setPrintable(this, pageFormat);
}
return proceedWithPrint;
}
/**
*
*/
public boolean printPages(
int firstPageIndex,
int lastPageIndex,
PrintService service
) throws JRException
{
boolean isOK = true;
if (
firstPageIndex < 0 ||
firstPageIndex > lastPageIndex ||
lastPageIndex >= jasperPrint.getPages().size()
)
{
throw
new JRException(
EXCEPTION_MESSAGE_KEY_INVALID_PAGE_RANGE,
new Object[]{firstPageIndex, lastPageIndex, jasperPrint.getPages().size()}
);
}
pageOffset = firstPageIndex;
PrinterJob printJob = PrinterJob.getPrinterJob();
// fix for bug ID 6255588 from Sun bug database
initPrinterJobFields(printJob);
PageFormat pageFormat = printJob.defaultPage();
Paper paper = pageFormat.getPaper();
printJob.setJobName("JasperReports - " + jasperPrint.getName());
switch (jasperPrint.getOrientationValue())
{
case LANDSCAPE :
{
pageFormat.setOrientation(PageFormat.LANDSCAPE);
paper.setSize(jasperPrint.getPageHeight(), jasperPrint.getPageWidth());
paper.setImageableArea(
0,
0,
jasperPrint.getPageHeight(),
jasperPrint.getPageWidth()
);
break;
}
case
PORTRAIT :
default :
{
pageFormat.setOrientation(PageFormat.PORTRAIT);
paper.setSize(jasperPrint.getPageWidth(), jasperPrint.getPageHeight());
paper.setImageableArea(
0,
0,
jasperPrint.getPageWidth(),
jasperPrint.getPageHeight()
);
}
}
pageFormat.setPaper(paper);
Book book = new Book();
book.append(this, pageFormat, lastPageIndex - firstPageIndex + 1);
printJob.setPageable(book);
try
{
if (service == null) {
if (printJob.printDialog()) {
printJob.print();
} else {
isOK = false;
}
} else {
printJob.setPrintService(service);
printJob.print();
}
}
catch (Exception ex)
{
throw
new JRException(
EXCEPTION_MESSAGE_KEY_ERROR_PRINTING_REPORT,
null,
ex);
}
return isOK;
}
/**
* updates a Paper object to reflect the current printer's selected
* paper size and imageable area for that paper size.
* Default implementation copies settings from the original, applies
* applies some validity checks, changes them only if they are
* clearly unreasonable, then sets them into the new Paper.
* Subclasses are expected to override this method to make more
* informed decisons.
*/
protected void validatePaper(Paper origPaper, Paper newPaper) {
if (origPaper == null || newPaper == null) {
return;
} else {
double wid = origPaper.getWidth();
double hgt = origPaper.getHeight();
double ix = origPaper.getImageableX();
double iy = origPaper.getImageableY();
double iw = origPaper.getImageableWidth();
double ih = origPaper.getImageableHeight();
/* Assume any +ve values are legal. Overall paper dimensions
* take precedence. Make sure imageable area fits on the paper.
*/
Paper defaultPaper = new Paper();
wid = ((wid > 0.0) ? wid : defaultPaper.getWidth());
hgt = ((hgt > 0.0) ? hgt : defaultPaper.getHeight());
ix = ((ix > 0.0) ? ix : defaultPaper.getImageableX());
iy = ((iy > 0.0) ? iy : defaultPaper.getImageableY());
iw = ((iw > 0.0) ? iw : defaultPaper.getImageableWidth());
ih = ((ih > 0.0) ? ih : defaultPaper.getImageableHeight());
/* full width/height is not likely to be imageable, but since we
* don't know the limits we have to allow it
*/
if (iw > wid) {
iw = wid;
}
if (ih > hgt) {
ih = hgt;
}
if ((ix + iw) > wid) {
ix = wid - iw;
}
if ((iy + ih) > hgt) {
iy = hgt - ih;
}
newPaper.setSize(wid, hgt);
newPaper.setImageableArea(ix, iy, iw, ih);
}
}
public boolean printDialog() {
boolean proceedWithPrint = false;
printerJob = PrinterJob.getPrinterJob();
if (printerJob == null) {
return false;
}
DialogType d = this.jobAttributes.getDialog();
PrintService pServ = printerJob.getPrintService();
if ((pServ == null) && (d == DialogType.NONE)){
return false;
}
copyAttributes(pServ);
DefaultSelectionType select =
this.jobAttributes.getDefaultSelection();
if (select == DefaultSelectionType.RANGE) {
attributes.add(SunPageSelection.RANGE);
} else if (select == DefaultSelectionType.SELECTION) {
attributes.add(SunPageSelection.SELECTION);
} else {
attributes.add(SunPageSelection.ALL);
}
if (frame != null) {
attributes.add(new DialogOwner(frame));
}
if ( d == DialogType.NONE) {
proceedWithPrint = true;
} else {
if (d == DialogType.NATIVE) {
attributes.add(DialogTypeSelection.NATIVE);
} else { // (d == DialogType.COMMON)
attributes.add(DialogTypeSelection.COMMON);
}
if (proceedWithPrint = printerJob.printDialog(attributes)) {
if (pServ == null) {
// Windows gives an option to install a service
// when it detects there are no printers so
// we make sure we get the updated print service.
pServ = printerJob.getPrintService();
if (pServ == null) {
return false;
}
}
updateAttributes();
translateOutputProps();
}
}
if (proceedWithPrint) {
JobName jname = (JobName)attributes.get(JobName.class);
if (jname != null) {
printerJob.setJobName(jname.toString());
}
pageFormat = new PageFormat();
Media media = (Media)attributes.get(Media.class);
MediaSize mediaSize = null;
if (media != null && media instanceof MediaSizeName) {
mediaSize = MediaSize.getMediaSizeForName((MediaSizeName)media);
}
Paper p = pageFormat.getPaper();
if (mediaSize != null) {
p.setSize(mediaSize.getX(MediaSize.INCH)*72.0,
mediaSize.getY(MediaSize.INCH)*72.0);
}
if (pageAttributes.getOrigin()==OriginType.PRINTABLE) {
// AWT uses 1/4" borders by default
p.setImageableArea(18.0, 18.0,
p.getWidth()-36.0,
p.getHeight()-36.0);
} else {
p.setImageableArea(0.0,0.0,p.getWidth(),p.getHeight());
}
pageFormat.setPaper(p);
OrientationRequested orient =
(OrientationRequested)attributes.get(OrientationRequested.class);
if (orient!= null &&
orient == OrientationRequested.REVERSE_LANDSCAPE) {
pageFormat.setOrientation(PageFormat.REVERSE_LANDSCAPE);
} else if (orient == OrientationRequested.LANDSCAPE) {
pageFormat.setOrientation(PageFormat.LANDSCAPE);
} else {
pageFormat.setOrientation(PageFormat.PORTRAIT);
}
printerJob.setPrintable(this, pageFormat);
}
return proceedWithPrint;
}
/**
* updates a Paper object to reflect the current printer's selected
* paper size and imageable area for that paper size.
* Default implementation copies settings from the original, applies
* applies some validity checks, changes them only if they are
* clearly unreasonable, then sets them into the new Paper.
* Subclasses are expected to override this method to make more
* informed decisons.
*/
protected void validatePaper(Paper origPaper, Paper newPaper) {
if (origPaper == null || newPaper == null) {
return;
} else {
double wid = origPaper.getWidth();
double hgt = origPaper.getHeight();
double ix = origPaper.getImageableX();
double iy = origPaper.getImageableY();
double iw = origPaper.getImageableWidth();
double ih = origPaper.getImageableHeight();
/* Assume any +ve values are legal. Overall paper dimensions
* take precedence. Make sure imageable area fits on the paper.
*/
Paper defaultPaper = new Paper();
wid = ((wid > 0.0) ? wid : defaultPaper.getWidth());
hgt = ((hgt > 0.0) ? hgt : defaultPaper.getHeight());
ix = ((ix > 0.0) ? ix : defaultPaper.getImageableX());
iy = ((iy > 0.0) ? iy : defaultPaper.getImageableY());
iw = ((iw > 0.0) ? iw : defaultPaper.getImageableWidth());
ih = ((ih > 0.0) ? ih : defaultPaper.getImageableHeight());
/* full width/height is not likely to be imageable, but since we
* don't know the limits we have to allow it
*/
if (iw > wid) {
iw = wid;
}
if (ih > hgt) {
ih = hgt;
}
if ((ix + iw) > wid) {
ix = wid - iw;
}
if ((iy + ih) > hgt) {
iy = hgt - ih;
}
newPaper.setSize(wid, hgt);
newPaper.setImageableArea(ix, iy, iw, ih);
}
}
public boolean printDialog() {
boolean proceedWithPrint = false;
printerJob = PrinterJob.getPrinterJob();
if (printerJob == null) {
return false;
}
DialogType d = this.jobAttributes.getDialog();
PrintService pServ = printerJob.getPrintService();
if ((pServ == null) && (d == DialogType.NONE)){
return false;
}
copyAttributes(pServ);
DefaultSelectionType select =
this.jobAttributes.getDefaultSelection();
if (select == DefaultSelectionType.RANGE) {
attributes.add(SunPageSelection.RANGE);
} else if (select == DefaultSelectionType.SELECTION) {
attributes.add(SunPageSelection.SELECTION);
} else {
attributes.add(SunPageSelection.ALL);
}
if (frame != null) {
attributes.add(new DialogOwner(frame));
}
if ( d == DialogType.NONE) {
proceedWithPrint = true;
} else {
if (d == DialogType.NATIVE) {
attributes.add(DialogTypeSelection.NATIVE);
} else { // (d == DialogType.COMMON)
attributes.add(DialogTypeSelection.COMMON);
}
if (proceedWithPrint = printerJob.printDialog(attributes)) {
if (pServ == null) {
// Windows gives an option to install a service
// when it detects there are no printers so
// we make sure we get the updated print service.
pServ = printerJob.getPrintService();
if (pServ == null) {
return false;
}
}
updateAttributes();
translateOutputProps();
}
}
if (proceedWithPrint) {
JobName jname = (JobName)attributes.get(JobName.class);
if (jname != null) {
printerJob.setJobName(jname.toString());
}
pageFormat = new PageFormat();
Media media = (Media)attributes.get(Media.class);
MediaSize mediaSize = null;
if (media != null && media instanceof MediaSizeName) {
mediaSize = MediaSize.getMediaSizeForName((MediaSizeName)media);
}
Paper p = pageFormat.getPaper();
if (mediaSize != null) {
p.setSize(mediaSize.getX(MediaSize.INCH)*72.0,
mediaSize.getY(MediaSize.INCH)*72.0);
}
if (pageAttributes.getOrigin()==OriginType.PRINTABLE) {
// AWT uses 1/4" borders by default
p.setImageableArea(18.0, 18.0,
p.getWidth()-36.0,
p.getHeight()-36.0);
} else {
p.setImageableArea(0.0,0.0,p.getWidth(),p.getHeight());
}
pageFormat.setPaper(p);
OrientationRequested orient =
(OrientationRequested)attributes.get(OrientationRequested.class);
if (orient!= null &&
orient == OrientationRequested.REVERSE_LANDSCAPE) {
pageFormat.setOrientation(PageFormat.REVERSE_LANDSCAPE);
} else if (orient == OrientationRequested.LANDSCAPE) {
pageFormat.setOrientation(PageFormat.LANDSCAPE);
} else {
pageFormat.setOrientation(PageFormat.PORTRAIT);
}
printerJob.setPrintable(this, pageFormat);
}
return proceedWithPrint;
}
public void sendToDefaultPrinter() {
// configure the printing job & simple single-page document
PrinterJob printJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = printJob.defaultPage();
Paper paper = pageFormat.getPaper();
float inchWidth = 16;
float inchHeight = 20;
float marginWidth = 100;
float marginHeight = 100;
int pWidth = (int) ((inchWidth * 25.4f) * 2.835f);// quick: convert inch to mm, mm to pt
int pHeight = (int) ((inchHeight * 25.4f) * 2.835f);
paper.setSize(pWidth, pHeight);
paper.setImageableArea(marginWidth, marginHeight, pWidth, pHeight);
pageFormat.setPaper(paper);
//not sure this exactly works, we should probably just scale the square to fit and we send it the correct rotation orientation
//pageFormat.setOrientation(PageFormat.LANDSCAPE);
// we might also be able to set attributes here
Printable page = new ImagePage();
Book book = new Book();
book.append(page, pageFormat);
/*
Early testing at "LikeMinded Productions":
PageFormat documentPageFormat = new PageFormat();
// new settings to play with
Paper pape = new Paper();
pape.setSize(10000, 6000);
pape.setImageableArea(0, 0, 10000, 6000);
documentPageFormat.setPaper(pape);
documentPageFormat.setOrientation(PageFormat.LANDSCAPE);
*/
printJob.setPageable(book);
// use the print dialog UI or just print it!
if(useDialog) {
if (printJob.printDialog()) printPage(printJob);
} else {
printPage(printJob);
}
}