2015-12-14 2 views
9

Я пытаюсь преобразовать 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);

+0

Обнаружил решение? –

ответ

0

Я нашел, что это проблема с моим PDF документа, а также. Поэтому вместо рисования представления на моем холсте я создал объект TextPaint и использовал метод canvas.drawtext («string», x-position, y-position, textPaint).

0

Попробуйте canvas.setDensity(72), так как он работает для растровых изображений? См. here.

Или использовать 72 для PrintAttributes.Resolution?

Смежные вопросы