2015-12-14 39 views
9

Android PDFDocumentクラスを使用してLinearLayoutをPDFに変換しようとしています。レイアウトをViewGroupに展開し、ビューをキャンバスに拡大し、キャンバスに描画します。私はPDFの作成に成功していますが、フォントサイズはPDFのサイズではなく、デバイスの解像度/密度に基づいて描かれています。基本的に、フォントは実際のPDF上で巨大になります。これは、デバイスの画面の大きさと密度に関してビューが描画され、次にキャンバスに変換されたためと考えられます。Androidを使用してテキストサイズを設定するPDFドキュメント/キャンバスサイズに基づいてPDFドキュメントを作成する

私はpxとptで寸法を設定しようとしましたが、正しくできないようです。寸法が非常に小さく(1-2dpまたはpx)設定されている場合、フォントは正しいサイズで表示されますが、これを異なるデバイス間で実行すると問題が発生することがわかります。

最終的なPDFに適切なサイズ(300 dpiで約12ptのフォント)が表示されるように、テキストとビューの寸法を調整する最も良い方法は何ですか?デバイス画面から何らかのディメンションを取り出し、デバイスと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を参照してください。

PrintAttributes.Resolutionには72を使用しますか?

関連する問題