PDF打印视图问题

2023-11-25

我尝试过两种方式

1)正在创建一个WebView并加载我的pdf文档,我的应用程序几乎完成了打印过程的一部分。但在这方面我面临着打印问题。

After printing am getting like this

它没有完整的 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();
    }


}

Note:

https://developer.android.com/training/printing/html-docs.html

  • 有时加载 pdf 时不显示。

2)我尝试使用 pdf view lib ,

 compile 'com.github.barteksc:android-pdf-viewer:2.8.2'

But that time am getting better view compared to webview. The problem is only visible view is drawing on canvas.The print view is not clear.Its not readable.I have given the page count, So according to the page count its repeating the pages but print view is same as in first page.The following view am getting while printing. enter image description here

这是我的示例代码,

code

如果有人知道请帮助我。


上述过程非常困难。即使我没有找到解决方案。之后我想出了一个解决方案,它对我来说非常有效。 1)要查看PDF文件,无需加载webview或外部pdf库。只需下载pdf文件并使用默认pdf查看器查看它。我使用的以下代码,

要下载文件,

    import android.app.Activity;
import android.util.Log;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class FileDownloader {
    private static final int  MEGABYTE = 1024 * 1024;

    public static void downloadFile(String fileUrl, File directory, Activity activity){
        try {

            URL url = new URL(fileUrl);
            HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
            //urlConnection.setRequestMethod("GET");
            //urlConnection.setDoOutput(true);
            urlConnection.connect();
            InputStream inputStream = urlConnection.getInputStream();
            FileOutputStream fileOutputStream = new FileOutputStream(directory);
            int totalSize = urlConnection.getContentLength();

            byte[] buffer = new byte[MEGABYTE];
            int bufferLength = 0;
            while((bufferLength = inputStream.read(buffer))>0 ){
                fileOutputStream.write(buffer, 0, bufferLength);
            }
            fileOutputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

private class DownloadFile extends AsyncTask<String, Void, Void> {

    @Override
    protected Void doInBackground(String... strings) {
        String fileUrl = strings[0];
        String fileName = strings[1];
        String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
        File folder = new File(extStorageDirectory, "Test");
        folder.mkdir();
        File pdfFile = new File(folder, fileName);
        try {
            pdfFile.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        FileDownloader.downloadFile(fileUrl, pdfFile,InventoryStockActivity.this);
        return null;
    }
}
public void download(String viewUrl) {
    new DownloadFile().execute(viewUrl, "Test.pdf");
    Log.d("Download complete", "----------");
}

查看 pdf 文件;

public void view() {
    File pdfFile = new File(Environment.getExternalStorageDirectory() + "/Test/" + "Test.pdf");
    Uri path = Uri.fromFile(pdfFile);
    Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
    pdfIntent.setDataAndType(path, "application/pdf");
    pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    try {
        startActivity(pdfIntent);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(InventoryStockActivity.this, "No Application available to view PDF", Toast.LENGTH_SHORT).show();
    }
}

明显地,

  <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

当它打开默认的 pdf 查看器时,将会出现打印菜单。只需从那里打印即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PDF打印视图问题 的相关文章

  • Android GooglePlayServicesUtil.getErrorDialog() 不显示对话框

    我正在尝试检查是否可用Google Play 服务 APK在使用它之前 我有一个 软件包已过期的设备 日志显示 Google Play 服务已过时 需要 3225100 但找到 3136134 下面的代码将处理这种情况并显示一个对话框 提示
  • FireStore 日期查询未按预期工作

    我有一个有日期对象的文档 初始化 Firestore 的代码 FirebaseFirestore fireStore FirebaseFirestore getInstance FirebaseFirestoreSettings setti
  • 使用 Firebase 数据填充 Android spinner

    我在填充时遇到一些问题propertyAddress从我的properties桌子到我的旋转器MaintenanceActivity 问题本身不在于代码 而在于可以使用 Firebase 控制台修改的数据库规则 目前 我的规则是这样的 ru
  • 以编程方式设置 windowlightstatusbar 属性

    如您所知 我们可以设置windowLightStatusBar通过以下代码从 xml 中获取
  • 带图标的 Android 选项菜单

    如何使用选项菜单显示图标 我尝试了以下代码 但我的选项菜单没有图像图标 我正在使用 android 版本 4 0 来开发应用程序 Java代码 public boolean onCreateOptionsMenu Menu menu sup
  • Android NDK:断言失败:TARGET_PLATFORM 未定义

    使用 NDK r5b 时 当我使用以下命令在 jni 目录中进行构建时 NDK DIR ndk build 效果很好 但是当我切换到 r6b 只需以不同的方式设置 NDK DIR 并运行相同的命令时 我得到 usr local androi
  • 如何打印JTable中选定的行

    我尝试使用主 JTable 的选定行和相同的头和单元格渲染来创建临时 JTable 但是当我尝试打印它时 我只得到一个带有线边框的空矩形 我在如何打印 JTable 的特定行 列 https stackoverflow com questi
  • MissingDimensionStrategy 无处不在 - 有没有更好的方法?

    我有一个图书馆项目 让我们称之为lib1有定制的flavorDimensions指定的 更准确地说有buld尺寸与实际口味full and production 该库被另一个库项目使用 lib2 没有自定义flavorDimensions指
  • 即使具有用户权限,也无法在外部存储上保存文件 [Android]

    我正在 Android 上开发一个用于图像处理的应用程序 但我一直在编写图像保存代码 这是我使用的方法 private void saveImageToExternalStorage Bitmap finalBitmap String ro
  • 文本末尾有额外的换行符

    使用此方法设置文本后 我似乎得到了一些额外的换行符TextView message setText Html fromHtml message 我怎样才能删除这些 它们导致我的布局扭曲 因为它在输出中添加了两条额外的行 该字符串已通过以下方
  • 使用 OpenWeatherMap API 密钥

    我得到异常 http api openweathermap org data 2 5 weather q 悉尼 http api openweathermap org data 2 5 weather q Sydney 有人可以帮助如何使用
  • 依赖于多个模块的 Gradle Android 单元测试

    我正在开发一个具有多个模块的项目 我们正在为应用程序编写 junit 测试用例 并且我们正在使用以下异常 开始试运行 java lang RuntimeException java lang ClassNotFoundException 下
  • 在 Cordova / PhoneGap 中生成 iOS 和 Android 图标

    我有一个新创建的 Cordova 项目 其中包含以下内容config xml设置 使用来自http docs phonegap com en edge config ref images md html http docs phonegap
  • 如何在列表视图中选择时启用视频序列自动播放?

    大家好 有人可以与我分享一下我如何编写我的 viewvideo java 类 以便它允许自动播放视频功能 自动排序在列表视图中播放所选视频的任务 从当前位置到最新录制的视频 按顺序直到最新的视频播放完毕 这类似于 YouTube 自动播放功
  • 在Android项目中引用(纯java)项目(找不到类)

    我试图在我的 Android 项目中引用一个纯 java 项目 gt Java 项目有一大堆我需要使用的类 哦 正如第一个回复所指出的 我正在使用 eclipse 是的 唯一的问题是 我总是找不到类 XXX 从方法 com example
  • ListPreferences 的异常

    这是我的第一个 Android 应用程序 在尝试使用 ListPreference 时遇到了异常 应用程序与首选项一起加载 但是当我触摸 ListPreference 条目时 应用程序 意外停止 设置 java public class S
  • 使用 Ant 构建 Android 库项目

    我在使用 ant 构建 Android 库项目时遇到问题 当我尝试跑步时ant release 它说Target release does not exist in the project MyProject 然后我假设库可能无法通过发布
  • 我可以像 justify 这样设置 Textview 的属性吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想设置 TextView 属性 如右对齐 左对齐 对齐 不 你不能设置像重力这样的属性 但您仍然可以通过采用 web 视图而不是文本视图
  • 片段已添加 IllegalStateException

    我在容器 Activity 上使用此方法来显示 BFrag public void showBFrag Start a new FragmentTransaction FragmentTransaction fragmentTransact
  • 如何在Android手机上而不是模拟器上运行或调试?

    Android 模拟器速度太慢 无法测试运行的应用程序 有没有办法使用 IDE 而不是模拟器在真实手机上调试 运行应用程序 通常 您可以在手机上打开 USB 调试 然后通过 USB 将其连接到 PC 然后 手机将以与模拟器相同的方式出现在

随机推荐

  • 如何使用java检查电子邮件ID是否存在于域中而不发送任何邮件

    有什么方法可以验证电子邮件 ID 是否存在于域中 我具有以下功能 它仅检查有效的域 但我需要检查域中的有效电子邮件地址而不发送任何邮件 public boolean isValidEmailAddress String email bool
  • 如何在没有 .d.ts 的情况下使用 Typescript 的外部非 TypeScript 库?

    我已经在我的 html 文件中定义了这些 然后在 test js 中 var myTree Tree tree 但 Typescript 错误提示 找不到名称 树 我也尝试编译 module amd并放置import Tree requir
  • 什么是“本地”和“字面”关键字

    我看到很多次使用native and literalsC 文章中的 关键字 他们的意思是什么 例子 string Empty article Empty 常量保存空字符串值 我们需要调用 字符串构造函数 以便编译器不会将其标记为litera
  • Android - 使用标志活动单击推送通知后打开或重新启动应用程序

    我在 Android 中使用推送通知 当我收到推送通知时 我想打开应用程序 如果它仍在运行 否则它应该打开它的新实例 我在用 PendingIntent contentIntent PendingIntent getActivity thi
  • 无法在 Android 上进行反向 DNS 查找

    我有一台通过 IP 地址连接到 Wifi 网络的 Android 设备 我在我的 Linux 计算机上对该 IP 地址进行了 NS 查找 并验证了该 IP 地址是否有相应的主机名 我有一段 Java 代码 当它在我的 Windows PC
  • java.lang.Exception 没有可运行的方法 junit

    我有一个套件 在其中添加了测试类 我正在使用 Surefire 来运行我的 JUnit 我的测试类以 test 结尾 并且方法具有 test 注释 如何解决这个问题 以下是针对这个不完整问题的各种建议 对于那些不幸被谷歌带到这里寻找这个常见
  • ssh2_exec不执行简单命令

    ssh exec 拒绝在 Windows 中执行命令 这是我的代码 它向我显示以下警告 Unable to request a channel from remote host in 首先 您不太可能使用以下命令连接到 Windows 服务
  • 透明 .NET 表单中的抗锯齿文本

    我有一个 C 应用程序 它显示当前时间 透明的 NET 表单 该表单没有控件 也没有边框 其属性 TransparencyKey 设置为 Form 的背景颜色 浅灰色 使其透明 所以用户只能看到文本 当前时间 文本在 PaintEventH
  • Java8 中的 Files.lines 跳过断行

    我正在使用 Files lines 读取一个非常大 500mb 的文件 它读取文件的一部分 但在某些时候它会因 java io UncheckedIOException java nio charset MalformedInputExce
  • 在 PHP 和 MySQL 中创建不带 HTTPS 的安全登录脚本

    Question Is 维基百科上的这篇文章在 PHP 和 MySQL 中创建安全登录脚本的好参考 在警告部分 作者强调该代码只能与 HTTPS 一起使用 我无法使用 HTTPS 但需要在 PHP 和 MySQL 中实现相对安全的登录脚本
  • C# 事件删除语法

    我对 C 中删除事件处理程序的语法感到困惑 Something new MyHandler HandleSomething add Something new MyHandler HandleSomething remove new 在每一
  • 两个 PCI 设备之间直接通信

    我有一个 NIC 卡和一个 HDD 它们都连接在 Linux 机器的 PCIe 插槽上 理想情况下 我希望将传入数据包传输到 HDD 而不涉及 CPU 或最少涉及 CPU 是否可以像这样沿着 PCI 总线建立直接通信 有谁知道要阅读什么内容
  • 从命令行运行 JUnit 测试套件

    如何从命令行运行 Junit 4 8 1 测试套件 另外我想使用 JUnit 4 8 引入的类别 有没有办法 我可以从命令行指定我想要运行的类别 Using java run JUnit核心类 另见here 类别应该与测试套件一起使用 Ru
  • JavaScript 中的 URL 帮助器

    我正在使用 jQuery Lightbox 作为我的图片库 按钮图像的 URL 是 Content Lightbox lightbox btn next gif 如果我的网址是 localhost Something1 Somtehing2
  • Visual Studio 2012 中缺少 Visual C++ 的先决条件

    我最近安装了vs2012我已经更新了我的 ClickOnce 应用程序 更准确地说 我第一次打开我的C project 这取决于我的主要 c 项目 我还没有更新它 一切都工作正常 VS 2012仍然能够看到 Visual C 2010 先决
  • 如何在java中打印给定整数a = 1234的最后两位数字

    如果我给出像 a 1234 这样的值 我只想打印最后两位数字 34 任何人都可以给我解决这个问题 int a 1234 System out print a number 100结果是最后 2 位数字 See ideone演示
  • 如果不向数据库(例如 SQL Server)提交事务会发生什么?

    假设我有一个查询 begin tran some other sql code 然后我忘记提交或回滚 如果另一个客户端尝试执行查询 会发生什么 只要你不COMMIT or ROLLBACK一个事务 它仍然在 运行 并且可能持有锁 如果您的客
  • FTP 协议中有类似 HTTP Range 标头的内容吗?

    假设我只想通过 FTP 传输文件的一部分 是否可以使用标准 FTP 协议 在 HTTP 中我可以使用范围标头在请求中指定远程资源的数据范围 如果是 1mb 文件 我可以要求 600k 到 700k 之间的字节 FTP中有类似的东西吗 我在读
  • 实体框架 4 - ApplyCurrentValues 与 ObjectStateManager.ChangeObjectState

    我们有一个 WCF 服务 其更新方法可以更新数据库中的客户 此方法从客户端获取一个分离的实体 void UpdtaeCustomer Customer detachedCustomer 我们想出了两种编写此方法的方法 1 context C
  • PDF打印视图问题

    我尝试过两种方式 1 正在创建一个WebView并加载我的pdf文档 我的应用程序几乎完成了打印过程的一部分 但在这方面我面临着打印问题 它没有完整的 A4 表格视图 任何人都可以帮忙吗 我使用了以下代码 public void creat