PDF尺寸修改:等比绽放(标准面单100*150mm)

这篇具有很好参考价值的文章主要介绍了PDF尺寸修改:等比绽放(标准面单100*150mm)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PDF修改尺寸

需要注意:第一个方法返回的是转换后PDF的base64。第二个方法返回的是文件流,这个方法才是转的核心。

 /**
  * 修改PDF尺寸
  *
  * @param pdfUrl                 PDF链接
  * @param pdfWidthInMillimeters  指定宽 mm
  * @param pdfHeightInMillimeters 指定高 mm
  * @return PDF转换尺寸后的base64
  */
 public static String updatePdfSize(String pdfUrl, float pdfWidthInMillimeters, float pdfHeightInMillimeters) {
     try {
         URL url = new URL(pdfUrl);
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
         conn.setRequestMethod("GET");
         conn.setConnectTimeout(5000);
         InputStream is = conn.getInputStream();
         ByteArrayOutputStream out = updatePdfSize(is, pdfWidthInMillimeters, pdfHeightInMillimeters);
         BASE64Encoder encoder = new BASE64Encoder();
         String pdfBase64 = encoder.encode(out.toByteArray());
         is.close();
         return pdfBase64;
     } catch (IOException e) {
         log.error("updatePdfSize error:{}", e.getMessage(), e);
     }
     return "";
 }
 /**
   * 转换PDF尺寸
   *
   * @param inputStream            PDF源文件流
   * @param pdfWidthInMillimeters  指定宽 mm
   * @param pdfHeightInMillimeters 指定高 mm
   * @return 转换后的PDF的文件流
   */
  public static ByteArrayOutputStream updatePdfSize(InputStream inputStream, float pdfWidthInMillimeters, float pdfHeightInMillimeters) {
      try {
          // 毫米转换为磅(1毫米≈2.83465磅)
          float pdfWidthInPoints = pdfWidthInMillimeters * 2.83465f;
          float pdfHeightInPoints = pdfHeightInMillimeters * 2.83465f;

          //  容器初始化
          ByteArrayOutputStream out = new ByteArrayOutputStream();
          Document doc = new Document();
          PdfWriter writer = PdfWriter.getInstance(doc, out);
          doc.open();
          PdfReader pdfReader = new PdfReader(inputStream);
          PdfContentByte cb = writer.getDirectContent();

          // 循环修改尺寸
          int total = pdfReader.getNumberOfPages();
          for (int i = 1; i <= total; i++) {
              PdfImportedPage page = writer.getImportedPage(pdfReader, i);
              Rectangle rectangle = pdfReader.getPageSize(i);

              float originalWidth = rectangle.getWidth();
              float originalHeight = rectangle.getHeight();

              // 计算缩放比例
              float scaleWidth = pdfWidthInPoints / originalWidth;
              float scaleHeight = pdfHeightInPoints / originalHeight;
              float scale = Math.min(scaleWidth, scaleHeight);

              doc.setPageSize(new RectangleReadOnly(originalWidth * scale, originalHeight * scale));
              doc.newPage();
              cb.addTemplate(page, scale, 0, 0, scale, 0, 0);
          }

          doc.close();
          writer.close();
          return out;
      } catch (Exception e) {
          log.error("updatePdfSize error:{}", e.getMessage(), e);
          return null;
      }
  }

图片转成指大小PDF

返回的是base64。需要返回流的,可能简单改写下文章来源地址https://www.toymoban.com/news/detail-615906.html

/**
  * 图片转成指定大小的PDF的base64
  *
  * @param pngImagePath           图片地址
  * @param pdfWidthInMillimeters  指定的PDF宽(mm)
  * @param pdfHeightInMillimeters 指定的PDF高(mm)
  * @return PDF的Base64
  */
 public static String convertPngToPdfBase64(String pngImagePath, float pdfWidthInMillimeters, float pdfHeightInMillimeters) {
     try {
         // 毫米转换为磅(1毫米≈2.83465磅)
         float pdfWidthInPoints = pdfWidthInMillimeters * 2.83465f;
         float pdfHeightInPoints = pdfHeightInMillimeters * 2.83465f;

         // 读取PNG图像的原始宽度和高度(单位:点)
         Image pngImage = Image.getInstance(pngImagePath);
         float originalWidth = pngImage.getWidth();
         float originalHeight = pngImage.getHeight();

         // 计算图像在PDF中的缩放比例
         float scaleWidth = pdfWidthInPoints / originalWidth;
         float scaleHeight = pdfHeightInPoints / originalHeight;
         float scale = Math.min(scaleWidth, scaleHeight);

         // 计算图像在PDF中的位置居中显示
         float xPosition = (pdfWidthInPoints - originalWidth * scale) / 2;
         float yPosition = (pdfHeightInPoints - originalHeight * scale) / 2;

         // 创建Document对象,并设置PDF文档的大小为所需尺寸
         Document document = new Document(new Rectangle(pdfWidthInPoints, pdfHeightInPoints));

         // 创建PdfWriter对象,将输出流与Document对象关联
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         PdfWriter.getInstance(document, os);

         // 打开Document
         document.open();

         // 设置PNG图像在PDF中的缩放比例和位置
         pngImage.scaleAbsolute(originalWidth * scale, originalHeight * scale);
         pngImage.setAbsolutePosition(xPosition, yPosition);

         // 将PNG图像添加到PDF中
         document.add(pngImage);

         // 关闭Document
         document.close();

         // 返回PDF的base64
         return new BASE64Encoder().encode(os.toByteArray()).trim().replaceAll("\\r", "").replaceAll("\\n", "");
     } catch (DocumentException | IOException e) {
         log.error("image 转 pdf 流失败 {}", e.getMessage(), e);
         return "";
     }
 }

到了这里,关于PDF尺寸修改:等比绽放(标准面单100*150mm)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LeetCode】挑战100天 Day4(热题+面试经典150题)

    LeetCode是一个在线编程网站,提供各种算法和数据结构的题目,面向程序员、计算机科学专业学生和技术爱好者等人群,旨在帮助他们提高算法和编程技能。LeetCode上的问题通常来自各种技术公司的面试题目,因此它也是程序员面试准备的重要资源之一。 LeetCode上的问题涵盖了

    2024年02月04日
    浏览(42)
  • Python修改图像尺寸

    深度学习任务中,图像数据集的数量往往是非常大的,这时如果要统一修改所有图像的尺寸,需要用代码进行批处理,下面我们详细介绍图像尺寸修改流程。 主要使用 python 语言中的 pillow 库,安装代码如下: 1、遍历根目录中的所有图像 遍历根目录下的所有文件,利用for循

    2024年02月12日
    浏览(30)
  • PDF转CAD后尺寸如何保持一致?这几种方法可以尝试一下

    CAD文件是可编辑的,可以进行修改、添加和删除,这使得在CAD软件中进行编辑更加容易和灵活。这意味着,如果需要对图纸进行修改或者添加新的元素,可以直接在CAD软件中进行操作,而不需要重新制作整个图纸。那么将PDF文件转换成CAD格式后,怎么保持尺寸一致呢?教大家

    2024年02月16日
    浏览(50)
  • 微信小程序:修改按钮BUTTON尺寸

      微信小程序当中通过wxss来设置button的宽高值并不起效果,而size属性却只有两个合法值,当我们想要自定义大小时则: 在 标签中直接写 style即可: (当前为开发者模式无法进入会话,真机调试即可看到效果) 

    2024年02月11日
    浏览(95)
  • Python钢筋混凝土结构计算.pdf-已知弯矩确定混凝土梁截面尺寸

    确定混凝土梁截面的合理尺寸通常需要考虑弯矩、受力要求和约束条件等多个因素。以下是一种常见的计算公式,用于基于已知弯矩确定混凝土梁截面的合理尺寸: 请注意,以上公式仅提供了一种常见的计算方法,并且具体的规范和设计要求可能会有所不同。在实际工程中,

    2024年02月10日
    浏览(38)
  • 嘉立创EDA专业版--文件名称修改、原理图尺寸修改与文本放置

    本文使用嘉立创EDA专业版信息: 客户端版本 Windows 64bit V1.7.31.78bc6e 如需下载可以移步官方软件下载页面软件下载 1 ,或见本文末链 新建工程后,如果需要对图中的原理图/PCB文件名字,比如 Sechmatic1

    2023年04月27日
    浏览(78)
  • 手机怎么修改照片大小尺寸?这两种方法轻松解决

    怎么使用手机把照片的小小尺寸给修改一下呢?大家是不是经常被照片的尺寸大小给困扰过?尤其是在上传一些图片文件的时候,不是图片的内存太大就会图片的尺寸不对,自己修改还越改越错,大家遇到这些问题就会很头疼,今天教大家两种手机就能够修改照片尺寸的方法

    2024年02月12日
    浏览(64)
  • 手机怎么把照片调整成二寸?教你一招轻松修改尺寸

    怎么使用手机把照片的尺寸修改成二寸呢?随着科技的发展,现在的生活已经越来越便捷。我们不仅可以随时随地通过手机拍照,还可以通过手机应用程序进行照片处理。在日常生活中,我们经常需要提交一些证件,如身份证、驾驶证等,这些证件照片的尺寸都是两寸。那么

    2024年02月11日
    浏览(52)
  • [Qt学习笔记]Halcon窗口界面上显示文字的字体尺寸、样式修改

    养成良好的查资料习惯,可以实现事半功倍。 在Halcon12中,有set_font和set_display_font两个算子,其中set_display_font是本地函数形式,所以最终的实现算子为set_font. 按照不同的系统环境下,使用方法略有不同: 不同的系统下使用的方法不同,原本以为比较简单,直接按照文档的

    2024年03月20日
    浏览(55)
  • 【sgDragSize】自定义拖拽修改DIV尺寸组件,适用于窗体大小调整

    核心原理就是在四条边、四个顶点加上透明的div,给不同方向提供按下移动鼠标监听 ,对应计算宽度高度、坐标变化  特性: 支持设置拖拽的最小宽度、最小高度、最大宽度、最大高度 可以双击某一条边,最大化对应方向的尺寸;再一次双击,则会恢复到原始大小

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包