用Java打印二维码

用Java打印二维码,java,pdf,printing,qr-code,Java,Pdf,Printing,Qr Code,如果你能帮我解决这个小问题,我将不胜感激 问题是,当我打印包含二维码的pdf时,二维码不会显示在打印的文档中,它只显示一个空白。 请,我希望你能帮我…这是我使用的代码: package utilities; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.print.Book; import java.awt.print.PageFormat; im

如果你能帮我解决这个小问题,我将不胜感激

问题是,当我打印包含二维码的pdf时,二维码不会显示在打印的文档中,它只显示一个空白。 请,我希望你能帮我…这是我使用的代码:

package utilities;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;

import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;
import com.sun.pdfview.PDFRenderer;
import static java.awt.print.Printable.NO_SUCH_PAGE;
import static java.awt.print.Printable.PAGE_EXISTS;

/**
 * Converts the PDF content into printable format
 */
public class PrintPdf2 {

    private PrinterJob pjob = null;

    public static void main(String[] args) throws IOException, PrinterException {       
                String ruta="C:\\examplePDF.pdf";
        System.out.println("Printing: " + ruta);
        // Create a PDFFile from a File reference
        FileInputStream fis = new FileInputStream(ruta);
        PrintPdf2 printPDFFile = new PrintPdf2(fis, "Test Print PDF");
        printPDFFile.print();
    }

    public PrintPdf2(InputStream inputStream, String jobName) throws IOException, PrinterException {
        byte[] pdfContent = new byte[inputStream.available()];
        inputStream.read(pdfContent, 0, inputStream.available());
        initialize(pdfContent, jobName);
    }

    public PrintPdf2(byte[] content, String jobName) throws IOException, PrinterException {
        initialize(content, jobName);
    }

    private void initialize(byte[] pdfContent, String jobName) throws IOException, PrinterException {
        ByteBuffer bb = ByteBuffer.wrap(pdfContent);
        // Create PDF Print Page
        PDFFile pdfFile = new PDFFile(bb);
        PDFPrintPage pages = new PDFPrintPage(pdfFile);

        // Create Print Job
        pjob = PrinterJob.getPrinterJob();
        PageFormat pf = PrinterJob.getPrinterJob().defaultPage();
        pjob.setJobName(jobName);
        Book book = new Book();
        book.append(pages, pf, pdfFile.getNumPages());
        pjob.setPageable(book);

        // to remove margins
        Paper paper = new Paper();
        paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());
        pf.setPaper(paper);
    }

    public void print() throws PrinterException {
        // Send print job to default printer
        pjob.print();
    }
}

/**
 * Class that actually converts the PDF file into Printable format
 */
class PDFPrintPage implements Printable {

    private PDFFile file;

    PDFPrintPage(PDFFile file) {
        this.file = file;
    }

    public int print(Graphics g, PageFormat format, int index) throws PrinterException {
        int pagenum = index + 1;
        if ((pagenum >= 1) && (pagenum <= file.getNumPages())) {
            Graphics2D g2 = (Graphics2D) g;
            PDFPage page = file.getPage(pagenum);

            // fit the PDFPage into the printing area
            Rectangle imageArea = new Rectangle((int) format.getImageableX(), (int) format.getImageableY(),
                    (int) format.getImageableWidth(), (int) format.getImageableHeight());
            g2.translate(0, 0);
            PDFRenderer pgs = new PDFRenderer(page, g2, imageArea, null, null);
            try {
                page.waitForFinish();
                pgs.run();
            } catch (InterruptedException ie) {
                // nothing to do
            }
            return PAGE_EXISTS;
        } else {
            return NO_SUCH_PAGE;
        }
    }
}
包实用程序;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Rectangle;
导入java.awt.print.Book;
导入java.awt.print.PageFormat;
导入java.awt.print.Paper;
导入java.awt.print.Printable;
导入java.awt.print.PrinterException;
导入java.awt.print.PrinterJob;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.nio.ByteBuffer;
导入com.sun.pdfview.PDFFile;
导入com.sun.pdfview.PDFPage;
导入com.sun.pdfview.PDFRenderer;
导入静态java.awt.print.Printable.NO_这样的页面;
导入静态java.awt.print.Printable.PAGE_存在;
/**
*将PDF内容转换为可打印格式
*/
公共类PrintPdf2{
private PrinterJob pjob=null;
公共静态void main(字符串[]args)引发IOException,PrinterException{
String ruta=“C:\\examplePDF.pdf”;
System.out.println(“打印:+ruta”);
//从文件引用创建PDFFile
FileInputStream fis=新的FileInputStream(ruta);
PrintPdf2 printpdfile=新的PrintPdf2(fis,“测试打印PDF”);
printpdfile.print();
}
公共PrintPdf2(InputStream InputStream,字符串jobName)引发IOException、PrinterException{
byte[]pdfContent=新字节[inputStream.available()];
读取(pdfContent,0,inputStream.available());
初始化(pdfContent,jobName);
}
公共PrintPdf2(字节[]内容,字符串jobName)引发IOException,PrinterException{
初始化(内容、作业名称);
}
私有void initialize(字节[]pdfContent,字符串jobName)引发IOException、PrinterException{
ByteBuffer bb=ByteBuffer.wrap(pdfContent);
//创建PDF打印页面
Pdfile Pdfile=新的Pdfile(bb);
PDFPrintPage pages=新的PDFPrintPage(pdfFile);
//创建打印作业
pjob=PrinterJob.getPrinterJob();
PageFormat pf=PrinterJob.getPrinterJob().defaultPage();
pjob.setJobName(jobName);
书=新书();
book.append(pages、pf、pdfFile.getNumPages());
pjob.setPageable(book);
//删除页边距
纸张=新纸张();
paper.setImageableArea(0,0,paper.getWidth(),paper.getHeight());
设定纸(纸);
}
public void print()引发PrinterException{
//将打印作业发送到默认打印机
pjob.print();
}
}
/**
*类,该类实际将PDF文件转换为可打印格式
*/
类PDFPrintPage实现可打印{
私有PDFFile文件;
PDFPrintPage(PDFFile文件){
this.file=文件;
}
公共整型打印(图形g、页面格式、整型索引)引发PrinterException{
int pagenum=索引+1;

如果((pagenum>=1)&&(pagenum我已经解决了这个问题,我使用了apache的pdfbox,下面是我使用的代码:

import java.awt.print.PrinterJob;
import javax.print.PrintService;
import org.apache.log4j.Logger;
import org.apache.pdfbox.pdmodel.PDDocument;

public class PrintPdf {
private static Logger log = Logger.getLogger(PrintPdf.class);

    public void print(String printer, String pdfRoute) {
        log.info("Printing document: "+pdfRoute);
        try{
         PDDocument document = null;
                document = PDDocument.load( pdfRoute );
                PrinterJob printJob = PrinterJob.getPrinterJob();   
                    PrintService[] printService = PrinterJob.lookupPrintServices();
                     boolean printerFound = false;
                     for(int i = 0; !printerFound && i < printService.length; i++)
                     {
                         if(printService[i].getName().indexOf(printer) != -1)
                         {
                             printJob.setPrintService(printService[i]);
                             printerFound = true;
                             break;
                         }
                     }
                     if(printerFound)
                        document.silentPrint( printJob );
                     else
                        log.info("The printer: "+printer + "was NOT found");
        }catch(Exception e){
            e.printStackTrace();
            log.error("Error when printing pdf",e);
        }

    }




}
导入java.awt.print.PrinterJob;
导入javax.print.PrintService;
导入org.apache.log4j.Logger;
导入org.apache.pdfbox.pdmodel.PDDocument;
公共类打印PDF{
私有静态记录器log=Logger.getLogger(PrintPdf.class);
公共作废打印(字符串打印机、字符串pdfRoute){
日志信息(“打印文档:+pdfRoute”);
试一试{
PDDocument文件=null;
document=PDDocument.load(pdfRoute);
PrinterJob printJob=PrinterJob.getPrinterJob();
PrintService[]PrintService=PrinterJob.lookupPrintServices();
布尔printerFound=false;
对于(int i=0;!printerFound&&i

以防有人需要它。

使用“itextpdf”库也非常简单:

private void print()引发DocumentException,IOException{
com.itextpdf.text.Document pdfDocument=新的com.itextpdf.text.Document(PageSize.A4);
java.io.File pdfFile=新的java.io.File(“d:/qrCode.pdf”);
com.itextpdf.text.pdf.PdfWriter.getInstance(pdfDocument,新的java.io.FileOutputStream(pdfFile));
pdfDocument.open();
com.itextpdf.text.pdf.PdfPTable qrCodeTable=new com.itextpdf.text.pdf.PdfPTable(new float[]{1.0f});
java.util.Map hints=new java.util.HashMap();
put(com.itextpdf.text.pdf.qrcode.EncodeHintType.CHARACTER_SET,“ISO-8859-1”);
com.itextpdf.text.pdf.BarcodeQRCode qrCode=new com.itextpdf.text.pdf.BarcodeQRCode(“测试代码”,200200,提示);
com.itextpdf.text.Image qrCodeImage=qrCode.getImage();
qrCodeTable.addCell(qrCodeImage);
pdfDocument.add(qrCodeTable);
pdfDocument.close();
}

不要用答案编辑您的问题。只需创建一个答案并检查其是否有效。好的。对此我很抱歉。谢谢。您可以编辑您的问题和答案,而不仅仅是道歉;)答案在这里……谢谢:)很好,你可以标记你自己的答案为正确,勾选复选符号;)是的,使用itextpdf你可以很容易地生成二维码,但这篇文章谈到了打印二维码
private void print() throws DocumentException, IOException {
    com.itextpdf.text.Document pdfDocument = new com.itextpdf.text.Document(PageSize.A4);
    java.io.File pdfFile = new java.io.File("d:/qrCode.pdf");
    com.itextpdf.text.pdf.PdfWriter.getInstance(pdfDocument, new java.io.FileOutputStream(pdfFile));
    pdfDocument.open();

    com.itextpdf.text.pdf.PdfPTable qrCodeTable = new com.itextpdf.text.pdf.PdfPTable(new float[] { 1.0f });

    java.util.Map<com.itextpdf.text.pdf.qrcode.EncodeHintType, Object> hints = new java.util.HashMap<com.itextpdf.text.pdf.qrcode.EncodeHintType, Object>();
    hints.put(com.itextpdf.text.pdf.qrcode.EncodeHintType.CHARACTER_SET, "ISO-8859-1");
    com.itextpdf.text.pdf.BarcodeQRCode qrCode = new com.itextpdf.text.pdf.BarcodeQRCode("TEST CODE", 200, 200, hints);
    com.itextpdf.text.Image qrCodeImage = qrCode.getImage();

    qrCodeTable.addCell(qrCodeImage);
    pdfDocument.add(qrCodeTable);

    pdfDocument.close();
}