有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用PDFRenderer 0.9.1库在java中打印pdf文件

我正在尝试使用这个使用PDFRenderer库的java代码打印80mm宽的收据,并在Epson TM-T20打印机中打印。我用WindowsXPS打印预览对它进行了测试,结果显示没问题,但当我用物理epson打印机打印时,打印机太小了,几乎是显微镜下的

public static void printPdf2(String filename) throws IOException, PrinterException{

    // Create a PDFFile from a File reference
    File f = new File(filename);
    FileInputStream fis = new FileInputStream(f);
    FileChannel fc = fis.getChannel();
    ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
    PDFFile pdfFile = new PDFFile(bb); // Create PDF Print Page
    PDFPrintPage pages = new PDFPrintPage(pdfFile);

    fis.close();

    // Create Print Job
    PrinterJob pjob = PrinterJob.getPrinterJob();
    PageFormat pf = PrinterJob.getPrinterJob().defaultPage();
    pjob.setJobName(f.getName());
    Book book = new Book();
    book.append(pages, pf, pdfFile.getNumPages());
    pjob.setPageable(book);
    PrintRequestAttributeSet attr_set = new HashPrintRequestAttributeSet();
    attr_set.add(MediaSizeName.ISO_A6);

    // Send print job to default printer
    pjob.print(attr_set);


}

发送到这个方法的pdf文件是预先格式化的,在printRequestAttributeSet中,它还提到以A6格式打印。我不知道是什么导致它在显微镜下打印


共 (1) 个答案

  1. # 1 楼答案

    好吧,我找到了一个更好的方法来完成这项任务。代码如下:

    //this is where the method gets called with these params
    JPrintFile.printPdf3(FILE,"PDF Print Job");
    

    打印pdf文件的方法

    public static void printPdf3 (String filePath, String jobName) throws IOException, PrinterException {
    
        FileInputStream fileInputStream = new FileInputStream(filePath);
        byte[] pdfContent = new byte[fileInputStream.available()];
        fileInputStream.read(pdfContent, 0, fileInputStream.available());
        ByteBuffer buffer = ByteBuffer.wrap(pdfContent);
    
        final PDFFile pdfFile = new PDFFile(buffer);
        PDFPrintPage pages = new PDFPrintPage(pdfFile);
        PrinterJob printJob = PrinterJob.getPrinterJob();
        PageFormat pageFormat = PrinterJob.getPrinterJob().defaultPage();
        printJob.setJobName(jobName);
        Book book = new Book();
    
        book.append(pages, pageFormat, pdfFile.getNumPages());
        printJob.setPageable(book);
        Paper paper = new Paper();
    
        //paper has a default size, but i changed the size and ImageableArea
        //for my specific needs
        paper.setSize(400, 600);
        paper.setImageableArea(0, 0, paper.getWidth()-20, paper.getHeight()-20);
        System.out.println(paper.getHeight());
        System.out.println(paper.getWidth());
        pageFormat.setPaper(paper);
    
        //using default printService here
        PrintService p=PrintServiceLookup.lookupDefaultPrintService();
        printJob.setPrintService(p);
    
        PrintRequestAttributeSet attr_set = new HashPrintRequestAttributeSet();
        attr_set.add(MediaSizeName.ISO_A6);
    
        printJob.print(attr_set);
        fileInputStream.close();
    }
    

    要实现这一点,您需要PDFRenderer 0.9.1。只需下载。jar并将其添加到项目的构建路径中