给pdf动态添加数据

依赖

<dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
            <version>1.0.4</version>
        </dependency>
        <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-pdf</artifactId>
            <version>11.5.0</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId> e-iceblue </groupId>
            <artifactId>spire.pdf</artifactId>
            <version>3.11.6</version>
        </dependency>



license.xml  破解pdf

<License>
  <Data>
    <Products>
      <Product>Aspose.Total for Java</Product>
      <Product>Aspose.Pdf for Java</Product>
    </Products>
    <EditionType>Enterprise</EditionType>
    <SubscriptionExpiry>20991231</SubscriptionExpiry>
    <LicenseExpiry>20991231</LicenseExpiry>
    <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
  </Data>
  <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
</License>



后端
  先将服务器上的pdf和电子签章(需填写动态字段,用于动态赋值)保存到项目目录下,然后将pdf填充数据之后保存到服务器中
 public int downAgreement(Person person) throws IOException {

		//绝对路径
        String localUrl="F:\\e-modules\\person\\src\\main\\pdf";

        Person person1=personMapper.selectTaxName(person.getTaxNo());
        // 如果文件夹不存在则创建
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
        Date date = new Date();
        String format = simpleDateFormat.format(date);
        File file1 = new File(localUrl+"/"+format);
        if(!file1.exists()){//如果文件夹不存在
            file1.mkdir();//创建文件夹
        }
		//读取   license.xml  需要手动修改pom依赖包才可以使用,见地址文章另一篇   替换本地仓库里面com\aspose\aspose-pdf文件夹下的11.5.0文件夹
               https://download.csdn.net/download/weixin_50391597/42869934
        InputStream license = PersonServiceImpl.class.getClassLoader().getResourceAsStream("license.xml");

//            BufferedReader reader = new BufferedReader(new InputStreamReader(license));
//            StringBuilder sb = new StringBuilder();
//            String line = null;
//            while (true) {
//                try {
//                    if (!((line = reader.readLine()) != null)) break;
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//                sb.append(line + "/n");
//            }
//            System.out.println("input:" + sb.toString());
            try {
                new License().setLicense(license);
            } catch (Exception e) {
                e.printStackTrace();
            }
   
        //查询这个的协议    动态获取服务器上保存的协议
        Tax tax = personMapper.selectPdf(person.getNo());
        //线上图片地址
        UUID uuid = UUID.randomUUID();
		//工具类  将服务器上的pdf放入项目目录下    见另一篇文文章
        HttpUtils.saveImageToDisk(imageUrl+tax.getPdf(),localUrl+"/"+format+"/"+uuid.toString()+".pdf");
        File f = new File(localUrl+"/"+format+"/"+uuid.toString()+".pdf");
        String decode = URLDecoder.decode(f.getAbsolutePath());
        Document pdfDoc = new Document(decode);
        PageCollection pages = pdfDoc.getPages();
        Font font = FontRepository.findFont("Microsoft YaHei");
        System.out.println("文档总页码数:" + pages.size());
        // 主体
        TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("taxName");
        pages.accept(textFragmentAbsorber);
        for (TextFragment textFragment : (Iterable<TextFragment>) textFragmentAbsorber.getTextFragments()) {
            textFragment.getTextState().setFont(font);
            textFragment.setText(person1.getTaxName());
            //textFragment.getTextState().setFontStyle(1);// 字体加粗
        }
        //
        textFragmentAbsorber = new TextFragmentAbsorber("taxName");
        pages.accept(textFragmentAbsorber);
        for (TextFragment textFragment : (Iterable<TextFragment>) textFragmentAbsorber.getTextFragments()) {
            textFragment.getTextState().setFont(font);
            textFragment.setText(person1.getTaxName());
        }
        // 名称
        textFragmentAbsorber = new TextFragmentAbsorber("name");
        pages.accept(textFragmentAbsorber);
        for (TextFragment textFragment : (Iterable<TextFragment>) textFragmentAbsorber.getTextFragments()) {
            textFragment.getTextState().setFont(font);
            textFragment.setText(person.getName());
        }
        // 
        textFragmentAbsorber = new TextFragmentAbsorber("idNo");
        pages.accept(textFragmentAbsorber);
        for (TextFragment textFragment : (Iterable<TextFragment>) textFragmentAbsorber.getTextFragments()) {
            textFragment.getTextState().setFont(font);
            textFragment.setText(person.getIdCard());
        }
        // 手机号
        textFragmentAbsorber = new TextFragmentAbsorber("phone");
        pages.accept(textFragmentAbsorber);
        for (TextFragment textFragment : (Iterable<TextFragment>) textFragmentAbsorber.getTextFragments()) {
            textFragment.getTextState().setFont(font);
            textFragment.setText(person.getPhone());
        }

        //日期
        textFragmentAbsorber = new TextFragmentAbsorber("date");
        pages.accept(textFragmentAbsorber);
        for (TextFragment textFragment : (Iterable<TextFragment>) textFragmentAbsorber.getTextFragments()) {
            textFragment.getTextState().setFont(font);
            textFragment.setText(DateUtils.dateTime(person.getCreateTime()).substring(0,10));
        }
        pdfDoc.save( localUrl+"/"+format + File.separator + person.getIdCard()+person.getTaxNo()+".pdf");
        //读取pdf
        PdfDocument doc = new PdfDocument();
        doc.loadFromFile(localUrl+"/" +format + File.separator + person.getIdCard()+person.getTaxNo()+".pdf");
        doc.getPages().add();  //先添加一张
        //获取文档的第几页
        PdfPageBase page = doc.getPages().get(5);
        //动态获取签章
        UUID uuid1 = UUID.randomUUID();
        HttpUtils.saveImageToDisk(imageUrl+tax.getPhoto(),localUrl+"/"+format+"/"+uuid1.toString()+".png");
        PdfImage image = PdfImage.fromFile(localUrl+"/"+format+"/"+uuid1.toString()+".png");
        float width = image.getWidth() * 0.3f;
        float height = image.getHeight() * 0.3f;
        //放置图片的位置
        page.getCanvas().drawImage(image, 100,130, width, height);
        //移除最后一页页
//        System.out.println("888"+doc.getPages().getCount());
        doc.getPages().remove(doc.getPages().get(doc.getPages().getCount()-1));
        //保存PDF文件导项目目录下
        doc.saveToFile(localUrl+"/" +format + File.separator + person.getIdCard()+person.getTaxNo()+".pdf");
        //将签约好的电子版保存到服务器中
        File file = new File(localUrl + "/" + format + File.separator + person.getIdCard() + person.getTaxNo() + ".pdf");
        FileInputStream input = new FileInputStream(file);
        MultipartFile multipartFile =new MockMultipartFile("file", file.getName(), "text/plain", IOUtils.toByteArray(input));

        String resultUrl = iFileSrevice.getFile(multipartFile);
        JSONObject respJson = JSONObject.parseObject(resultUrl);
        Object resultUrl1 =  respJson.get("data");
        String url0 = resultUrl1.toString();
        JSONObject respJson1 = JSONObject.parseObject(url0);
        String url = respJson1.get("url").toString();
        //截取
        //获得第一个点的位置
        int index=url.indexOf("/");
        //根据第一个点的位置 获得第二个点的位置
        index=url.indexOf("/", index+1);
        index=url.indexOf("/", index+1);
        //根据第二个点的位置,截取 字符串。得到结果 result
        String result=url.substring(index);
        person.setAgreementPhoto(result);
        personMapper.updatePersonAgreementPhoto(person);
        //删除从服务器拉下来的临时pdf协议
        f.delete();
        //删除完成后的临时签约电子协议
        File file00 = new File(localUrl+"/" +format + File.separator + person.getIdCard()+person.getTaxNo()+".pdf");
        file00.delete();
        //删除临时签章
        File file2 = new File(localUrl + "/" + format + "/" + uuid1.toString() + ".png");
        file2.delete();

        doc.close();
        return 1;
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值