Android: создание идентичных представлений для рисования на холсте PdfDocument для печати - PullRequest
0 голосов
/ 30 мая 2020

Я использую Views, увеличенные от XML, чтобы рисовать на холсте PdfDocument.Page. Проблема в том, что сгенерированный PDF-файл выглядит по-разному на разных устройствах (размер текста, высота и ширина), в зависимости от размера экрана и т. Д. c ..

Есть ли способ создавать идентичные представления независимо от того, размер экрана составляет, поэтому я получаю идентичные PDF-файлы. Dp, sp, px, pt все как-то уважают физическое устройство. Возможно перезапись некоторых значений screen-size et c. в контексте?

Вот мой код для создания PDF-документа:

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.pdf_person_container, null);

PdfDocument document = new PdfDocument();
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595,842,1).create();
PdfDocument.Page page = document.startPage(pageInfo);

int measureWidth = View.MeasureSpec.makeMeasureSpec(page.getCanvas().getWidth(), View.MeasureSpec.EXACTLY);
int measuredHeight = View.MeasureSpec.makeMeasureSpec(page.getCanvas().getHeight(), View.MeasureSpec.EXACTLY);
view.measure(measureWidth, measuredHeight);
view.layout(0, 0, page.getCanvas().getWidth(), page.getCanvas().getHeight());

view.draw(page.getCanvas());

document.finishPage(page);
document.writeTo(new FileOutputStream(filePath + "Detail.pdf"));

PDF на телефоне 1

PDF на телефоне 2

1 Ответ

0 голосов
/ 12 июня 2020
Configuration config = sourcecontext.getResources().getConfiguration();
config.densityDpi = DisplayMetrics.DENSITY_HIGH;
config.setTo(config);
Context context sourcecontext.createConfigurationContext(config);

И используйте этот новый контекст для Inflater

...