如何让pdf图片满屏android
How to make pdf image fit the whole screen android
我正在使用 this depo git 应用程序,它允许您捕获或选择图像并将它们保存在 pdf 文档中。效果很好,只是保存的图像不适合整个屏幕。
所以我尝试更改这些数字 Document document = new Document(PageSize.A4, 38, 38, 50, 38);
或 image.setBorderWidth(15);
(documentRect.getWidth() - image.getScaledWidth()) / 2,
(documentRect.getHeight() - image.getScaledHeight()) / 2);
但运气不好...
而且作者在布局上没有使用任何imageview
所以我不得不编辑有问题。有什么想法吗?
更新: 显然将 image.scaleAbsolute(bmp.getWidth(), bmp.getHeight());
更改为
image.scaleAbsolute(500f, 500f);
或 image.scalePercent(500f);
可以解决问题(我必须调整数字以适合页面)。
缺点是图像质量太差了...
PdfUtils
public static final String LOG_ACTIVITY = "PdfUtils";
public static String ImgPdf(Activity activity, ArrayList<String> listPathImg,String folder, String pdfName) {
String result ="";
Image image;
String path = FileUtils.createFolderApp(folder);
path = path + pdfName + ".pdf";
Document document = new Document(PageSize.A4, 38, 38, 50, 38);
Log.v(LOG_ACTIVITY, "Document Created");
Rectangle documentRect = document.getPageSize();
try {
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(path));
document.open();
for (int i = 0; i < listPathImg.size(); i++) {
Bitmap bmp = MediaStore
.Images
.Media
.getBitmap(
activity.getContentResolver(),
Uri.fromFile(new File(listPathImg.get(i))));
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 70, stream);
image = Image.getInstance(listPathImg.get(i));
if (bmp.getWidth() > documentRect.getWidth() || bmp.getHeight() > documentRect.getHeight()) {
//bitmap is larger than page,so set bitmap's size similar to the whole page
image.scaleAbsolute(documentRect.getWidth(), documentRect.getHeight());
} else {
//bitmap is smaller than page, so add bitmap simply.
//[note: if you want to fill page by stretching image,
// you may set size similar to page as above]
image.scaleAbsolute(bmp.getWidth(), bmp.getHeight());
}
image.setAbsolutePosition(
(documentRect.getWidth() - image.getScaledWidth()) / 2,
(documentRect.getHeight() - image.getScaledHeight()) / 2);
image.setBorder(Image.BOX);
image.setBorderWidth(15);
document.add(image);
document.newPage();
}
result=path;
} catch (Exception err) {
err.printStackTrace();
result="";
} finally {
document.close();
}
return result;
}
我想你想做的是改变
的大小
Rectangle documentRect = document.getPageSize();
矩形有 4 个您可以在构造时设置的参数(x、y、宽度、高度)。
更改这些可能会解决您的问题。
如果我正确理解问题,我会使用 PDF24 Creator。
来自 this answer 的解决方案。
我把image.scaleAbsolute(bmp.getWidth(), bmp.getHeight());
改成了
image.scalePercent(scaler);
ofc 你必须包括
float scaler = ((document.getPageSize().getWidth() - document.leftMargin()
- document.rightMargin() - indentation) / image.getWidth()) * 100;
现在适合了。虽然图像质量不完美。
而不是 image.scaleAbsolute(width,height)
试试 image.scaleToFit(width,height)
我正在使用 this depo git 应用程序,它允许您捕获或选择图像并将它们保存在 pdf 文档中。效果很好,只是保存的图像不适合整个屏幕。
所以我尝试更改这些数字 Document document = new Document(PageSize.A4, 38, 38, 50, 38);
或 image.setBorderWidth(15);
(documentRect.getWidth() - image.getScaledWidth()) / 2,
(documentRect.getHeight() - image.getScaledHeight()) / 2);
但运气不好...
而且作者在布局上没有使用任何imageview
所以我不得不编辑有问题。有什么想法吗?
更新: 显然将 image.scaleAbsolute(bmp.getWidth(), bmp.getHeight());
更改为
image.scaleAbsolute(500f, 500f);
或 image.scalePercent(500f);
可以解决问题(我必须调整数字以适合页面)。
缺点是图像质量太差了...
PdfUtils
public static final String LOG_ACTIVITY = "PdfUtils";
public static String ImgPdf(Activity activity, ArrayList<String> listPathImg,String folder, String pdfName) {
String result ="";
Image image;
String path = FileUtils.createFolderApp(folder);
path = path + pdfName + ".pdf";
Document document = new Document(PageSize.A4, 38, 38, 50, 38);
Log.v(LOG_ACTIVITY, "Document Created");
Rectangle documentRect = document.getPageSize();
try {
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(path));
document.open();
for (int i = 0; i < listPathImg.size(); i++) {
Bitmap bmp = MediaStore
.Images
.Media
.getBitmap(
activity.getContentResolver(),
Uri.fromFile(new File(listPathImg.get(i))));
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 70, stream);
image = Image.getInstance(listPathImg.get(i));
if (bmp.getWidth() > documentRect.getWidth() || bmp.getHeight() > documentRect.getHeight()) {
//bitmap is larger than page,so set bitmap's size similar to the whole page
image.scaleAbsolute(documentRect.getWidth(), documentRect.getHeight());
} else {
//bitmap is smaller than page, so add bitmap simply.
//[note: if you want to fill page by stretching image,
// you may set size similar to page as above]
image.scaleAbsolute(bmp.getWidth(), bmp.getHeight());
}
image.setAbsolutePosition(
(documentRect.getWidth() - image.getScaledWidth()) / 2,
(documentRect.getHeight() - image.getScaledHeight()) / 2);
image.setBorder(Image.BOX);
image.setBorderWidth(15);
document.add(image);
document.newPage();
}
result=path;
} catch (Exception err) {
err.printStackTrace();
result="";
} finally {
document.close();
}
return result;
}
我想你想做的是改变
的大小 Rectangle documentRect = document.getPageSize();
矩形有 4 个您可以在构造时设置的参数(x、y、宽度、高度)。 更改这些可能会解决您的问题。
如果我正确理解问题,我会使用 PDF24 Creator。
来自 this answer 的解决方案。
我把image.scaleAbsolute(bmp.getWidth(), bmp.getHeight());
改成了
image.scalePercent(scaler);
ofc 你必须包括
float scaler = ((document.getPageSize().getWidth() - document.leftMargin()
- document.rightMargin() - indentation) / image.getWidth()) * 100;
现在适合了。虽然图像质量不完美。
而不是 image.scaleAbsolute(width,height)
试试 image.scaleToFit(width,height)