react-native-print icon indicating copy to clipboard operation
react-native-print copied to clipboard

Android: Fix inconsistent CSS font sizes based on device font size settings.

Open shanebrowncs opened this issue 10 months ago • 0 comments

Hi!

I recently ran into an issue where users were reporting differing print sizes for the text included in exported reports from my app. Upon investigating I found out that when users have a different font-size set within the android settings, that it affects the CSS font sizes displayed in the printed document.

I set up a basic print with the following contents:

await RNPrint.print({
  html: '<html><body><h1 style="font-size: 20pt;">Hello world</body></html>',
});

Small system font:

Large system font:

The same markup and CSS is being used for both examples. I found this has to do with the default "text zoom" of the WebView. It is automatically set according to the system font settings. I added a test print Log.i("RNPrint", "TEXT ZOOM LEVEL" + webView.getSettings().getTextZoom()); after the WebView is created, which yields the following when changing font sizes and viewing logcat:

04-28 12:47:21.770 22002 22002 I RNPrint : TEXT ZOOM LEVEL: 100
04-28 12:48:25.260 22839 22839 I RNPrint : TEXT ZOOM LEVEL: 200

To fix this I added an explicit call to setTextZoom with a value of 100 (one hundred percent) which will help ensure that regardless of the user's system font settings the size of text on printed documents remains consistent.

If you could please let me know if you are open to merging this PR, have questions, or would like to see further changes, I would greatly appreciate it.

Thank you!

shanebrowncs avatar Apr 28 '24 19:04 shanebrowncs