Когда вы говорите, что вы пытались использовать iText, я предполагаю, что вы использовали пример ExtractImages в качестве отправной точки для вашего кода. В этом примере используется вспомогательный класс MyImageRenderListener , который реализует интерфейс RenderListener
.
В этом вспомогательном классе метод renderImage()
реализован следующим образом:
public void renderImage(ImageRenderInfo renderInfo) {
try {
String filename;
FileOutputStream os;
PdfImageObject image = renderInfo.getImage();
if (image == null) return;
filename = String.format(path, renderInfo.getRef().getNumber(), image.getFileType());
os = new FileOutputStream(filename);
os.write(image.getImageAsBytes());
os.flush();
os.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
Он использует объект ImageRenderInfo
для получения экземпляра PdfImageObject
и создает файл изображения с использованием этого объекта.
Если вы проверите класс ImageRenderInfo
, вы обнаружите, что вы также можете попросить другую информацию об изображении. Что вам нужно, это метод getImageCTM()
. Этот метод возвращает объект Matrix
. Эта матрица может быть интерпретирована с использованием обычной алгебры средней школы. Значения I31
и I32
дают вам положение X и Y. В большинстве случаев I11
и I22
дадут вам ширину и высоту (если изображение не повернуто).
Если изображение повернуто, вам придется проконсультироваться с учебниками средней школы , в частности те, которые обсуждают аналитическую геометрию.
Привет, вы можете использовать функцию mutate_at
следующим образом:
library(tidyverse)
data %>% as_tibble %>%
mutate_at(vars(paste0("ht_", 1:4)), ~if_else(.x > ht_5, ht_5, .x))
В этом случае вы также можете использовать pmin
вместо if_else
, что должно быть быстрее.
data %>% as_tibble %>%
mutate_at(vars(paste0("ht_", 1:4)), ~pmin(.x, ht_5))
Чтобы увидеть, сколько значений больше ht_5
, вы можете использовать функцию summarise_at
:
data %>% as_tibble %>%
summarize_at(vars(paste0("ht_", 1:4)), ~ length(.x[.x > ht_5]))
# A tibble: 1 x 4
ht_1 ht_2 ht_3 ht_4
<int> <int> <int> <int>
1 6 39 131 258