Apache pdfbox - 将 A4 页面拆分为 A7 部分

问题描述 投票:0回答:1

我收到一份 A4 页的文档,每页有 8 个 A7 部分。 我需要从每个页面的每个 A7 区域中提取数据,因为它们是相关的。 是否可以将8个A7中的每一个A4拆开,并过一遍数据。

java pdf pdfbox
1个回答
0
投票

因为我不知道“从每个页面的每个 A7 区域中提取数据,因为它们是相关的”的真正含义是什么,所以我首先提出一个解决方案,(至少)在视觉上将单个 A$ pdf 页面拆分为八个 A7,遵循以下配置:

+----+----+
| 4  | 8  |
+----+----+
| 3  | 7  |
+----+----+
| 2  | 6  |
+----+----+
| 1  | 5  |
+----+----+

基本上,它使用移动窗口裁剪当前页面并将其导入到新文档的页面中,然后旋转每个新页面。

public void splitPdf(String pdfFileName) throws IOException {
  File pdfFile = new File(pdfFileName);
  File pdfTargetFile = new File(pdfFileName + ".a7.pdf");

  try (PDDocument pdfDocument = Loader.loadPDF(new RandomAccessReadBufferedFile(pdfFile));
      PDDocument pdfTargetDocument = new PDDocument(); ) {

    for (PDPage pdfPage : pdfDocument.getPages()) {
      PDRectangle cropBox = pdfPage.getCropBox();
      float upperRightX = cropBox.getUpperRightX();
      float upperRightY = cropBox.getUpperRightY();
      for (int j = 0; j < 2; ++j) {
        for (int i = 0; i < 4; ++i) {
          float cropLowerLeftX = upperRightX / 2 * j;
          float cropUpperRightX = upperRightX / 2 * (j + 1);
          float cropLowerLeftY = upperRightY / 4 * i;
          float cropUpperRightY = upperRightY / 4 * (i + 1);
          cropBox.setLowerLeftX(cropLowerLeftX);
          cropBox.setUpperRightX(cropUpperRightX);
          cropBox.setLowerLeftY(cropLowerLeftY);
          cropBox.setUpperRightY(cropUpperRightY);
          pdfPage.setCropBox(cropBox);
          pdfTargetDocument.importPage(pdfPage);
        }
      }
    }

    for (PDPage pdfTargetPage : pdfTargetDocument.getPages()) {
      pdfTargetPage.setRotation(90);
    }
    pdfTargetDocument.save(pdfTargetFile);
  }
}

无论如何,这并不是真正的“拆分”,因为实际上新文档的每一页都包含了原始文档的所有数据,但它只是“超出页面边界”,正因为如此,我将其称为“视觉” “分裂。

© www.soinside.com 2019 - 2024. All rights reserved.