Java 调用打印机打印PDF文件
添加依赖
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>3.0.2</version>
</dependency>
编写代码
package cn.zzzykj.demo;
import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;
import sun.print.PageableDoc;
import javax.print.*;
import javax.print.attribute.standard.PrinterIsAcceptingJobs;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
/**
* @author Lenovo
*/
@Slf4j
public class PrintHelper {
public static final String PRINT_NAME = "xxx";
public static final String HTTP_PREFIX = "http";
private static final TimedCache<String, PrintJobState> JOB_STATE_CACHE = CacheUtil.newTimedCache(TimeUnit.HOURS.toMillis(1));
public static int status() {
PrintService service = findPrint();
if (service == null) {
return 6;
}
PrinterIsAcceptingJobs attribute = service.getAttribute(PrinterIsAcceptingJobs.class);
return attribute.getValue() == 1 ? 0 : 7;
}
public static boolean printFile(String path, String fileName) {
PrintService service = findPrint();
try (
PDDocument pdDocument = Loader.loadPDF(getBytes(path));
) {
PDFPageable pageable = new PDFPageable(pdDocument);
int pages = pageable.getNumberOfPages();
PrintJobState jobState = new PrintJobState(pages, 1, path, fileName);
JOB_STATE_CACHE.put(StrUtil.isNotEmpty(fileName) ? fileName : "", jobState);
PageableDoc doc = new PageableDoc(pageable);
DocPrintJob job = service.createPrintJob();
job.print(doc, null);
return true;
} catch (IOException e) {
log.error("Failed to load PDF file...");
return false;
} catch (PrintException e) {
log.error("Abnormal submission of printing task...");
return false;
}
}
public static PrintJobState jobState(String fileName) {
if (fileName == null) {
fileName = "";
}
return JOB_STATE_CACHE.get(fileName);
}
private static PrintService findPrint() {
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
Optional<PrintService> hpPrint = Arrays.stream(services).filter(s -> s.getName().contains(PRINT_NAME)).findFirst();
return hpPrint.orElse(null);
}
private static InputStream getInputStream(String path) throws IOException {
InputStream stream;
if (path.toLowerCase().startsWith(HTTP_PREFIX)) {
URL url = new URL(path);
stream = url.openStream();
} else {
stream = Files.newInputStream(new File(path).toPath());
}
return stream;
}
private static byte[] getBytes(String path) throws IOException {
if (path.toLowerCase().startsWith(HTTP_PREFIX)) {
URL url = new URL(path);
return IoUtil.readBytes(url.openStream());
} else {
return FileUtil.readBytes(path);
}
}
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public static class PrintJobState {
private Integer total;
private Integer curr;
private String name;
private String path;
}
}
评论已关闭