我生成一个简单的PDF,包含一个图像(横幅)和一个代码标题,如下所示:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Bitmap headerBmp = BitmapFactory.decodeResource(getResources(), R.drawable.headerimage);
PdfDocument pdfDocument = new PdfDocument();
PdfDocument.PageInfo mypageInfo = new PdfDocument.PageInfo.Builder(2480, 3508, 1).create();
PdfDocument.Page myPage = pdfDocument.startPage(mypageInfo);
Canvas canvas = myPage.getCanvas();
canvas.setDensity(300);
canvas.drawBitmap(headerBmp, 50, 50, new Paint());
Paint titlePaint = new Paint();
titlePaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD));
titlePaint.setTextSize(75);
canvas.drawText("Title", 50, 250, titlePaint);
pdfDocument.finishPage(myPage);
File pdfPath = new File(getFilesDir(), "pdf");
if (!pdfPath.exists()) {
pdfPath.mkdir();
}
File pdfFile = new File(pdfPath, "document.pdf");
try {
pdfDocument.writeTo(new FileOutputStream(pdfFile, false));
} catch (IOException e) {
// below line is used
// to handle error
e.printStackTrace();
} finally {
// after storing our pdf to that
// location we are closing our PDF file.
pdfDocument.close();
}
}
}
生成的Pdf文档太大(页面大小)。它应该符合A4页面的大小。当我更改该行时,文档大小似乎是正确的。
PdfDocument.PageInfo mypageInfo = new PdfDocument.PageInfo.Builder(2480, 3508, 1).create();
对此:
PdfDocument.PageInfo mypageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create();
但是现在图像(大约1200 x 300)不适合这个页面。如果调整到595 px宽度,图像看起来非常糟糕。
2480 x 3508是A4的正确大小,300 dpi 595 x 842是A4的正确大小( 72 dpi )。
但是图像通常有300 But。
如何在不丢失图像质量的情况下使页面适合?
发布于 2022-06-18 12:18:32
PDF内部使用积分。一个点被定义为1/72英寸。一英寸等于25.4毫米。
A4大小为210x297毫米,以点表示:
210 / 25.4 * 72 = 595.3 pt
297 / 25.4 * 72 = 841.9 pt
PdfDocument.PageInfo.Builder
构造函数获取维度的整数值,这意味着您必须传递595
和842
才能获得(几乎) A4。
现在是图像。有一个过载的drawBitmap()
,它将一个RectF
作为目标。这意味着您可以指定图像将占据的页面上的区域。
假设您希望您的横幅显示在位置(50 pt,50 pt),并占用一个大小的区域(500 pt,125 pt)。下面是你要怎么做的:
Bitmap headerBmp = BitmapFactory.decodeResource(getResources(), R.drawable.headerimage);
PdfDocument pdfDocument = new PdfDocument();
PdfDocument.PageInfo mypageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create();
PdfDocument.Page myPage = pdfDocument.startPage(mypageInfo);
Canvas canvas = myPage.getCanvas();
RectF dst = new RectF(50, 50, 50 + 500, 50 + 125);
canvas.drawBitmap(headerBmp, null, dst, null);
pdfDocument.finishPage(myPage);
https://stackoverflow.com/questions/71160850
复制相似问题