2014-11-11 3 views
1

내 첫 번째 글은 여기 있습니다. 저는 정말 좋은 프로그래머가 아닙니다. 어쨌든 . 나는이 프로젝트에서 앱을위한 새로운 기능을 제공해야한다. 앱은 QR 스캐너를 통해 참가자 목록을 생성합니다. 내 임무는 각 참가자에게 서명을주기위한 그림판을 제공하는 것이 었습니다. 이 서명으로 모든 것이 지금까지 제대로 작동하며 이미지를 원하는 폴더에 저장합니다. "PDF- Creator"클래스에서 CreatPDF 메소드를 얻었습니다. 먼저 creatPDF는 참가자의 고유 번호를 입력 한 다음 그/그녀가 준 서명을 입력해야합니다. 사실 지금까지의 모든 작업은 내 머리글처럼 항상 모든 참가자에게 동일한 그림을 제공한다고합니다.이미지를 PDF로 저장하지만 항상 동일한 이미지를 얻으려면

다음
 String[] signatures = getSignatureFiles(); 
     Image[] efnSignatures = new Image[signatures.length]; 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     for(int i = 0; i<efnSignatures.length; i++){     
      fileName = signatures[i]; 
      File myPath = new File(directory,fileName); 
      String url = myPath.getAbsolutePath(); 
      Bitmap bitmap = BitmapFactory.decodeFile(url); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 10, stream); 
      efnSignatures[i] = Image.getInstance(stream.toByteArray()); 
      efnSignatures[i].setAlignment(Image.MIDDLE); 
     } 

는 방법이다 "getSignatureFiles : 이것은 내 폴더에있는 모든 이미지와 배열을 채우기위한 것입니다

: 마침내 여기

private String[] getSignatureFiles(){ 
    ContextWrapper tcw = new ContextWrapper(getActivity().getApplicationContext()); 
    File directory = tcw.getDir("Signatures", Context.MODE_PRIVATE); 
    String[] files = new String [directory.listFiles().length]; 
    int countFiles = 0; 
    for (File f : directory.listFiles()) { 
     if (f.isFile()){ 
      files[countFiles] = f.getName(); 
      String name = f.getName(); 
      Log.i("file names", name); 
      countFiles = countFiles+1; 
     } 
    } 
    return files; 
} 

그리고에 예상되는 몇 가지 코드입니다 PDF로 이미지를 추가하는 부분이 되십시오.

for (int i = 0; i < signatures.length; i++) { 
      insertCell(table, dummyList.get(i), Element.ALIGN_LEFT); 
      PdfPCell cell = new PdfPCell(); 
      cell.addElement(efnSignatures[i]); 
      table.addCell(cell); 
     } 

문제가 있습니다. 이 PDF- 창조주에 대한 책임을지지는 못했지만, 지금 당장 그것을 작동시켜야합니다. 나는이 강령이 적어도 내 문제가 무엇인지 이해하고 누군가가 나를 도울 수 있기를 바란다. 당신이 말한 것처럼 사전에

덕분에 이미

+0

Bitmap 및 Image 클래스의 출처는 무엇입니까? 각 이미지에 대해 새 ByteArrayOutputStream을 만들고 사용 후 닫아야합니까? (확실한 부분은 SWAG입니까?) –

+0

아, 안드로이드입니다. [tag : android] 태그가 추가되었습니다. –

+0

귀하의 질문에 대한 권리를 이해하고 있는지 확실하지 않습니다. 그러나 "Signature"라고 불리는 다른 Class I의 새로운 Object를 생성하는 새로운 Fragment "CaptureSigantureFragment"를 열어서 Images를 만듭니다. Signature은 Painting Method와 Save Method를 제공한다. {_out = new FileOutputStream (myPath); v.draw (캔버스); \t \t \t mBitmap.compress (Bitmap.CompressFormat.PNG, 100, _out); _out.flush(); _out.close();} – HazlNut

답변

1

그래서 단지 변경하고 루프에서 이제 새로운있는 ByteArrayOutputStream를 만들고 실제로 그 작업!

이제 다음과 같습니다

for(int i = 0; i<efnSignatures.length; i++){  
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      fileName = signatures[i]; 
      Log.i("name:", fileName); 
      File myPath = new File(directory,fileName); 
      String url = myPath.getAbsolutePath(); 
      Log.i("PDF_Creator_url:", url); 
      Bitmap bitmap = BitmapFactory.decodeFile(url); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 10, stream); 
      efnSignatures[i] = Image.getInstance(stream.toByteArray()); 
      efnSignatures[i].setAlignment(Image.MIDDLE); 
     } 

그냥 .. 그 빠른 해결책을 찾기 위해 기대! 대단히 감사합니다! 내가 찾을 수있는 최고의 도움!

+0

제 추천은 추측 이었기 때문에 대답으로 게시하지 않은 이유는 알고있는 사람이 추측 한 축복을 기다리고 싶을 수도 있기 때문입니다. 또한 내가 사용하는 스트림을 사용할 때마다 내 반사는 사용 후에 그것을 닫는 것입니다. 나는 여기에서도해야한다고 생각합니다.하지만 다시 안드로이드에서 무지합니다. –

관련 문제