Writer di Android PDF (APW) Enconding

Sto usando Android PDF Write (APW) per creare un PDF, ma non funziona con alcuni caratteri speciali (portoghese).

mypdf.addText(170, 50, 40,"Coração"); 

L'enconding standard è:

  • Cambiare il carattere TextView?
  • La notifica Lollipop setVisibility () non funziona?
  • Chiamata dall'exception errata della filettatura
  • La pubblicazione di Runnable a un thread UI garantisce che il layout è terminato quando viene eseguito?
  • Filtro Adattatore personalizzato con quattro Arraylist da sqlite in listview utilizzando Actionbar SearchView
  • BroadcastReceiver for Screen On / Off non funziona
  •  mypdf.setFont(StandardFonts.SUBTYPE, StandardFonts.COURIER, StandardFonts.WIN_ANSI_ENCODING); outputToFile("helloworld.pdf",pdfcontent,"ISO-8859-1"); 

    Ho provato

     outputToFile("helloworld.pdf",pdfcontent,"UTF-8"); outputToFile("helloworld.pdf",pdfcontent,"UTF-16"); outputToFile("helloworld.pdf",pdfcontent,"Cp1252"); 

    e non è riuscito. Qualche idea che cosa devo fare?

    EDIT

    Il metodo outputToFile è definito come:

      private void outputToFile(String fileName, String pdfContent, String encoding) { File newFile = new File(Environment.getExternalStorageDirectory() + "/" + fileName); try { newFile.createNewFile(); try { FileOutputStream pdfFile = new FileOutputStream(newFile); pdfFile.write(pdfContent.getBytes(encoding)); pdfFile.close(); } catch(FileNotFoundException e) { // } } catch(IOException e) { // } } 

    Il metodo addText è definito come:

      public void addText(int leftPosition, int topPositionFromBottom, int fontSize, String text, String transformation) { addContent( "BT\n" + transformation + " " + Integer.toString(leftPosition) + " " + Integer.toString(topPositionFromBottom) + " Tm\n" + "/F" + Integer.toString(mPageFonts.size()) + " " + Integer.toString(fontSize) + " Tf\n" + "(" + text + ") Tj\n" + "ET\n" ); } 

    Inoltre, cambio il colore del carattere a bianco aggiungendo il seguente rawcontent:

     mypdf.addRawContent("1 1 1 rg\n"); 

    Poi torno al colore nero del carattere:

      mypdf.addRawContent("0 0 0 rg\n"); 

  • Che cosa è Android PDK?
  • Android salva lo stato sul cambiamento di orientamento
  • Abilita opzione zoom in WebView Android
  • Errore getResource
  • mappe android api, exception
  • Android: Carica i file di grandi size utilizzando MultipartEntity
  • One Solution collect form web for “Writer di Android PDF (APW) Enconding”

    Ho preso tutte le informazioni fornite, ho scritto il seguente semplice metodo di test di unità e ho eseguito.

     public void test19192108() { PDFWriter mPDFWriter = new PDFWriter(PaperSize.FOLIO_WIDTH, PaperSize.FOLIO_HEIGHT); mPDFWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.COURIER, StandardFonts.WIN_ANSI_ENCODING); mPDFWriter.addText(170, 50, 40,"Coração"); String pdfcontent = mPDFWriter.asString(); outputToFile("helloworld19192108.pdf",pdfcontent,"ISO-8859-1"); } 

    ( outputToFile è il metodo di aiuto dalla class APW PDFWriterDemo )

    Il risultato sembra questo:

    Schermata di helloworld19192108.pdf in Adobe Reader

    Questo sembra abbastanza per soddisfare le aspettative.

    Quindi, in qualunque modo non funziona con alcuni caratteri speciali (portoghese) per l'OP, mancano alcune informazioni vitali per riprodurre il problema.

    PS: A seconda della configuration dell'ambiente di sviluppo, potrebbe esserci un problema con i caratteri non ASCII nel codice sorgente. Pertanto, potrebbe essere una buona idea sostituire

      mPDFWriter.addText(170, 50, 40,"Coração"); 

    con

      mPDFWriter.addText(170, 50, 40,"Cora\u00e7\u00e3o"); 

    PPS: Adobe Reader dopo aver visto un file generato come questo vuole ripararlo. Il motivo è che la tabella di riferimento trasversale è rotta. Il codice che genera le voci per esso è questo:

     public void addObjectXRefInfo(int ByteOffset, int Generation, boolean InUse) { StringBuilder sb = new StringBuilder(); sb.append(String.format("%010d", ByteOffset)); sb.append(" "); sb.append(String.format("%05d", Generation)); if (InUse) { sb.append(" n "); } else { sb.append(" f "); } sb.append("\r\n"); mList.add(sb.toString()); } 

    (da CrossReferenceTable.java )

    Contando i caratteri in questa voce si ottengono 10 + 1 + 5 + 3 + 2 = 21.

    Secondo la specifica, però:

    Ogni voce deve essere esattamente 20 byte di lunghezza, inclusa la marcatura finale

    (dalla sezione 7.5.4 tabella trasversale di ISO 32000-1 )

    Quando si utilizza (la versione corrente) di Android PDF Writer, è necessario correggere questo codice.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.