Android 시스템 인쇄 기능 구현
그림 인쇄
PrintHelper 클래스 사용 하기:
private void doPhotoPrint() {
PrintHelper photoPrinter = new PrintHelper(getActivity());
photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.droids);
photoPrinter.printBitmap("droids.jpg - test print", bitmap);
}
응용 메뉴 표시 줄 에서 이 방법 을 호출 할 수 있 습 니 다.printBitmap()방법 이 호출 될 때 Android 시스템 의 인쇄 인터페이스팝 업 됩 니 다.사용 자 는 파 라 메 터 를 설정 한 다음 인쇄 하거나 취소 할 수 있 습 니 다.
2.사용자 정의 문서 인쇄
1.PrintManager 클래스 에 연결:
private void doPrint() {
// Get a PrintManager instance
PrintManager printManager = (PrintManager) getActivity()
.getSystemService(Context.PRINT_SERVICE);
// Set job name, which will be displayed in the print queue
String jobName = getActivity().getString(R.string.app_name) + " Document";
// Start a print job, passing in a PrintDocumentAdapter implementation
// to handle the generation of a print document
printManager.print(jobName, new MyPrintDocumentAdapter(getActivity()),
null); //
}
주:print 함수 두 번 째 매개 변 수 는 추상 류 PrintDocumentAdapter 의 어댑터 류 를 계승 하 는 것 이 고 세 번 째 매개 변 수 는 PrintAttributes 대상 입 니 다.인쇄 할 때의 속성 을 설정 할 수 있 습 니 다.
2.인쇄 어댑터 클래스 만 들 기
인쇄 어댑터 와 안 드 로 이 드 시스템 의 인쇄 프레임 워 크 가 상호작용 을 하고 인쇄 의 생명주기 방법 을 처리 합 니 다.인쇄 과정 은 주로 다음 과 같은 생명주기 방법 이 있다.
3.onLayout()덮어 쓰 는 방법
onLayout()방법 에서 어댑터 는 시스템 프레임 워 크 텍스트 형식,총 페이지 수 등 정 보 를 알려 야 합 니 다.예 를 들 어:
@Override
public void onLayout(PrintAttributes oldAttributes,
PrintAttributes newAttributes,
CancellationSignal cancellationSignal,
LayoutResultCallback callback,
Bundle metadata) {
// Create a new PdfDocument with the requested page attributes
mPdfDocument = new PrintedPdfDocument(getActivity(), newAttributes);
// Respond to cancellation request
if (cancellationSignal.isCancelled() ) {
callback.onLayoutCancelled();
return;
}
// Compute the expected number of printed pages
int pages = computePageCount(newAttributes);
if (pages > 0) {
// Return print information to print framework
PrintDocumentInfo info = new PrintDocumentInfo
.Builder("print_output.pdf")
.setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
.setPageCount(pages);
.build();
// Content layout reflow is complete
callback.onLayoutFinished(info, true);
} else {
// Otherwise report an error to the print framework
callback.onLayoutFailed("Page count calculation failed.");
}
}
주:onLayout()방법의 실행 은 완료,취소,실패 세 가지 결과 가 있 습 니 다.PrintDocumentAdapter.Layout ResultCallback 류 를 호출 하 는 적당 한 리 셋 방법 으로 실행 결 과 를 표시 해 야 합 니 다.onLayout Finished()방법의 불 형 매개 변 수 는 레이아웃 내용 이 바 뀌 었 는 지 여 부 를 표시 해 야 합 니 다.
onLayout() , , :
private int computePageCount(PrintAttributes printAttributes) {
int itemsPerPage = 4; // default item count for portrait mode
MediaSize pageSize = printAttributes.getMediaSize();
if (!pageSize.isPortrait()) {
// Six items per page in landscape orientation
itemsPerPage = 6;
}
// Determine number of print items
int printItemCount = getPrintItemCount();
return (int) Math.ceil(printItemCount / itemsPerPage);
}
4.덮어 쓰기()방법인쇄 결 과 를 파일 에 출력 해 야 할 때 시스템 은 onWrite()방법 을 사용 합 니 다.이 방법 은 인쇄 할 페이지 와 결 과 를 기록 할 파일 을 가리 키 는 매개 변수 입 니 다.페이지 의 내용 을 여러 페이지 의 PDF 문서 에 기록 해 야 하 는 방법 을 실현 합 니 다.이 과정 이 끝 났 을 때 onWrite Finished()방법 을 사용 해 야 합 니 다.예 를 들 어:
@Override
public void onWrite(final PageRange[] pageRanges,
final ParcelFileDescriptor destination,
final CancellationSignal cancellationSignal,
final WriteResultCallback callback) {
// Iterate over each page of the document,
// check if it's in the output range.
for (int i = 0; i < totalPages; i++) {
// Check to see if this page is in the output range.
if (containsPage(pageRanges, i)) {
// If so, add it to writtenPagesArray. writtenPagesArray.size()
// is used to compute the next output page index.
writtenPagesArray.append(writtenPagesArray.size(), i);
PdfDocument.Page page = mPdfDocument.startPage(i);
// check for cancellation
if (cancellationSignal.isCancelled()) {
callback.onWriteCancelled();
mPdfDocument.close();
mPdfDocument = null;
return;
}
// Draw page content for printing
drawPage(page);
// Rendering is complete, so page can be finalized.
mPdfDocument.finishPage(page);
}
}
// Write PDF document to file
try {
mPdfDocument.writeTo(new FileOutputStream(
destination.getFileDescriptor()));
} catch (IOException e) {
callback.onWriteFailed(e.toString());
return;
} finally {
mPdfDocument.close();
mPdfDocument = null;
}
PageRange[] writtenPages = computeWrittenPages();
// Signal the print framework the document is complete
callback.onWriteFinished(writtenPages);
...
}
drawPage()방법 구현:
private void drawPage(PdfDocument.Page page) {
Canvas canvas = page.getCanvas();
// units are in points (1/72 of an inch)
int titleBaseLine = 72;
int leftMargin = 54;
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setTextSize(36);
canvas.drawText("Test Title", leftMargin, titleBaseLine, paint);
paint.setTextSize(11);
canvas.drawText("Test paragraph", leftMargin, titleBaseLine + 25, paint);
paint.setColor(Color.BLUE);
canvas.drawRect(100, 100, 172, 172, paint);
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.