我一直在Android上进行PDF打印工作时遇到麻烦.我要做的是在WebView中渲染一些HTML,然后在PDF画布上绘制WebView内容,最后将PDF写入文件.我遇到的问题是,当我绘制到PDF画布时,即使有足够的画布,内容也会被剪裁.我已经尝试使用这种工具来调整画布大小,.clipRect(Rect rect, Op op)但这种工作并不像我喜欢的那样好.
我也不知道如何将HTML px测量值可靠地转换为PDF PostScript 1/72英寸测量值.
这是我正在使用的代码:
@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 = …Run Code Online (Sandbox Code Playgroud) 我使用Android的PdfDocument框架(链接)从我的webview内容创建一个pdf文档.pdf创建得很好,但它只是一页文档.当webview内容很大时,我需要创建一个多页文档.我只需要在页面中分割WEBVIEW内容.我怎样才能实现这一目标?我不想使用iText或任何第三方库.
需要帮助.提前致谢.
// create a new document
PdfDocument document = new PdfDocument();
// create a page description
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(width, height, 1).create();
// start a page
PdfDocument.Page page = document.startPage(pageInfo);
// draw something on the page
View content = myWebview;
content.draw(page.getCanvas());
// finish the page
document.finishPage(page);
FileOutputStream fos;
try {
fos = new FileOutputStream(fileNameWithPath, false);
// write the document content
document.writeTo(fos);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// close …Run Code Online (Sandbox Code Playgroud) 我试过两种方式,
1)创建WebView并加载我的pdf文档,我的应用程序几乎完成了部分打印过程.但在那面临印刷问题.
它没有完整的A4纸张视图.任何人都可以帮助,我使用的代码如下,
public void createWebPagePrint(WebView webView) {
PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE);
PrintDocumentAdapter printAdapter = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
printAdapter = webView.createPrintDocumentAdapter();
String jobName = getString(R.string.app_name) + " Document";
PrintAttributes.Builder builder = null;
builder = new PrintAttributes.Builder();
builder.setMediaSize(PrintAttributes.MediaSize.ISO_A4);
PrintJob printJob = null;
printJob = printManager.print(jobName, printAdapter, builder.build());
if (printJob.isCompleted()) {
Toast.makeText(getApplicationContext(), "Print Complete", Toast.LENGTH_LONG).show();
} else if (printJob.isFailed()) {
Toast.makeText(getApplicationContext(), "Print Failed", Toast.LENGTH_LONG).show();
}
builder.setMediaSize(PrintAttributes.MediaSize.ISO_A4)
.setResolution(new PrintAttributes.Resolution("id", Context.PRINT_SERVICE, 1024, 720))
.setColorMode(PrintAttributes.COLOR_MODE_COLOR).
setMinMargins(PrintAttributes.Margins.NO_MARGINS).build();
}
}
Run Code Online (Sandbox Code Playgroud)
注意:
https://developer.android.com/training/printing/html-docs.html