Существует множество причин, по которым отключение кнопки «Назад» на самом деле не работает. Лучше всего предупредить пользователя:
window.onbeforeunload = function() { return "Your work will be lost."; };
Эта страница перечисляет несколько способов, которыми вы могли попытаться отключить кнопку «Назад», но никто из них не гарантирован:
Я разобрался с решением этой проблемы. Я хотел, чтобы другие, кто мог столкнуться с подобной проблемой, извлекли выгоду из моего решения, поэтому я публикую его как ответ вместо того, чтобы комментировать мой вопрос.
Таким образом, получается, что метод getImageScaledHeight()
не работает, если автоматическое масштабирование включено с помощью setAutoScale(true)
. Автоматическое масштабирование будет происходить, но только после того, как изображение будет добавлено в документ, но для установки положения изображения в верхней части страницы нам потребуется масштабированная высота изображения при вызове следующего метода
image.setFixedPosition(i + 1, 0, PageSize.A4.getHeight()-image.getImageScaledHeight());
Чтобы включить масштабирование изображения, чтобы поместиться на странице, а также расположить их в нужном месте на странице, вам нужно
Сначала масштабируйте изображение, используя метод image.scaleToFit(fitWidth, fitHeight)
, а затем рассчитайте нижнее положение, используя scaled
Рассчитайте нижнюю позицию, используя масштабированное изображение высотой (image.getImageScaledHeight()
) и высотой страницы .
Теперь, если вы хотите иметь поля в своем PDF-файле, вам придется изменить код для масштабирования изображения и соответственно установить фиксированное положение. Ниже приведен пример кода решения для обоих сценариев.
image.scaleToFit(pdfA4usableWidth, pdfA4usableHeight);
image.setFixedPosition(i + 1, 0, PageSize.A4.getHeight()-image.getImageScaledHeight());
Щелкните здесь, чтобы увидеть пример кода с консольным выходом
float leftMargin = document.getLeftMargin(), rightMargin = document.getRightMargin();
float topMargin = document.getTopMargin(), bottomMargin = document.getBottomMargin();
float pdfA4usableWidth = PageSize.A4.getWidth() - leftMargin - rightMargin;
float pdfA4usableHeight = PageSize.A4.getHeight() - topMargin - bottomMargin;
System.out.println("A4 usable width: "+pdfA4usableWidth+", usable height: "+pdfA4usableHeight);
image.scaleToFit(pdfA4usableWidth, pdfA4usableHeight);
image.setFixedPosition(i + 1, 0, PageSize.A4.getHeight()-image.getImageScaledHeight());
Щелкните здесь, чтобы увидеть пример кода с консольным выводом
PDF сгенерированных ...
Изображение добавлено в PDF без полей
Изображение добавлено в PDF с полями по умолчанию
Примечания:
Давайте внесем еще некоторые изменения в пример MultipleImages
:
1) (незначительный) Нет необходимости создавать Document
с нестандартным размером страницы, этого было бы достаточно: [112 ]
2) Давайте изменим нижний параметр метода setFixedPosition
, извлекая высоту изображения из высоты страницы по умолчанию: image.setFixedPosition(i + 1, 0, PageSize.A4.getHeight()-image.getImageScaledHeight());
Результирующий файл PDF выглядит, как и ожидалось: [ 1110]