gpt4 book ai didi

java - 通过 Android PDFDocument 生成的 PDF 尺寸太大。在使用 pdfbox 时,它会在输出中剪切图像

转载 作者:行者123 更新时间:2023-12-02 09:22:20 28 4
gpt4 key购买 nike

我正在使用 android pdf 文档库将图像转换为 pdf,但它生成的 pdf 非常大。

PdfDocument document = new PdfDocument();
PdfDocument.PageInfo pageInfo =new
PdfDocument.PageInfo.Builder(bitmap.getWidth(), bitmap.getHeight(), 1).create();
PdfDocument.Page page = document.startPage(pageInfo);
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(),
bitmap.getHeight(),false);

Canvas canvas = page.getCanvas();
canvas.drawBitmap(scaledBitmap, 0f, 0f, null);
document.finishPage(page);

document.writeTo(new FileOutputStream(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)+"/"+newPDFNameSingle));
document.close();

这是 apache pdf box 实现,但它正在剪切输出 pdf 中的图像

PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);

PDPageContentStream contentStream = new PDPageContentStream(document, page);
InputStream inputStream = new FileInputStream(tempFile);
PDImageXObject ximage = JPEGFactory.createFromStream(document,inputStream);

contentStream.drawImage(ximage, 20, 20);
contentStream.close();

document.save(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)+"/"+newPDFNameSingle);
document.close();

如何生成常规尺寸的 pdf?我的图像大小为 100 kb,但 pdf 生成 1 mb 文件。

最佳答案

在您的 Android pdf 文档库代码中,您将页面大小设置为图像高度和宽度值

PdfDocument.PageInfo.Builder(bitmap.getWidth(), bitmap.getHeight(), 1).create();                            

并在原点绘制图像:

canvas.drawBitmap(scaledBitmap, 0f, 0f, null);

您可以在 PDFBox 代码中执行相同的操作:

PDDocument document = new PDDocument();

PDImageXObject ximage = JPEGFactory.createFromStream(document,imageResource);

PDPage page = new PDPage(new PDRectangle(ximage.getWidth(), ximage.getHeight()));
document.addPage(page);

PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.drawImage(ximage, 0, 0);
contentStream.close();

( DrawImage 测试 testDrawImageToFitPage)

或者,正如评论中所讨论的,您可以在绘制图像之前设置当前变换矩阵,以将其缩小以适合页面。

关于java - 通过 Android PDFDocument 生成的 PDF 尺寸太大。在使用 pdfbox 时,它会在输出中剪切图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58606529/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com