Expo - уменьшить размер PDF файлов на устройствах iOS - PullRequest
2 голосов
/ 06 ноября 2019

В настоящее время я создаю PDF-файл формата A4 в моем приложении Expo-App, используя API «expo-print» ( printtofileasync ). PDF включает в себя изображения (фотографии, сделанные с устройства) и некоторый текст. Я установил размер PDF на 595 ширины, 842 высоты (размеры А4). К сожалению, размер PDF слишком велик для моих требований (1,9 МБ только с 1 изображением).

Мне удалось уменьшить размер PDF на Android за счет уменьшения размера изображения, но это не работаетIOS. У меня есть подозрение, что на iOS Expo просто «делает скриншоты» страницы, поэтому изменение размера изображения не имеет никакого эффекта. Я уже пытался уменьшить весь размер PDF до A5, но это не решение, потому что PDF-файлы необходимо распечатать впоследствии на A4.

Любая помощь будет принята!

Обновление: в настоящее время это мой код:

const { uri, base64 } = await Print.printToFileAsync({
    width: 595,
    height: 842,
    html: 'data...',
    base64: true,
});

Share.share({
    url: 'data:application/pdf;base64,' + base64,
});

1 Ответ

0 голосов
/ 14 ноября 2019

Вы можете попробовать использовать строку base64 и декодировать ее обратно в файл PDF. я думаю, что он должен быть меньшего размера, следуйте.

  1. Используйте Expo Print API, чтобы получить рассматриваемый PDF-файл, не забудьте установить для base64 значение true.
import * as Print from 'expo-print';

const pdf = Print.printToFileAsync({
    width: 612,    // <=== your width
    height: 612,   // <=== your height
    base64: true
});
Вы можете использовать эту или эту библиотеку для декодирования обратно файла base64.
import * as Print from 'expo-print';
import base64 from 'base64'; // or import base64 from 'react-native-base64'

const pdf = Print.printToFileAsync({
     width: 612,    // <=== your width
     height: 612,   // <=== your height
     base64: true
});

const pdfDecoded = base64(pdf);

pdfDecoded будет содержать ваш новый PDFфайл, и он должен быть меньшего размера, вы можете отправить его на сервер или отобразить его.

Я не проверял это только мои 2 цента.

Надеюсь, это поможет!

...