PDF自动打印

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

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

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

代码

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

<!-- pom.xml 片段 -->
<!-- spring-boot-starter 版本是随意选的 -->
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.7.14</version>
</parent>
<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
  <!-- spring-shell 版本需要与 spring-boot-starter 匹配 -->
    <dependency>
      <groupId>org.springframework.shell</groupId>
      <artifactId>spring-shell-starter</artifactId>
      <version>2.1.11</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.26</version>
      <optional>true</optional>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.pdfbox</groupId>
      <artifactId>pdfbox</artifactId>
      <version>2.0.26</version>
    </dependency>
      <dependency>
          <groupId>cn.hutool</groupId>
          <artifactId>hutool-all</artifactId>
          <version>5.8.22</version>
      </dependency>
  </dependencies>

<build>
    <finalName>DrawPrinter</finalName>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.5.4</version> <!-- 使用适合你的Spring Boot版本 -->
        <executions>
          <execution>
            <goals>
              <goal>repackage</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

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("打印出错!");
        }
    }
}

上面开发了两个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 "";
}

效果

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛_snail

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值