Как масштабировать PDF-файл с помощью PdfBox - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь масштабировать pdf-файл, например, функцию масштабирования в копировальном аппарате, которая может масштабировать документ в процентах (например: https://inspectapedia.com/graphics/Safari_Page_Setup.jpg), Я использую pdfbox для управления моим pdf-файлом. Я пробовал это код, но почему он не работает? в коде нет ошибки.

void Scale(){
    try
    {
        PDDocument doc = PDDocument.load(new File(filePath));
        for (int p = 0; p < doc.getNumberOfPages(); ++p)
        {
            PDRectangle mediaBox = doc.getPage(p).getMediaBox();
            mediaBox.transform(Matrix.getScaleInstance(0.5f, 0.5f));
            doc.getPage(p).setMediaBox(mediaBox);
        }

        doc.save(new File(filePathEdited));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Кто-нибудь знает, почему этот код не работает?

EDIT
Мне нужно, чтобы он работал на API 16

1 Ответ

0 голосов
/ 23 января 2019

Прежде всего

mediaBox.transform(Matrix.getScaleInstance(0.5f, 0.5f));

не не меняет mediaBox на половину его прежнего размера. Вместо этого он возвращает путь, который представляет масштабированный прямоугольник; так как вы игнорируете возвращаемое значение этого выражения, эта строка вашего кода по сути является NOP (без операции).

Если вы подумаете об этом на короткое время, вы увидите, что метод transform, очевидно, не может заменить прямоугольник на результат преобразования, так как этот результат произвольного аффинного преобразования больше не должен быть прямоугольником, в конкретная не одна параллель краям страницы.

При этом, даже если ваш код масштабировал медиа-блок, результат все равно не будет тем, что вы хотите, в результате pdf будет отображать только часть исходной страницы, так как вы только масштабируете видимый раздел . холста, но не его содержание .

Таким образом, помимо фактического масштабирования медиа-бокса, вам также необходимо масштабировать содержимое. То есть Вы должны предварительно добавить дополнительный поток содержимого к содержимому страницы и изменить текущую матрицу преобразования с помощью преобразования масштабирования.

...