Я использовал приведенный ниже код для отображения параметров печати, но есть также возможность сохранить PDF-документ. Когда я нажимаю на кнопку «Сохранить PDF», она сохраняется с 0 байтами.
Либо мне нужно отключить параметр сохранения PDF, либо сохранить его с правильным bytes
. Первый вариант я не смог найти в документации разработчика Android. Как я могу решить эту проблему?
PrintManager printManager = (PrintManager) PdfActivity.this.getSystemService(Context.PRINT_SERVICE);
try {
String path = printFile.getAbsolutePath();
PrintDocumentAdapter printAdapter = new PdfDocumentAdapter(PdfActivity.this, path);
printManager.print("Document", printAdapter, new PrintAttributes.Builder().build());
}
catch (Exception e) {
Log.e("PDF Error", "erroe-->" + e.getMessage());
}
public class PdfDocumentAdapter extends PrintDocumentAdapter {
Context context = null;
String pathName = "";
public PdfDocumentAdapter(Context ctxt, String pathName) {
context = ctxt;
this.pathName = pathName;
}
@Override
public void onLayout(PrintAttributes printAttributes,
PrintAttributes printAttributes1,
CancellationSignal cancellationSignal,
LayoutResultCallback layoutResultCallback,
Bundle bundle) {
if (cancellationSignal.isCanceled()) {
layoutResultCallback.onLayoutCancelled();
}
else {
PrintDocumentInfo.Builder builder = new PrintDocumentInfo.Builder("file_name.pdf");
builder.setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
.setPageCount(PrintDocumentInfo.PAGE_COUNT_UNKNOWN)
.build();
layoutResultCallback.onLayoutFinished(builder.build(),
!printAttributes1.equals(printAttributes));
}
}
@Override
public void onWrite(PageRange[] pageRanges,
ParcelFileDescriptor parcelFileDescriptor,
CancellationSignal cancellationSignal,
WriteResultCallback writeResultCallback) {
InputStream in = null;
OutputStream out = null;
try {
File file = new File(pathName);
in = new FileInputStream(file);
out = new FileOutputStream(parcelFileDescriptor.getFileDescriptor());
byte[] buf = new byte[16384];
int size;
while ((size = in.read(buf)) >= 0
&& !cancellationSignal.isCanceled()) {
out.write(buf, 0, size);
}
if (cancellationSignal.isCanceled()) {
writeResultCallback.onWriteCancelled();
} else {
writeResultCallback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
}
}
catch (Exception e) {
writeResultCallback.onWriteFailed(e.getMessage());
Log.e("PDF Error", "erroe-->" + e.getMessage());
}
finally {
try {
in.close();
out.close();
} catch (IOException e) {
Log.e("PDF Error", "erroe-->" + e.getMessage());
}
}
}
}