Я нашел способ обойти эту проблему.
Я до сих пор не знаю, почему для 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.