如何使用Android 4.4打印框架打印已下载的PDF?
我查看了开发人员文档.但没有运气.任何例子都会有所帮助
在我的项目中需要通过蓝牙打印机打印Pdf文件.我写了一个代码,通过pdf打印它适用于文本,
但我想在蓝牙打印机上打印PDF文件.
我的java代码打印文本
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv= (ListView) findViewById(R.id.listView1);
// listdata(lv);
try {
// we are goin to have three buttons for specific functions
Button openButton = (Button) findViewById(R.id.open);
Button sendButton = (Button) findViewById(R.id.send);
Button closeButton = (Button) findViewById(R.id.close);
Button btnco= (Button) findViewById(R.id.btnconnect);
btnco.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
findBT();
openBT();
} catch (Exception ex) {
}
}
});
myLabel = (TextView) findViewById(R.id.label);
myTextbox = …Run Code Online (Sandbox Code Playgroud) 我必须在 Android 4.4 中开发打印功能我想开发以下功能: - 使用 Android 4.4 打印框架 - 从 SD 卡打印 pdf(无需重新生成) - 配置如:份数、页面选择
我知道这在 Android 4.4 中是可能的。但我想以编程方式从 SD 卡打印 pdf。
我正在开发一个需要打印的自助服务终端应用程序.我有打印功能,但问题是它显示了一个对话框,作为一个自助服务终端应用程序,我们需要保持简单并限制用户可以做什么.
有没有办法打印而不显示对话框?
我不在乎它是否打印到"默认"打印机或者是否需要将参数传递给它.
我用这个作为参考:http://developer.android.com/training/printing/html-docs.html
我正在 android 上开发打印服务。可用打印机列表经常更改。但是,我无法找到删除不存在的打印机(即在某些时候可用的打印机)的方法。这些打印机在我的测试设备上显示为灰色。
我可以在 PrinterDiscoverySession 的 onStartPrinterDiscovery() 和 onValidatePrinters() 方法中看到“僵尸”打印机,但不知道如何摆脱它们。使用现有打印机调用会话的 addPrinters() 或使用不存在的打印机调用 removePrinters() 没有帮助。
我很感激任何建议。谢谢。
我正在研究在android上打印webview。我遇到了一个非法状态异常的问题。仅当我非常快地两次调用“打印”两次时,才会发生这种情况。崩溃也不在我的调用栈中,因此使用try-catch无效。
注意:我正在通过反射进行调用(如何通过KitKat 4.4打印API通过反射来打印WebView?),但是我很确定使用API会对我做同样的事情(但我最终会检查)(编辑:刚刚检查过。制作了一个带有Web视图和按钮的简单应用程序。当我两次快速单击按钮时,整个应用程序崩溃了。)
堆栈跟踪:
java.lang.IllegalStateException: printing is already pending
at com.android.org.chromium.android_webview.AwPdfExporter.exportToPdf(AwPdfExporter.java:51)
at com.android.org.chromium.android_webview.AwPrintDocumentAdapter.exportPdf(AwPrintDocumentAdapter.java:100)
at com.android.org.chromium.android_webview.AwPrintDocumentAdapter.onWrite(AwPrintDocumentAdapter.java:81)
at android.print.PrintManager$PrintDocumentAdapterDelegate$MyHandler.handleMessage(PrintManager.java:609)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4998)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
问题是:如何避免这种情况?
编辑:这是我的测试应用程序。如果在对话框出现之前单击两次按钮,则会出现上面显示的异常。在不使用“ hacky”超时的情况下如何避免这种情况。
MainActivity.java:
package com.example.test;
import android.os.Bundle;
import android.print.PrintAttributes;
import android.print.PrintDocumentAdapter;
import android.print.PrintManager;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button …Run Code Online (Sandbox Code Playgroud) java printing android android-4.4-kitkat android-print-framework
我想请求帮助.我想要打印/创建pdf文档.我可以创建一个pdf页面并通过画布将数据写入此页面.问题是我不知道如何创建另一个pdf页面并继续写入第二页.如果有人有任何经验,我会非常乐于助人,我会花很多时间来做这件事.
我用这个:https://developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html
我的部分代码在那里:
private void doPrint(int _docNumber){
docNumber = _docNumber;
//get Printmanager instance
PrintManager printManager = (PrintManager)this.getSystemService(Context.PRINT_SERVICE);
// Set job name, which will be displayed in the print queue
String jobName = getString(R.string.app_name) + " dokument";
// Start a print job, passing in a PrintDocumentAdapter implementation
// to handle the generation of a print document
printManager.print(jobName, new MyPrintDocAdapter(), null);
Toast.makeText(getBaseContext(), "Príprava na tla?...", Toast.LENGTH_SHORT).show();
}
public class MyPrintDocAdapter extends PrintDocumentAdapter
{
Context context;
private int pageHeight;
private …Run Code Online (Sandbox Code Playgroud) 当用户选择活动中的共享按钮时,我想夸大布局,填充它,然后使用新的打印API将该布局写入pdf.
在我的片段中,我有
@TargetApi(Build.VERSION_CODES.KITKAT)
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_item_share_context:
LayoutInflator inflator = getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View container = inflator.inflate(R.layout.person_share, null, false);
TextView name = (TextView)topContainer.findViewById(R.id.person_name);
name.setText("Test Name");
PdfDocument document = new PdfDocument();
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(612, 792, 1).create()
PdfDocument.Page page = document.startPage(pageInfo)
container.draw(page.getCanvas());
document.finishPage(page)
// write pdf
...
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这会输出一个空白的pdf文档.但是,当我使用屏幕上已存在的视图(在onCreateView(..)中膨胀)时,它会按预期显示在pdf中.
我很感激任何帮助.
我打算使用内置的android pdf库.在我的应用程序中,我需要显示一个可能包含多个页面的pdf报告.用户应该能够打印这些页面.使用PrintDocumentAdapter进行打印看起来非常简单,但对我来说不清楚的是创建pdf的最佳方法是什么.我知道您可以使用View/canvas生成PdfDocument,或者在绘制线条,文本,绘画等时采用更"低级"的方法.
我看到三种可能性:
为每个页面创建一个视图.用户可以根据需要在视图之间导航并进行打印.但是我不清楚如何为每个页面/视图生成pdf.我的意思是,如果我正在查看页面/视图1,是的,我可以轻松地创建一个pdf,但其他页面呢?是的,我可以在内存中有这个,但我发现如果它们没有在屏幕上显示,它们会创建空的pdf.我不想让用户单独打印每个页面.
创建pdf文档(低级方法),集成pdf阅读器,并从那里显示/打印pdf.
为用户可以浏览的每个页面创建一个视图.调用print选项时,再次生成pdf文档(低级方法)
显然,选项1是首选方法,但我不清楚如何做到这一点.当然,我可能会遗漏一些东西,所以任何帮助将不胜感激!
我正在使用Android应用程序,并且想生成和打印PDF。但是我遇到了麻烦。我需要生成PDF80mm的width,并且height可能会有所不同。
我正在尝试:
public class PDFGenerator implements Runnable {
private Context ctx;
private View view;
private Intent mShareIntent;
private OutputStream os;
public PDFGenerator(Context ctx, View view) {
this.ctx = ctx;
this.view = view;
makeAndSharePDF();
}
public void makeAndSharePDF() {
new Thread(this).start();
}
@TargetApi(Build.VERSION_CODES.KITKAT)
public void run() {
PrintAttributes printAttrs = new PrintAttributes.Builder().
setColorMode(PrintAttributes.COLOR_MODE_MONOCHROME).
setMediaSize(PrintAttributes.MediaSize.ISO_C7).
setResolution(new PrintAttributes.Resolution("zooey", ctx.PRINT_SERVICE, 500, 500)).
setMinMargins(PrintAttributes.Margins.NO_MARGINS).
build();
PdfDocument document = new PrintedPdfDocument(ctx, printAttrs);
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(view.getWidth(), view.getHeight(), 1).create();
PdfDocument.Page …Run Code Online (Sandbox Code Playgroud)