2017-10-02 3 views
0

기본적으로 목표는 PDF 보고서를 생성 한 다음 나중에 PDF 첨부 파일을 생성 한 다음 사용자가 제출을 명중하면 PDF가 표시되지 않고 자동으로 전송됩니다. 인쇄 대화 상자가 나타납니다.WebView를 PDF로 숨김 - 결과가 비어 있습니까?

이것은 빈 PDF를 생성하는 지금까지 가지고있는 코드입니다. 상용으로 사용하기 때문에 iText와 같은 라이브러리를 사용할 수 없습니다.

WebView web = new WebView(c); // c is context, provided when method called 
    web.loadDataWithBaseURL("file:///android_asset/", pdfTemplate, "text/html", "UTF-8", ""); 
    PrintAttributes.Builder b = new PrintAttributes.Builder() 
      .setColorMode(PrintAttributes.COLOR_MODE_COLOR) 
      .setMediaSize(PrintAttributes.MediaSize.ISO_A4) 
      .setMinMargins(PrintAttributes.Margins.NO_MARGINS) 
      .setResolution(new PrintAttributes.Resolution("1", "label", 300, 300)); 
    PrintedPdfDocument doco = new PrintedPdfDocument(c, b.build()); 
    PdfDocument.Page p = doco.startPage(1); 
    web.draw(p.getCanvas()); 
    doco.finishPage(p); 

사용자가 아무것도 보지 않고이 작업을 수행하려면 어떻게해야합니까?

+0

"나는이를 사용하고 있기 때문에 상업적 용도로는 iText와 같은 라이브러리를 사용할 수 없습니다 "- iText는 [상용 라이센스] (https://itextpdf.com/Pricing)를 제공합니다. 주요한 검색 엔진에서'안드로이드 라이브러리 생성 pdf '에 대한 검색을 위해 다양한 다른 라이브러리와 서비스가 나타납니다. 귀하의 문제에 관해서는, 'WebView'는 백그라운드 스레드에 내용을로드하므로 너무 일찍 인쇄하려고합니다. 게다가, 귀하의 경우, HTML을 패키지로 작성하고 PDF를 생성하려고 시도하는 대신 PDF 파일을 자산으로 패키징하는 것이 훨씬 간단합니다. – CommonsWare

+0

그러나 유료 상업 라이센스를 사용할 수없는 이유는 여러 가지입니다. WebView가로드되고 PDF 코드가 실행될 때까지 기다릴 수있는 방법이 있습니까? 애셋에서 PDF를 패키징하는 경우 컨텐트를 편집하는 방법은 무엇입니까? PDF 내용은 이전에 string.replace를 사용했던 응용 프로그램의 데이터로 채워질 때마다 매번 변경됩니다 의 자리 표시자를 대체하십시오. – markeh21

+0

"WebView가로드되고 PDF 코드가 실행될 때까지 기다릴 수있는 방법이 있습니까? - 귀하의 HTML에 따라 [this answer] (https://stackoverflow.com/a/46525763/115145)에 요약 된 'WebViewClient' 접근 방식이 효과가 있습니다. 이는 의도적으로 비동기 작업 (예 : AJAX)을 처리하지 않습니다. "내용을 편집하는 방법은 무엇입니까?"- 죄송합니다. 질문에 대한 코드를 잘못 읽었습니다. – CommonsWare

답변

1

사용자 지정 WebViewClient를 사용하고이 같은 "onPageFinished"메소드를 오버라이드 (override) 할 수 있습니다

class CustomWebViewClient extends WebViewClient { 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     //do your pdf logic 
    } 
} 

당신이 URL을로드하기 전에 다음 그냥 전화 :

web.setWebViewClient(new CustomWebViewClient()); 
+0

감사합니다 - 그것을 만들었습니다, 모든 PDF 및 전자 메일 논리를 이동, 코드가 발생했지만 불행히도 여전히 비어 있습니다. 편집 : 클라이언트를 설정 한 후 URL을로드했는지 확인했습니다. – markeh21

관련 문제