• PDF自动打印


    ​ 最近接到用户提过来的需求,需要一个能够自动打印图纸的功能,经过几天的研究整出来个初版了的,分享出来给大家,希望能有帮助。
    需求描述:

    ​ 生产车间现场每天都有大量的图纸需要打印,一个一个打印太慢了,希望可以有个批量打印的功能。
    分析

    ​ 我们的图纸是存在服务器上,都是pdf版本的,所以批量打印程序可以通过文件名称,然后程序自动将共享文件推送到打印机上打印,这样就可以实现自动化了,并且后续还可以根据情况进行扩展

    代码

    初版的程序比较简单,使用的是springboot + spring shell 来实现,具体代码如下:

    
    
    <parent>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-parentartifactId>
      <version>2.7.14version>
    parent>
    <dependencies>
        <dependency>
          <groupId>org.springframework.bootgroupId>
          <artifactId>spring-boot-starterartifactId>
        dependency>
        <dependency>
          <groupId>org.springframework.bootgroupId>
          <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
      
        <dependency>
          <groupId>org.springframework.shellgroupId>
          <artifactId>spring-shell-starterartifactId>
          <version>2.1.11version>
        dependency>
        <dependency>
          <groupId>org.projectlombokgroupId>
          <artifactId>lombokartifactId>
          <version>1.18.26version>
          <optional>trueoptional>
          <scope>compilescope>
        dependency>
        <dependency>
          <groupId>org.apache.pdfboxgroupId>
          <artifactId>pdfboxartifactId>
          <version>2.0.26version>
        dependency>
          <dependency>
              <groupId>cn.hutoolgroupId>
              <artifactId>hutool-allartifactId>
              <version>5.8.22version>
          dependency>
      dependencies>
    
    <build>
        <finalName>DrawPrinterfinalName>
        <plugins>
          <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
            <version>2.5.4version> 
            <executions>
              <execution>
                <goals>
                  <goal>repackagegoal>
                goals>
              execution>
            executions>
          plugin>
        plugins>
      build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    shell命令代码

    package xxxx;
    
    import cn.hutool.core.util.StrUtil;
    import com.higer.ipd.tools.drawprinter.commons.PdfPrinter;
    import com.higer.ipd.tools.drawprinter.entity.DrawInfoEntity;
    import com.higer.ipd.tools.drawprinter.service.IDrawInfoService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.shell.standard.ShellComponent;
    import org.springframework.shell.standard.ShellMethod;
    
    import java.io.File;
    import java.util.HashMap;
    import java.util.List;
    
    @ShellComponent
    public class CommonCommand {
        @Autowired
        private IDrawInfoService drawInfoService;
    
        @ShellMethod(value = "打印消息",key="000",group = "test")
        public void printMessage(String message) {
            System.out.println(message);
        }
        @ShellMethod(value = "查看本地打印机",key="101",group = "print")
        public void showLocPrinter(){
            PdfPrinter.getLocalPrinter().keySet().forEach(System.out::println);
        }
        @ShellMethod(value="打印图纸",key="103",group = "print")
        public void printPdf(String printerName,String fileName,String pageSize){
            try {
                String result = PdfPrinter.print(new File(fileName), printerName, pageSize);
                if(StrUtil.isBlank(result)){
                    System.out.println("打印成功!");
                }else{
                    System.out.println(result);
                }
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("打印出错!");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    上面开发了两个shell命令:“查看本地打印机"和"打印图纸”.

    打印图纸代码片段如下:

    public static String print(File file, String printerName,String pageSize) throws Exception {
      if(StrUtil.isBlank(printerName) || file == null || !file.exists()){
        return "未指定打印机或待文件不存在,请确认!";
      }
      // 1.根据打印机名称找到对应的打印机服务,
      Map<String, PrintService> printerMap = getLocalPrinter();
      PrintService printService = printerMap.get(printerName);
      if(printService == null){
        return "没有找到指定的打印机!";
      }
      // 2.加载pdf文件,并设置打印配置,打印
      try (PDDocument document = PDDocument.load(file)){
        PrinterJob printJob = PrinterJob.getPrinterJob();
        printJob.setJobName(file.getName());
        printJob.setPrintService(printService);
        PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.SCALE_TO_FIT);
        Book book = new Book();
        PageFormat pageFormat = new PageFormat();
        pageFormat.setOrientation(PageFormat.PORTRAIT);//纵向
        pageFormat.setPaper(getPaper(pageSize));//设置纸张
        book.append(pdfPrintable, pageFormat, document.getNumberOfPages());
        printJob.setPageable(book);
        printJob.setCopies(1);//设置打印份数
        HashPrintRequestAttributeSet pars = new HashPrintRequestAttributeSet();
        pars.add(Sides.ONE_SIDED); //设置单双页
        printJob.print(pars);
      }
      return "";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    效果

    启动后进入输入命令状态,输入help可以看到帮助信息,效果如下:

    在这里插入图片描述
    输入 help 103 可以看到打印图纸的帮助信息,命令格式为: 103 打印机名称 文件名称 页面大小(A3/A4)

    在这里插入图片描述
    源码下载

  • 相关阅读:
    TL,你是如何管理项目风险的?
    Android TabLayout的使用与总结
    [附源码]java毕业设计一点到家小区微帮服务系统
    无人机还能“独立思考”,他们做到了...
    马士兵老师JVM调优(修订版)
    cuda 内存模型
    夜出行动物
    Vue学习日记——Day2
    MySQ漏洞修复
    PyTorch常用代码段合集
  • 原文地址:https://blog.csdn.net/shui878412/article/details/134427189