2015-12-14 8 views
9

Sto provando a convertire un LinearLayout in PDF utilizzando la classe Android PDFDocument. Getto il layout in un ViewGroup, ridimensiono la vista sulla tela e disegno sulla tela. Sto avendo successo nel fare il PDF, ma la dimensione del font è disegnata in base alla risoluzione/densità del dispositivo e non alle dimensioni del PDF. Fondamentalmente, il font finisce per essere enorme sul PDF reale. Credo che ciò sia dovuto al fatto che la Vista viene disegnata per quanto riguarda le dimensioni e la densità dello schermo del dispositivo e quindi tradotta sulla tela.Impostazione delle dimensioni del testo utilizzando Android PDFDocument basato su documento PDF/dimensioni canvas

Ho sperimentato l'impostazione delle dimensioni in px e pt, ma non riesco a farlo bene. Il font appare delle dimensioni corrette quando le dimensioni sono impostate molto piccole (1-2 dpi o px), ma so che quando si esegue questa operazione su dispositivi diversi avrò dei problemi.

Qual è il modo migliore per ridimensionare il testo e visualizzare le dimensioni in modo che appaiano le dimensioni appropriate nel PDF finale (circa 12 caratteri a 300 dpi)? Avrei bisogno di tirare una sorta di dimensioni dallo schermo del dispositivo e quindi ridimensionare tutte le visualizzazioni in base a un rapporto tra il dispositivo e la tela PDF?

La mia testa è dolorante da battere fuori dal muro.

Grazie, Andy

//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

Ha trovato la soluzione? –

risposta

0

ho trovato che questo è un problema con il mio documento PDF pure. Quindi, invece di disegnare la vista sulla mia tela, ho creato un oggetto TextPaint e ho usato il metodo canvas.drawtext ("stringa", posizione-x, posizione-y, testo-carattere).

0

Provare canvas.setDensity(72) come funziona per Bitmap? Vedere here.

Oppure utilizzare 72 per PrintAttributes.Resolution?

Problemi correlati