Я пытаюсь преобразовать LinearLayout в PDF с использованием класса PDFDocument Android. Я раздуваю макет в ViewGroup, масштабирую вид на холст и рисую на холст. У меня есть успех в создании PDF, но размер шрифта рисуется на основе разрешения/плотности устройства, а не размера PDF. По сути, шрифт становится огромным в реальном PDF. Я считаю, что это связано с тем, что View был сделан в отношении размеров и плотности экрана устройства, а затем переведен на холст.Настройка размера текста с использованием Android PDFDocument на основе формата PDF/холста PDF
Я экспериментировал с установкой размеров в px и pt, но я не могу понять, что это правильно. Шрифт появляется примерно в правильном размере, когда размеры заданы очень маленькими (1-2dp или px), но я знаю, что при работе на разных устройствах у меня будут проблемы.
Каков наилучший способ масштабирования текста и просмотреть размеры, чтобы они выглядели соответствующим размером в конечном PDF (приблизительно 12pt шрифт при 300 dpi)? Мне нужно будет вытащить какие-то измерения с экрана устройства, а затем изменить размер всех представлений на основе соотношения между устройством и холстом PDF?
Голова болит от избиения ее от стены.
Спасибо, Энди
//Sets print options
PrintAttributes printAttrs = new PrintAttributes.Builder().
setColorMode(PrintAttributes.COLOR_MODE_COLOR).
setMediaSize(PrintAttributes.MediaSize.NA_LETTER).
setResolution(new PrintAttributes.Resolution("res1", PRINT_SERVICE, 300, 300)).
setMinMargins(PrintAttributes.Margins.NO_MARGINS).build();
//create PDF Document
PdfDocument document = new PrintedPdfDocument(context, printAttrs);
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(pageWidth, pageHeight, 1).create();
//Inflate an XML template into a view with a LinearLayout root
LinearLayout container = new LinearLayout(context);
LayoutInflater inflater = LayoutInflater.from(context);
View view = new View(context);
view = inflater.inflate(R.layout.layout_pdf_meal_template, container, true);
//Pull data/strings from SQLite
//My codes goes through and populates the data gathered from the database to the LinearLayout's subviews
//create page
PdfDocument.Page page = document.startPage(pageInfo);
Canvas canvas = page.getCanvas();
//Draw view on the page
int measureWidth = View.MeasureSpec.makeMeasureSpec(canvas.getWidth(), View.MeasureSpec.EXACTLY);
int measuredHeight = View.MeasureSpec.makeMeasureSpec(canvas.getHeight(), View.MeasureSpec.EXACTLY);
container.measure(measureWidth, measuredHeight);
container.layout(0, 0, canvas.getWidth(), canvas.getHeight());
container.draw(canvas);
document.finishPage(page);
Обнаружил решение? –