我收到一份 A4 页的文档,每页有 8 个 A7 部分。 我需要从每个页面的每个 A7 区域中提取数据,因为它们是相关的。 是否可以将8个A7中的每一个A4拆开,并过一遍数据。
因为我不知道“从每个页面的每个 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);
}
}
无论如何,这并不是真正的“拆分”,因为实际上新文档的每一页都包含了原始文档的所有数据,但它只是“超出页面边界”,正因为如此,我将其称为“视觉” “分裂。