Слишком большой размер PDF, генерируемый через Android PDFDocument. И при использовании pdfbox он обрезает изображение в выводе - PullRequest
0 голосов
/ 29 октября 2019

Я использую библиотеку документов 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, но она обрезает изображение в выходном файле 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 КБ, но PDF генерирует файл размером 1 МБ.

1 Ответ

1 голос
/ 29 октября 2019

В своем коде библиотеки документов 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 test testDrawImageToFitPage)

В качестве альтернативы, как описано в комментариях, выМожно установить текущую матрицу преобразования перед рисованием изображения, чтобы уменьшить его до размера страницы.

...