문제

KITKAT 장치에서 인쇄를 지원해야하지만 대상 SDK는 13입니다 (변경 사항은 선택 사항이 아닙니다).

특히 WebView를 인쇄해야합니다.

이것은 WebView를 인쇄하기위한 API입니다. http://developer.android.com/training/printing/html-docs.html.

도움이 되었습니까?

해결책

그것은 오래된 것이지만 인쇄는 유용합니다. 그래서 이것은 올바르게 작동하는 것이 좋을 수 있습니다.(반사없이))

장치 버전으로 작업하는 더 좋은 방법입니다.NO TRY-CATCH가 필요하지 않으므로 반환 전에 일부 메시지를 추가하거나 동일한 조건에 따라 버튼 / 메뉴 / ... 단추를 숨기 필요가 있습니다.

@TargetApi(Build.VERSION_CODES.KITKAT)
    private void createWebPrintJob(WebView webView) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) 
            return;

        // Get a PrintManager instance
        PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE);

        // Get a print adapter instance
        PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();

        // Create a print job with name and adapter instance
        String jobName = getString(R.string.app_name) + " Document";
        printManager.print(jobName, printAdapter,
                new PrintAttributes.Builder().build());

    }
.

PrintJob은 SDK 19 이상에서만 실행됩니다

다른 팁

여기에 내 해결책이 있습니다 :

public void print(WebView webView) {
    //PrintManager
    String PRINT_SERVICE = (String) Context.class.getDeclaredField("PRINT_SERVICE").get(null);
    Object printManager = mActivity.getSystemService(PRINT_SERVICE);

    //PrintDocumentAdapter
    Class<?> printDocumentAdapterClass = Class.forName("android.print.PrintDocumentAdapter");
    Method createPrintDocumentAdapterMethod = webview.getClass().getMethod("createPrintDocumentAdapter");
    Object printAdapter = createPrintDocumentAdapterMethod.invoke(webview);

    //PrintAttributes
    Class<?> printAttributesBuilderClass = Class.forName("android.print.PrintAttributes$Builder");
    Constructor<?> ctor = printAttributesBuilderClass.getConstructor();
    Object printAttributes = ctor.newInstance(new Object[] {});
    Method buildMethod = printAttributes.getClass().getMethod("build");
    Object printAttributesBuild = buildMethod.invoke(printAttributes);

    //PrintJob
    String jobName = "My Document";
    Method printMethod = printManager.getClass().getMethod("print", String.class, printDocumentAdapterClass, printAttributesBuild.getClass());
    Object printJob = printMethod.invoke(printManager, jobName, printAdapter, printAttributesBuild);

    // Save the job object for later status checking
    mPrintJobs.add(printJob);
}
.

이 파일이 주 스레드에서 호출되었는지 확인하십시오. 참고 : 시도를 사용해야합니다.4.4 이상을 실행하지 않는 장치는 그렇지 않으면 충돌합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top