>source

devs! PDFDocument를 사용하여 텍스트를 PDF 파일로 저장하려고합니다. 그래서 나는이 code를 썼다.

public void Convert(String text, String fileName){
    PdfDocument myPdfDocument= new PdfDocument();
    PdfDocument.PageInfo myPageInfo= new PdfDocument.PageInfo.Builder(this.pageWidth,this.pageHeight,this.pageNumber).create();
    PdfDocument.Page myPage= myPdfDocument.startPage(myPageInfo);
    Paint myPaint= new Paint();
    Paint backPaint= new Paint();
    backPaint.setColor(this.backgroundcolor);
    myPaint.setTextSize(this.textSize);
    myPaint.setColor(this.fontcolor);
    //To find size of screen so that line is perfectly fit
    DisplayMetrics dm= this.context.getResources().getDisplayMetrics();
    int widthOfScreen= dm.widthPixels;
    int periodForSplittingText= widthOfScreen /Math.round(this.textSize);
    //To make line split in width of the screen here;
    String insert= "\n";
    StringBuilder builder= new StringBuilder(
     text.length() + insert.length() * (text.length()/periodForSplittingText)+1);
    int index= 0;
    String prefix= "";
    while (index < text.length()){
        builder.append(prefix);
        prefix= insert;
        builder.append(text.substring(index, Math.min(index + periodForSplittingText, text.length())));
        index += periodForSplittingText;
    }
    String myString= builder.toString();
    for (String line:myString.split("\n")){
        myPage.getCanvas().drawPaint(backPaint);
        myPage.getCanvas().drawText(line, this.x, this.y, myPaint);
        y+=myPaint.descent()-myPaint.ascent();
    }
    myPdfDocument.finishPage(myPage);
    String myFilePath= Environment.getExternalStorageDirectory().getPath() + this.filePath + "/" + fileName;
    File myFile= new File (myFilePath);
    try {
        myPdfDocument.writeTo(new FileOutputStream(myFile));
    } catch (Exception e) {
        e.printStackTrace();
    }
    myPdfDocument.close();
}

그러나 긴 텍스트를 입력하면 두 페이지에서 그것을 만들 수 없습니다. Android 개발자에 따르면

이 클래스는 기본 Android 내용에서 PDF 문서를 생성 할 수 있습니다. 새 문서를 만들고 추가하려는 모든 페이지에 대해 페이지를 시작하고 페이지에 콘텐츠를 작성하고 페이지를 완성하십시오. 모든 페이지로 완료되면 문서를 출력 스트림에 쓸고 문서를 닫습니다. 문서가 닫힌 후에는 더 이상 사용해서는 안됩니다. 페이지는 하나씩 생성됩니다. 즉, 주어진 시간에 쓰는 단일 페이지 만 가질 수 있습니다. 이 클래스는 스레드가 안전하지 않습니다.

그러나 나는 그것이 무엇을 의미하는지 이해하지 못합니까? 어떻게 이것을 해결할 수 있습니까? 도움

또한 인용 된 텍스트로 페이지가 하나씩 만들어졌습니다. 따라서 한 페이지를 만들 수있는 경우 두 페이지를 다시 만들 수 있습니다.

Scary Wombat2021-06-08 13:50:07

@ScartWombat myPDFDocument.StartPage (myPageInfo); myPage.getcanvas (). DrawText ( "Cope Second Page Works", this.x, this.y, MyPaint); mypdfdocument.finishPage (myPage); 나는 이것을했지만 널 객체 refrence에서 가상 메소드를 호출하려는 시도를 보여줍니다.

Sneha Sharma2021-06-08 13:50:07

오류가 가득 찼습니다.

Scary Wombat2021-06-08 13:50:07

@scarywombat 이것은 NULL 객체 참조에서 'VOID Android.Graphics.CanVas.DrawText (java.lang.String, Float, Float, Android.String, Float, Float, Android.Graphics.Paint)'가상 메소드를 호출하려고 시도합니다.

Sneha Sharma2021-06-08 13:50:07

스택 트레이스로 질문을 편집하지 않습니다. 아무도 NPE가있는 곳을 이해하려고 노력하기 위해 나쁜 형식의 코멘트를 읽고 싶지 않습니다. 솔직히 말하면 묻는 질문과 관련이 없을 수도 있습니다.

Scary Wombat2021-06-08 13:50:07
  • 이전 Android SDK 5.0 API 21 메이저의 인터넷 문제
  • 다음 reactjs : React Native에서 스크린을 분할하는 데 가장 적합한 규칙은 무엇입니까?