#java #android #pdf #printing
Вопрос:
Я тестирую функцию PDF-принтера на Android, мне удалось распечатать, следуя примеру на официальном сайте Android.
Но я хочу избавиться от функции сохранения PDF. Я просматриваю библиотеку, но не знаю, где я могу удалить эту функцию.
пожалуйста, скажите мне, как удалить функцию сохранения pdf
Ниже приведен мой исходный код
Пользовательская печать (основная)
package com.android.customprint; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.content.Context; import android.print.PrintManager; import java.io.FileOutputStream; import java.io.IOException; public class CustomPrintActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void printDocument(View view) { PrintManager printManager = (PrintManager) this.getSystemService(Context.PRINT_SERVICE); String jobName = this.getString(R.string.app_name) " Document"; printManager.print(jobName, new MyPrintDocumentAdapter(this), null); } }
MyPrintDocumentAdapter (Implement)
package com.android.customprint; import android.os.Bundle; import android.os.CancellationSignal; import android.os.ParcelFileDescriptor; import android.print.PageRange; import android.print.PrintAttributes; import android.print.PrintDocumentAdapter; import android.content.Context; import android.print.PrintDocumentInfo; import android.print.pdf.PrintedPdfDocument; import android.graphics.pdf.PdfDocument; import android.graphics.pdf.PdfDocument.PageInfo; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import java.io.FileOutputStream; import java.io.IOException; public class MyPrintDocumentAdapter extends PrintDocumentAdapter { Context context; private int nPageHeight; private int nPageWidth; public PdfDocument myPdfDocument; public int nTotalPages = 2; public MyPrintDocumentAdapter(Context context) { this.context = context; } @Override public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle metadata) { myPdfDocument = new PrintedPdfDocument(context, newAttributes); nPageHeight = newAttributes.getMediaSize().getHeightMils()/1000 * 72; nPageWidth = newAttributes.getMediaSize().getWidthMils()/1000 * 72; if(cancellationSignal.isCanceled()) { callback.onLayoutCancelled(); return; } if(nTotalPages gt; 0) { PrintDocumentInfo.Builder builder = new PrintDocumentInfo.Builder("print_out.pdf") .setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT) .setPageCount(nTotalPages); PrintDocumentInfo info = builder.build(); callback.onLayoutFinished(info, true); }else{ callback.onLayoutFailed("Page Count is Zero"); } } @Override public void onWrite(final PageRange[] pageRanges, final ParcelFileDescriptor destination, final CancellationSignal cancellationSignal, final WriteResultCallback callback) { for(int nIndex=0; nIndexlt;nTotalPages; nIndex ) { if(pageInRange(pageRanges, nIndex)) { PageInfo newPage = new PdfDocument.PageInfo.Builder(nPageWidth, nPageHeight, nIndex).create(); PdfDocument.Page page = myPdfDocument.startPage(newPage); if(cancellationSignal.isCanceled()) { callback.onWriteCancelled(); myPdfDocument.close(); myPdfDocument = null; return; } drawPage(page, nIndex); myPdfDocument.finishPage(page); } } try{ myPdfDocument.writeTo(new FileOutputStream(destination.getFileDescriptor())); }catch (IOException e){ callback.onWriteFailed(e.toString()); }finally { myPdfDocument.close(); myPdfDocument = null; } callback.onWriteFinished(pageRanges); } private boolean pageInRange(PageRange[] pageRanges, int nPage) { for(int nIndex=0; nIndexlt;pageRanges.length; nIndex ) { if((nPage gt;= pageRanges[nIndex].getStart()) amp;amp; (nPage lt;= pageRanges[nIndex].getEnd())) { return true; } } return false; } /* 2021-10-27 신정원 페이지 캔버스에 필요한 콘텐츠를 그리는 메서드 */ private void drawPage(PdfDocument.Page page, int nPageNumber) { //캔버스 객체에 대한 참조 Canvas canvas = page.getCanvas(); //페이지 번호가 0부터 시작하기 때문에 1을 증가하여 1페이지부터 시작으로 만든다. nPageNumber ; //여백과 기준값 선언 int nTitleBaseLine = 72; int nLeftMargin = 54; //그리기에 사용할 paint 와 color 개체 생성과 텍스트 사이즈 설정 Paint paint = new Paint(); paint.setColor(Color.BLACK); paint.setTextSize(40); //제목 텍스트 그리기 canvas.drawText( "Test Print Document Page " nPageNumber, nLeftMargin, nTitleBaseLine, paint); //본문 사이지 14, 본문 텍스트 그리기 paint.setTextSize(14); canvas.drawText("인쇄 테스트", nLeftMargin, nTitleBaseLine 35, paint); if(nPageNumber % 2 == 0) { paint.setColor(Color.RED); } else { paint.setColor(Color.GREEN); } PageInfo pageInfo = page.getInfo(); canvas.drawCircle(pageInfo.getPageWidth()/2, pageInfo.getPageHeight()/2, 150, paint); } }