gpt4 book ai didi

android - 为什么在使用 android 中的 iText 库将图像转换为 PDF 时图像会被裁剪

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:37:22 25 4
gpt4 key购买 nike

在我的应用程序中,我想将用户选择的图像转换为一个 PDF 文件。我正在按照许多人的建议使用 iText 库。用户选择多张图片并使用它创建一个 pdf,其中每张图片是 1 个 pdf 页面。

我使用的代码如下所示

    Document document = new Document(PageSize.A4);
try {

String path = Environment.getExternalStorageDirectory()+"/PDFile.pdf";

File file= new File(path);

if(file.exists())
{

}
else
{
file.createNewFile();
}


PdfWriter.getInstance(document,new FileOutputStream(path));

document.open();

for(int i =0; i<pdfImage.size();i++)
{
Image image = Image.getInstance(pdfImage.get(i));
image.scaleAbsolute(PageSize.A4);
image.setAbsolutePosition(0, 0);
document.add(image);

}

document.close();



} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

正在生成 pdf,但图像被裁剪了。只有一半的图像是可见的,其余的被裁剪掉了。

我是否必须设置任何内容才能使 pdf 适应图像大小??

或者我是否必须更改图像或调整图像大小以适应 pdf 页面大小?

请帮忙!!我不知道如何解决这个问题???

最佳答案

当你这样做时:

Document document = new Document();

然后您隐式创建了一个文档,其页面的页面大小称为 A4。即:宽度为 595,高度为 842 个用户单位。

如果您添加较小的图像,它们将不会被裁剪。如果您添加更大的图像。图像将被裁剪...

如果您希望图像完全适合页面,您有两种选择:

  1. 调整页面大小,或
  2. 调整图像的大小。

这两个选项是等效的,因为 iText 不会更改图像的分辨率:每个像素都将被保留。

选项 1:

请参阅我对问题的回答:Adding maps at iText Java

在这个问题中,我这样做:

Image img = Image.getInstance(IMG);
Document document = new Document(img);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
img.setAbsolutePosition(0, 0);
document.add(img);
document.close();

Document 对象接受一个Rectangle 作为参数。此 Rectangle 以用户单位定义页面大小。由于 Image 类是 Rectangle 类的子类,我可以使用 Image 实例作为参数来创建 Document 实例。

另一种选择是这样做:

Rectangle pagesize = new Rectangle(img.getScaledWidth(), img.getScaledHeight());
Document document = new Document(pagesize);

如果您的文档有不同的页面,您必须在 触发新页面之前使用 setPageSize() 方法。

选项 2:

请参阅我对问题的回答:Backgroundimage in landscape and cover whole pdf with iTextSharp

代码看起来像这样(好吧,实际代码有点不同,但这也能工作):

Document document = new Document(PageSize.A4.rotate());
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
Image image = Image.getInstance(IMAGE);
image.scaleAbsolute(PageSize.A4.rotate());
image.setAbsolutePosition(0, 0);
document.add(image);
document.close();

这里我有 A4 大小的横向页面,我缩放图像以使其完全适合页面。这是危险的,因为这会改变图像的纵横比。这会导致图像失真。将 scaleAbsolute() 替换为 scaleToFit() 将避免该问题,但如果图像的纵横比与纵横比不同,则会出现一些白边页面的。

重要:请注意,我在这两种情况下都使用了 setAbsolutePosition(0, 0);。我引入这条线是为了让图像的左下角与页面的左下角重合。如果您不这样做,您将看到底部和左侧的边距,并且您的图像将被剪裁到顶部和右侧。

关于android - 为什么在使用 android 中的 iText 库将图像转换为 PDF 时图像会被裁剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27103499/

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