Android: PDF-файл, созданный с помощью PrintedPdfDocument, выглядит по-разному на разных устройствах. - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь отобразить представление в PrintedPdfDocument. Размер страницы, как и ожидалось, составляет 1/72 дюйма. Итак, для страницы размера A0 (ширина = 33,11 дюйма) document.getPageWidth() возвращает 2384 (33,11 * 72). Ширина холста страницы равняется одному пикселю одной 1/72 дюйма - так, pageCanvas.getWidth() возвращает 2384. Это верно для разных устройств. Пока все хорошо.

Проблема, с которой я столкнулся, заключается в том, что на разных устройствах сгенерированный PDF-документ для одного и того же представления выглядит по-разному. На некоторых устройствах он растягивается на странице PDF, а на некоторых устройствах отображается как надо.

В чем может быть проблема? Разве создание PDF-файла не должно быть независимым от устройства? Обратил внимание, что pageCanvas.getDensity() на разных телефонах разное. Почему плотность экрана телефона влияет на плотность холста страницы PDF?

Учитывая, что числовое значение document.getPageWidth() в 1/72 дюйма == pageCanvas.getWidth() в пикселях, не должно pageCanvas.getDensity() всегда быть 72 DPI? На некоторых телефонах это 320 (где он отображается правильно), а на других - 420 (где вид рендерится в растянутом виде). ​​

Здесь немного застрял, поэтому были бы очень признательны за любые указатели. Заранее спасибо!

1 Ответ

1 голос
/ 10 августа 2020

Я нашел способ обойти эту проблему.

Я до сих пор не знаю, почему для pageCanvas.getDensity() задана плотность отображения, а не плотность страницы PDF (72 dpi). Я предполагаю, что это может быть потому, что некоторые представления могут неправильно использовать метрики отображения экрана при рисовании на холсте, даже если холст не является экраном - но это только мое предположение.

Независимо от того, почему pageCanvas.getDensity() настроен на плотность экрана. Я работал с этим путем вычисления размеров страницы (в dp) с использованием плотности экрана. Итак, если я хочу нарисовать страницу A0 (ширина которой составляет 33,11 дюйма), я устанавливаю ширину страницы (при создании PrintedPdfDocument) на 33,11 * 420 = 13906 dp вместо рекомендованного 33,11 * 72 = 2384 дп. Таким образом, когда представления отображаются на холсте с плотностью 420 точек на дюйм, результирующая страница будет иметь ширину 33,11 дюйма.

Это работает отлично, и созданная страница PDF теперь выглядит одинаково независимо от устройства, на котором это было создано. Единственный побочный эффект заключается в том, что Adobe Acrobat считает, что страницы имеют ширину 33,11 * 420/72 дюйма вместо 33,11 дюйма. Но на практике это не имеет большого значения, поскольку во время печати мы можем уменьшить страницы до формата A0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...