Подтвердить что ты не робот

PDF.js масштаб PDF на фиксированной ширине

У меня есть фиксированный ящик, в котором я хочу отобразить PDF в файле PDF.js. Поскольку документация PDF.js на самом деле недоступна (плюется через исходные файлы), я хотел бы знать, можно ли масштабировать рендеринг PDF по фиксированной ширине. Когда я устанавливаю CSS: canvas { width: 600px; } для холста, отображающего PDF, PDF растягивается, а качество становится неудовлетворительным.

4b9b3361

Ответ 1

Я обновил пример из Pdf.js github http://jsbin.com/pdfjs-prevnext-v2/edit#html,live, чтобы правильно масштабировать до фиксированной ширины холста. См. http://jsfiddle.net/RREv9/ для моего кода.

Важная строка

var viewport = page.getViewport(canvas.width / page.getViewport(1.0).width);

потому что выражение canvas.width / page.getViewport(1.0).width дает нам подходящий масштабный коэффициент.

Вы должны изменить ширину вашего холста не с помощью css, а с помощью атрибута width на холсте. См. Ширина и высота холста в HTML5

Ответ 2

Чтобы гарантировать, что масштабирование работает со всеми размерами страниц (Letter, A4, A5 и т.д.), вы должны учитывать, что отношения между высотой и шириной варьируются при изменении размеров страниц. Например, популярные размеры страниц (в дюймах):

  • Письмо: 8.5 x 11.. отношение 0.772
  • A4: 8.27 × 11.7.. соотношение 0.706
  • A5: 5.83 × 8.27.. отношение 0.704

Вы можете рассчитать правильное масштабирование, рассматривая как высоту, так и ширину и только уменьшая размер, который меньше. Это обеспечит все, что подходит вашему холсту. Кроме того, если вы измените ширину или высоту своего холста, вы ничего не сломаете.

var unscaledViewport = page.getViewport(1);
var scale = Math.min((canvas.height / unscaledViewport.height), (canvas.width / unscaledViewport.width));
var viewport = page.getViewport(scale);