gpt4 book ai didi

android - 我想在没有用户交互的情况下自动打印

转载 作者:行者123 更新时间:2023-11-29 14:12:34 25 4
gpt4 key购买 nike

当用户点击 UI 中的按钮时,PrintManager 生成要打印的文档。然后用户单击打印图标以推送打印命令。

以上部分完成。但要求是:我想消除用户必须单击打印图标(图片中显示的打印图标,由 PrintDocumentAdapter 生成)并自动生成/打印文档。

再次:我已经实现了打印功能,我只想删除用户交互。当生成下图时,打印命令会自动执行,无需用户点击打印图标。

enter image description here

最佳答案

不要使用 PrintManager,您可以使用 android.print 包中的类 PdfPrint.java 进行打印。

将这段代码放在 java/android/print 中(在你的包之外)

package android.print;

import android.os.CancellationSignal;
import android.os.ParcelFileDescriptor;
import android.util.Log;

import java.io.File;

public class PdfPrint {

private static final String TAG = PdfPrint.class.getSimpleName();
private final PrintAttributes printAttributes;

public PdfPrint(PrintAttributes printAttributes) {
this.printAttributes = printAttributes;
}

public void print(final PrintDocumentAdapter printAdapter, final File path, final String fileName) {
printAdapter.onLayout(null, printAttributes, null, new PrintDocumentAdapter.LayoutResultCallback() {
@Override
public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {
printAdapter.onWrite(new PageRange[]{PageRange.ALL_PAGES}, getOutputFile(path, fileName), new CancellationSignal(), new PrintDocumentAdapter.WriteResultCallback() {
@Override
public void onWriteFinished(PageRange[] pages) {
super.onWriteFinished(pages);
}
});
}
}, null);
}

private ParcelFileDescriptor getOutputFile(File path, String fileName) {
if (!path.exists()) {
path.mkdirs();
}
File file = new File(path, fileName);
try {
file.createNewFile();
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
} catch (Exception e) {
Log.e(TAG, "Failed to open ParcelFileDescriptor", e);
}
return null;
}
}

你可以使用这样的代码(从 webview 打印)

private fun createWebPrintJob(webView: WebView, date: Long) {
try {
val jobName = getString(R.string.app_name) + " Document"
val attributes = PrintAttributes.Builder()
.setMediaSize(PrintAttributes.MediaSize.NA_LEGAL)
.setResolution(PrintAttributes.Resolution("pdf", "pdf", 600, 600))
.setMinMargins(PrintAttributes.Margins.NO_MARGINS).build()
val path =
Environment.getExternalStoragePublicDirectory("/pdf_output")

val pdfPrint = PdfPrint(attributes)
pdfPrint.print(
webView.createPrintDocumentAdapter(jobName),
path,
"output_$date.pdf"
)
Log.i("pdf", "pdf created")
} catch (e: Exception) {
Log.e("pdf", " pdf failed e.localizedMessage")
}
}

关于android - 我想在没有用户交互的情况下自动打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48578728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com