使用基于PDF文档/canvas大小的Android PDFDocument设置文本大小

我想使用Android PDFDocument类将LinearLayout转换为PDF。 我将布局充气到ViewGroup中,将视图缩放到canvas上,然后在canvas上绘制。 我已经成功制作PDF,但字体大小是根据设备分辨率/密度绘制的,而不是PDF大小。 基本上,字体最终在实际的PDF上是巨大的。 我相信这是由于视图是关于设备屏幕的尺寸和密度而绘制的,然后被转换为canvas。

我已经试过在px和pt中设置尺寸,但我似乎无法做到。 当尺寸设置非常小(1-2dp或px)时,字体会显示正确的大小,但是我知道在不同设备上运行时会遇到问题。

缩放文本和查看尺寸的最佳方法是什么,以便它们在最终的PDF上显示适当的大小(在300 dpi时大约12pt字体)? 我是否需要从设备屏幕拉出某种尺寸,然后根据设备和PDFcanvas之间的比率调整所有视图的大小?

我的头痛得从墙上跳下来。

谢谢,安迪

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

Solutions Collecting From Web of "使用基于PDF文档/canvas大小的Android PDFDocument设置文本大小"

我发现这也是我的PDF文档的问题。 因此,我没有在canvas上绘制视图,而是创build了一个TextPaint对象,并使用了方法canvas.drawtext(“string”,x-position,y-position,textPaint)。

尝试canvas.setDensity(72)因为它正在为位图工作? 看到这里 。

或使用72的PrintAttributes.Resolution