2016-05-09 12 views
-1

pdfファイルをbmpに出力するには、動作するアンドロイドコードが必要です。私が持っていたコードは印刷することができますが、テキストは非常にぼやけており、読みにくいです。印刷に使用したデバイスは、用紙の幅が384で小さくなっています。 印刷されたテキストは、PDFファイルからBMPへの変換と印刷

ここ
public class PdfToImage { 

     private int ViewSize = 384; 
     private String pdfErrorCode = null; 
     private String pdfImageErrorCode = null; 
     private String pdfImageSaveErrorCode = null; 
     private String returnError = null; 

     public String pdfToImage(File pdfFilePath) { 
      PDFImage.sShowImages = true; 
      PDFPaint.s_doAntiAlias = true; 
      HardReference.sKeepCaches = true; 
      try { 
       RandomAccessFile pdfAccessFile = new RandomAccessFile(pdfFilePath, 
         "r"); 
       byte[] pdfData = new byte[(int) pdfAccessFile.length()]; 
       pdfAccessFile.readFully(pdfData); 
       returnError = pdfLoadImages(pdfData); 

       pdfErrorCode = "SUCCESS"; 

      } catch (Exception ignored) { 
       pdfErrorCode = "PDF FILE NOT FOUND"; 
      } 

      if (returnError.equals("PDF TO BMP CONVERSION SUCCESS")) { 
       return pdfErrorCode; 
      } else { 
       return "FAILED"; 
      } 
     } 

     @SuppressLint("NewApi") 
     private String pdfLoadImages(final byte[] data) { 

      try { 
       ByteBuffer byteBuffer = ByteBuffer.NEW(data); 
       PDFFile pdfFile = new PDFFile(byteBuffer); 
       PDFPage pdfPage = pdfFile.getPage(1, true); 

       final float scaleImage = ViewSize/pdfPage.getWidth() * 0.95f; 
       Bitmap bitmapPdfPage = pdfPage.getImage(
         (int) (pdfPage.getWidth() * scaleImage), 
         (int) (pdfPage.getHeight() * scaleImage), null, true, true); 
       SaveImage(bitmapPdfPage, 1); 

       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       bitmapPdfPage.compress(Bitmap.CompressFormat.PNG, 100, stream); 
       stream.reset(); 

       for (int i = 2; i <= pdfFile.getNumPages(); i++) { 
        pdfPage = pdfFile.getPage(i, true); 
        bitmapPdfPage = pdfPage.getImage(
          (int) (pdfPage.getWidth() * scaleImage), 
          (int) (pdfPage.getHeight() * scaleImage), null, true, 
          true); 
        bitmapPdfPage.compress(Bitmap.CompressFormat.PNG, 100, stream); 
        SaveImage(bitmapPdfPage, i); 
        pdfImageErrorCode = "PDF TO BMP CONVERSION SUCCESS"; 
       } 
       stream.close(); 
      } catch (Exception e) { 
       Log.d("error", e.toString()); 
       pdfImageErrorCode = "PDF TO BMP CONVERSION FAILED"; 
      } 
      System.gc(); 
      return pdfImageErrorCode; 
     } 

     private String SaveImage(Bitmap pdfBitmap, int pageNumber) { 

      String sdcardPath = Environment.getExternalStorageDirectory() 
        .toString(); 
      File pdfDir = new File(sdcardPath + "/pdftobmp"); 
      pdfDir.mkdirs(); 

      String pdfToImageFileName = "pdf-" + pageNumber + ".png"; 
      File imageFile = new File(pdfDir, pdfToImageFileName); 
      if (imageFile.exists()) 
       imageFile.delete(); 
      try { 
       FileOutputStream outputStream = new FileOutputStream(imageFile); 
       pdfBitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream); 
       outputStream.flush(); 
       outputStream.close(); 
       pdfImageSaveErrorCode = "IMAGE SAVED"; 

      } catch (Exception e) { 
       e.printStackTrace(); 
       pdfImageSaveErrorCode = "IMAGE NOT SAVED"; 
      } 
      return pdfImageSaveErrorCode; 
     } 

    } 
+1

ソースフォーマットとは何ですか?レター/ A4?これはPDFが既に正確に定義されたフォーマットを持っているため、この方法ではうまく動作しません。ちょうどそれを圧縮すれば、もちろんテキストはぼやけてしまいます。 PDFからテキストを抽出し、別の形式で印刷するための専用の方法が必要です。 – CherryDT

+0

実際には、私はそれを384インチの紙幅のデバイスに印刷したいと思っています。非常に小さいデバイスです。他の方法でBMPを読み込み可能な形式で印刷する方法はありますか? – andro

答えて

0

、あなたは元の品質の1/10に画像を圧縮している:

bitmapPdfPage.compress(Bitmap.CompressFormat.PNG, 10, stream); 

たとえば、行を削除、または非常に高い値に圧縮を調整するのいずれかしようとしないのはなぜ90?

bitmapPdfPage.compress(Bitmap.CompressFormat.PNG, 90, stream); 

編集

付属していない場合、私はあなたにそれをデバッグするいくつかのアドバイスを与えることができます。

私はそれはあなたのロードまたは小さな、ぼやけサイズを引き起こしているコードを保存するのかどうか思ったんだけど、私はあなただったら、私はに、そして、

SaveImage(bitmapPdfPage, i); 

を読み込む行にデバッグブレークポイントを置きます変数のリストでは、bitmapPdfPage(Androidスタジオ)を見つけて、ビットマップ自体を表示することができます。ビットマップが小さく、ここでぼやけている場合は、不適切な読み込みコードであることを知って質問を更新してください。それが大きく、テキストを読むことができれば逆のことが成り立ち、ビットマップ保存コードが間違っていることがわかります。

+0

私の間違いのためにyeah.sorry。以前は100だった。しかし、私はコードを変更しようとし、元に戻すのを忘れました。それが100ならば、どのようにして完璧な可読テキストで印刷を達成することができますか? – andro

+0

@ Krishna13デバッグのヘルプを追加しました。試してみて、結果を更新できますか? – roarster

+0

hi.yes私はそれを試み、正しい出力を得ることができません。これまでと同じです。印刷されたイメージは見出しを除いて読むことができません。 – andro