Как изменить уровень масштабирования Adobe Reader? - PullRequest
1 голос
/ 05 октября 2019

У меня есть отчет Jasper, который создает PDF в Java Spring. Я пытался изменить уровень масштабирования в течение нескольких часов и не увенчался успехом. Всякий раз, когда я открываю PDF с помощью Adobe Reader, его 149% (и коллеги еще хуже). Был похожий вопрос , который не помог.

Я пробовал следующие имена свойств, и ни одно из них не работало

Я пробовал следующие значения:

  • 0,5
  • 1.1
  • 2

Я проверил свои свойства Adobe Reader, масштабирование установлено по умолчанию, и доступность также отключена.

1 Ответ

2 голосов
/ 07 октября 2019

Как Villat указано в комментарий Один из способов установить уровень масштабирования - "this.zoom=50;"

Вы можете сделать это, указав его в jrxml

<property name="net.sf.jasperreports.export.pdf.javascript" value="this.zoom=50;"/>

или

, установив его на SimplePdfExporterConfiguration при экспорте из Java

....
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
configuration.setPdfJavaScript("this.zoom=50;");
exporter.setConfiguration(configuration);

Однако

Решение о том, будет ли он выполнять / может выполнять javascript, решает читатель (приложение, используемое для открытия pdf).

Например, в стандартном Adobe Acrobat Reader DC aпользователь может вручную отключить это в меню «Правка»> «Настройки»

preferences

Более того, если считыватель уже открыт, кажется, что не всегда нравится менятьУровень масштабирования через javascript, мой установленный читатель работает правильно, только если он открывается с PDF.

Альтернативное решение

Если вы экспортируете в Java, вы можете опубликовать PDF-файл с добавлением OpenAction, см. Bruno Lowagie ответ https://stackoverflow.com/a/24095098/5292302

public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 0,
    reader.getPageSize(1).getHeight(), 0.75f);
    PdfAction action = PdfAction.gotoLocalPage(1, pdfDest, stamper.getWriter());
    stamper.getWriter().setOpenAction(action);
    stamper.close();
    reader.close();
}

Следовательно, после экспорта,Вы вызываете аналогичный метод, если память позволяет, вы также можете сделать это в памяти, используя ByteArrayOutputStream или аналогичный.

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

...