Mam problemy z drukowaniem plików PDF w systemie Android. Próbuję renderować trochę HTML w WebView, następnie narysować zawartość WebView na płótnie PDF i ostatecznie zapisać plik PDF do pliku. Problem, który mam, polega na tym, że kiedy rysuję na płótnie PDF, zawartość jest przycinana, nawet jeśli pozostało dużo płótna. Próbowałem zmienić rozmiar płótna za pomocą .clipRect(Rect rect, Op op)
i ten rodzaj działał, ale nie tak dobrze, jak bym chciał.Android - rysowanie na płótnie PDF z WebView
Nie mam również pojęcia, w jaki sposób mogę niezawodnie przetłumaczyć pomiary HTML px na PDF PostScript o wymiarach 1/72-cala.
Oto kod używam:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView wv = (WebView) this.findViewById(R.id.webView1);
wv.loadUrl("file:///android_asset/temp.html");
}
public void button1onClick(View v)
{
//Create PDF document
PdfDocument doc = new PdfDocument();
//Create A4 sized PDF page
PageInfo pageInfo = new PageInfo.Builder(595,842,1).create();
Page page = doc.startPage(pageInfo);
WebView wv = (WebView) this.findViewById(R.id.webView1);
page.getCanvas().setDensity(200);
//Draw the webview to the canvas
wv.draw(page.getCanvas());
doc.finishPage(page);
try
{
//Create the PDF file
File root = Environment.getExternalStorageDirectory();
File file = new File(root,"webview.pdf");
FileOutputStream out = new FileOutputStream(file);
doc.writeTo(out);
out.close();
doc.close();
//Open the PDF
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
}
catch(Exception e)
{
throw new RuntimeException("Error generating file", e);
}
}
zasadzie tylko program wczytuje plik temp.html do Webview i sprawia mi przycisk, który można używać do tworzenia PDF.
Plik temp.html wygląda następująco:
<html>
<head>
<style>
div.border
{
width:600px;
height:800px;
border:1px solid black;
}
</style>
</head>
<body>
<div class="border"></div>
</body>
A oto wynik z dodatkiem ręcznie czarną obwódką, aby pokazać skalę:
Chciałbym naprawdę docenić kilka wskazówek, w jaki sposób przekonwertować HTML na PDF niezawodnie na Androida bez korzystania z bibliotek, które wymagają licencji do użytku komercyjnego.
spróbuj https://developer.android.com/reference/android/print/pdf/ PrintedPdfDocument.html. Nie jestem pewien, czy to jest –