用Java打印二维码
如果你能帮我解决这个小问题,我将不胜感激 问题是,当我打印包含二维码的pdf时,二维码不会显示在打印的文档中,它只显示一个空白。 请,我希望你能帮我…这是我使用的代码:用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
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();
}