打印颜色Java

打印颜色Java,java,pdf,printing,pdfbox,Java,Pdf,Printing,Pdfbox,如何使用特定的Printerservice配置AWT Printerjob以彩色打印 我的目标是打印一个包含灰色背景色的PDF文件。 为此,我将带有pdfbox的PDF转换为缓冲图像,并将自己的可打印类设置为printerjob,以覆盖print方法 现在,即使我在print方法中绘制一个红色的rect,它也会被忽略。打印一个黑色矩形 将我的PDF BuffereImage保存到png文件时,所有内容看起来都有效且良好 import java.awt.Color; import java.awt

如何使用特定的Printerservice配置AWT Printerjob以彩色打印

我的目标是打印一个包含灰色背景色的PDF文件。 为此,我将带有pdfbox的PDF转换为缓冲图像,并将自己的可打印类设置为printerjob,以覆盖print方法

现在,即使我在print方法中绘制一个红色的rect,它也会被忽略。打印一个黑色矩形

将我的PDF BuffereImage保存到png文件时,所有内容看起来都有效且良好

import java.awt.Color;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;

import java.awt.print.PrinterJob;


import javax.imageio.ImageIO;
import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Chromaticity;
import javax.print.attribute.standard.Copies;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;



public class Printingissue {
    public static void main(String[] args) throws PrinterException, IOException {
        File file = new File("resources/tmp/1380731960.pdf");

        PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
        pras.add(new Copies(1));
        pras.add(Chromaticity.COLOR);

        PrintService pss[] = PrintServiceLookup.lookupPrintServices(null, pras);

        PrintService service = pss[0];


        PrinterJob printJob = PrinterJob.getPrinterJob();

        final PDDocument document = PDDocument.load(file);
        printJob.setPageable( document );
        printJob.setCopies(1);

        final PageFormat pf1 = printJob.defaultPage();
        Paper paper = new Paper();
        double margin = 36; // half inch
        paper.setImageableArea(margin, margin, paper.getWidth() - margin * 2, paper.getHeight()
                - margin * 2);
        pf1.setPaper(paper);
        printJob.setPrintService( service );
        final List<PDPage> pdfPages = document.getDocumentCatalog().getAllPages();
        printJob.setPrintable(new Printable()
        {
          @Override
          public int print( Graphics g, PageFormat pf, int page ) throws PrinterException
          {
            if (page >= pdfPages.size())
              return NO_SUCH_PAGE;
            try
            {
                ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_CIEXYZ);

                ColorConvertOp op = new ColorConvertOp(cs, null);
                g.setColor(Color.RED);
                g.drawRect(100, 100, 10, 200);
                pdfPages.get(page).convertToImage();

//                g.drawImage( op.filter( pdfPages.get(page).convertToImage() , null)
//                          ,(int)pf.getImageableX()
//                          ,(int)pf.getImageableY()
//                          ,(int)pf.getImageableWidth()
//                          ,(int)pf.getImageableHeight()
//                          ,null);
            }
            catch (IOException e)
            {

            }
            return PAGE_EXISTS;
          }
        }, pf1);
        printJob.print( pras );
    }
}
导入java.awt.Color;
导入java.awt.color.ColorSpace;
导入java.awt.image.buffereImage;
导入java.awt.image.ColorConvertOp;
导入java.awt.print.PageFormat;
导入java.awt.print.Paper;
导入java.awt.print.Printable;
导入java.awt.print.PrinterJob;
导入javax.imageio.imageio;
导入javax.print.DocFlavor;
导入javax.print.PrintService;
导入javax.print.PrintServiceLookup;
导入javax.print.attribute.HashPrintRequestAttributeSet;
导入javax.print.attribute.PrintRequestAttributeSet;
导入javax.print.attribute.standard.色度;
导入javax.print.attribute.standard.Copies;
导入org.apache.pdfbox.pdmodel.PDDocument;
导入org.apache.pdfbox.pdmodel.PDPage;
公共类打印问题{
公共静态void main(字符串[]args)抛出PrinterException、IOException{
File File=新文件(“resources/tmp/1380731960.pdf”);
PrintRequestAttributeSet pras=新的HashPrintRequestAttributeSet();
审慎监管局增加(新副本(1));
添加(色度、颜色);
PrintService pss[]=PrintServiceLookup.lookupPrintServices(null,pras);
PrintService服务=pss[0];
PrinterJob printJob=PrinterJob.getPrinterJob();
最终PDDocument文件=PDDocument.load(文件);
打印作业。可设置页面(文档);
打印作业。设置副本(1);
final PageFormat pf1=printJob.defaultPage();
纸张=新纸张();
双边距=36;//半英寸
paper.setImageableArea(页边距,页边距,paper.getWidth()-margin*2,paper.getHeight())
-保证金*2);
pf1.设定纸(纸);
printJob.setPrintService(服务);
最终列表pdfPages=document.getDocumentCatalog().getAllPages();
setPrintable(新的Printable()
{
@凌驾
公共整型打印(图形g、页面格式pf、整型页面)引发PrinterException
{
如果(第>=pdfPages.size()页)
不返回此类页面;
尝试
{
ColorSpace cs=ColorSpace.getInstance(ColorSpace.cs_CIEXYZ);
ColorConvertOp=新的ColorConvertOp(cs,null);
g、 setColor(Color.RED);
g、 drawRect(10010010200);
get(page.convertToImage();
//g.drawImage(op.filter(pdfPages.get(page.convertToImage(),null)
//,(int)pf.getImageTablex()
//,(int)pf.getImageTabley()
//,(int)pf.getImageableWidth()
//,(int)pf.getImageableHeight()
//,空);
}
捕获(IOE异常)
{
}
返回页面_存在;
}
},pf1);
printJob.print(pras);
}
}

Mybe我的问题是与ubuntu相关的问题吗?它仍然没有解决:(