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;
}
}
ソースフォーマットとは何ですか?レター/ A4?これはPDFが既に正確に定義されたフォーマットを持っているため、この方法ではうまく動作しません。ちょうどそれを圧縮すれば、もちろんテキストはぼやけてしまいます。 PDFからテキストを抽出し、別の形式で印刷するための専用の方法が必要です。 – CherryDT
実際には、私はそれを384インチの紙幅のデバイスに印刷したいと思っています。非常に小さいデバイスです。他の方法でBMPを読み込み可能な形式で印刷する方法はありますか? – andro