首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android PdfDocument太大(页面尺寸)

Android PdfDocument太大(页面尺寸)
EN

Stack Overflow用户
提问于 2022-02-17 15:24:21
回答 2查看 466关注 0票数 0

我生成一个简单的PDF,包含一个图像(横幅)和一个代码标题,如下所示:

代码语言:javascript
运行
复制
    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页面的大小。当我更改该行时,文档大小似乎是正确的。

代码语言:javascript
运行
复制
PdfDocument.PageInfo mypageInfo = new PdfDocument.PageInfo.Builder(2480, 3508, 1).create();

对此:

代码语言:javascript
运行
复制
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。

如何在不丢失图像质量的情况下使页面适合?

EN

Stack Overflow用户

发布于 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 构造函数获取维度的整数值,这意味着您必须传递595842才能获得(几乎) A4。

现在是图像。有一个过载的drawBitmap(),它将一个RectF作为目标。这意味着您可以指定图像将占据的页面上的区域。

假设您希望您的横幅显示在位置(50 pt,50 pt),并占用一个大小的区域(500 pt,125 pt)。下面是你要怎么做的:

代码语言:javascript
运行
复制
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);
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71160850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档