Я хочу напечатать PDF-файл в формате Android на принтерах Bluetooth. Поскольку у меня недостаточно времени для разработки драйвера Bluetooth или использования специального SDK для каждого принтера, я купил программное обеспечение третьей стороны (приложение, € 6), способное обрабатывать соединение Bluetooth для большого количества принтеров Bluetooth.
Для создания PDF-файла для печати я использую веб-просмотр:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xxxxx);
WebView.enableSlowWholeDocumentDraw();
WebView oWebView = findViewById(R.id.xxxxx);
oWebView.setPadding(0, 0, 0, 0);
oWebView.setInitialScale(1);
oWebView.getSettings().setUseWideViewPort(true);
oWebView.getSettings().setJavaScriptEnabled(false);
oWebView.getSettings().setLoadWithOverviewMode(false);
oWebView.setScrollbarFadingEnabled(false);
oWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
String htmlTest = "<html>" +
"<head>" +
"<meta HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=utf-8\" /><title>" +
"</title>" +
"<style type=\"text/css\">" +
" @page {" +
" margin-left: 0px;" +
" margin-right: 0px;" +
" margin-top: 0px;" +
" margin-bottom: 0px;" +
" }" +
" </style></head><body>" +
" <h1>VERITAS VOS LIBERABIT</h1>" +
" </body>" +
"</html>";
oWebView.loadData(htmlTest, "text/html", "utf-8");
print(oWebView);
}
И метод печати:
private void print(WebView oWeView) {
PrintDocumentAdapter doc = oWeView.createPrintDocumentAdapter("printTest.pdf");
PrintAttributes attributes = new PrintAttributes.Builder()
.setMediaSize(PrintAttributes.MediaSize.ISO_A4)
.setResolution(new PrintAttributes.Resolution("pdf", "pdf", 600, 600))
.setMinMargins(PrintAttributes.Margins.NO_MARGINS).build();
// Get a PrintManager instance
PrintManager printManager = (PrintManager) this.getSystemService(Context.PRINT_SERVICE);
if (printManager != null) {
printManager.print("Document", doc, attributes);
}
}
После использования следующего кода для печати и заботы о При печати используйте те же параметры печати, что и в моей третьей программе. Я вижу, что напечатанные PDF-файлы имеют разные размеры при печати на разных устройствах. (moto e5, samsung A10).
In order to find out which part its not working as I expect I want to save the pdfs to disk and compare them. Now I need the following class to do so: (NOTE: be careful to put this class in the right package: android.print because otherwise compile errors occur.)
package android.print; //
And my save pdf file method:
private void printAsPdfFile(WebView webView) {
String jobName = getString(R.string.app_name) + " Document";
PrintAttributes attributes = new PrintAttributes.Builder()
.setMediaSize(PrintAttributes.MediaSize.ISO_A4)
.setResolution(new PrintAttributes.Resolution("pdf", "pdf", 600, 600))
.setMinMargins(PrintAttributes.Margins.NO_MARGINS).build();
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + "/PDFTest/");
PdfPrint pdfPrint = new PdfPrint(attributes);
pdfPrint.print(webView.createPrintDocumentAdapter(jobName), path, "output_" + System.currentTimeMillis() + ".pdf");
}
Но оказывается, что размеры тоже разные. Как сделать так, чтобы элемент управления webview генерировал одинаковый размер на разных устройствах?
Заранее спасибо.