没有合适的资源?快使用搜索试试~ 我知道了~
1.网上找了好多没有显示出来效果不错,后来看到调用手机打印预览,看了效果还不错,就打算使用系统打印服务预览下载 2.‘webView.createPrintDocumentAdapter()’得到打印的PrintDocumentAdapter有了该类就可以使用onWrite方法写入制定的文件,但是这个方法需要传入回调这个悲剧的是这个回调方法是hiden的我们没办法调用 3,字怎么解决呢,有连个方法 3.1 使用此开源库替换自己的sdk 中的android.jar文件,就可以使用了 https://github.com/anggrayudi/android-hidden-api 3.2 使用
资源推荐
资源详情
资源评论
Android webview转转PDF的方法示例的方法示例
1.网上找了好多没有显示出来效果不错,后来看到调用手机打印预览,看了效果还不错,就打算使用系统打印服务预览下载
2.‘webView.createPrintDocumentAdapter()’得到打印的PrintDocumentAdapter有了该类就可以使用onWrite方法写入制定的文
件,但是这个方法需要传入回调这个悲剧的是这个回调方法是hiden的我们没办法调用
3,字怎么解决呢,有连个方法
3.1 使用此开源库替换自己的sdk 中的android.jar文件,就可以使用了
https://github.com/anggrayudi/android-hidden-api
3.2 使用dexmaker生成动态代理代理PrintDocumentAdapter.WriteResultCallback和
PrintDocumentAdapter.LayoutResultCallback方法依赖地址
compile 'org.droidparts.dexmaker:dexmaker-mockito:1.5'
4.完整代码如下:
File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM + "/PDFTest.pdf");
File dexCacheFile;
// 获取需要打印的webview适配器
PrintDocumentAdapter printAdapter;
PageRange[] ranges;
ParcelFileDescriptor descriptor;
/**
a* @param webView
*/
private void printPDFFile(WebView webView) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
/**
* android 5.0之后,出于对动态注入字节码安全性德考虑,已经不允许随意指定字节码的保存路径了,需要放在应用自己的包
名文件夹下。
*/
//新的创建DexMaker缓存目录的方式,直接通过context获取路径
dexCacheFile = getDir("dex", 0);
if (!dexCacheFile.exists()) {
dexCacheFile.mkdir();
}
try {
//创建待写入的PDF文件,pdfFilePath为自行指定的PDF文件路径
if (file.exists()) {
file.delete();
}
file.createNewFile();
descriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
// 设置打印参数
PrintAttributes attributes = new PrintAttributes.Builder()
.setMediaSize(PrintAttributes.MediaSize.ISO_A4)
.setResolution(new PrintAttributes.Resolution("id", Context.PRINT_SERVICE, 300, 300))
.setColorMode(PrintAttributes.COLOR_MODE_COLOR)
.setMinMargins(PrintAttributes.Margins.NO_MARGINS)
.build();
//打印所有界面
ranges = new PageRange[]{PageRange.ALL_PAGES};
printAdapter = webView.createPrintDocumentAdapter();
// 开始打印
printAdapter.onStart();
printAdapter.onLayout(attributes, attributes, new CancellationSignal(), getLayoutResultCallback(new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getName().equals("onLayoutFinished")) {
// 监听到内部调用了onLayoutFinished()方法,即打印成功
onLayoutSuccess();
资源评论
weixin_38678057
- 粉丝: 6
- 资源: 870
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功