Olá!
Estou querendo gravar um pdf, porém o tamanho máximo do arquivo é de 2 MB. Então eu preciso dividir o arquivo em tamanhos que sejam menores que 2 MB. Até agora só consigo fazer a divisão do arquivo por páginas, entretanto eu não consigo saber se o split feito tem menos de 2 MB.
Como posso descobrir o tamanho de uma página de um pdf?
Obs.: Estou utilizando o Itextpdf para a leitura do arquivo.
Tirando tudo o que pode dar errado, eu vejo uma solução…
Primeiro, leia o documento todo e obtenha seu tamanho, algo como:
File file = new File("U:\intranet_root\intranet\R1112B2.pdf");
// Get length of file in bytes
long fileSizeInBytes = file.length();
// Convert the bytes to Kilobytes (1 KB = 1024 Bytes)
long fileSizeInKB = fileSizeInBytes / 1024;
// Convert the KB to MegaBytes (1 MB = 1024 KBytes)
long fileSizeInMB = fileSizeInKB / 1024;
Depois, valide se o tamanho é menor ou maior que o que precisa (2 mega, no caso)
Se for maior, divida o array em partes que tenham, no máximo, os 2 mega.
Cada novo array de bytes pode ser gravado em um arquivo separado.
Um possível problema, difícil de contornar, seria o arquivo original possuir várias imagens e a divisão dos bytes ocorrer no meio de uma.
1 curtida
Obrigado pela resposta darlan,
Mas consegui uma outra forma de fazer o split. É necessário baixar a dependencia do itext-xtra e nela há uma classe SmartPDFSplitter, há o método split em que há ele recebe um outputstream e o tamanho do arquivo como parâmetro.
Segue a fonte: https://stackoverflow.com/questions/28599506/how-to-split-a-pdf-based-on-a-size-limit
1 curtida