[pdfrw] Saving corrupted files of 1kb

15 views
Skip to first unread message

Frederico Winter

unread,
Sep 7, 2013, 12:05:26 PM9/7/13
to rst2pdf...@googlegroups.com
Hey guys!

I wrote a program that split the pdf in sizes of 1.5mb. It works with almost every pdf, like it's supposed to.

Altought, it doesn't work on some pdf's, like the one attached... the parts are 1kb corrupted files...

Can you help me understand what is wrong? I've done my reasearch, but I can't find out...

Here's the code (don't expect something pro... I'm just a lawyer that likes to code for hobby):

#!/usr/bin/env python
#-*- coding: utf-8 -*-
#Frederico Winter

#importações de módulos
import sys, os, tempfile
from pdfrw import PdfReader, PdfWriter

#função de uso
def uso():
    print("""
fwDividePDF - Divide PDFs para o tamanho do PJe-JT
Autor: Frederico Winter

Uso: %s <ArquivoPDF>
          """ % sys.argv[0])

#função de preparar o PDF
def preparapdf(arq, p):
    global pags, parte, destino, temp
    while p < pags:
        if checatam(temp, arq, p):
            if p != pags - 1:
                temp.addpage(arq[p])
                destino = temp
                b.progresso(p, pags - 1)
                p += 1
                preparapdf(arq, p)
                break
            else:
                destino.addpage(arq[p])
                gravapdf(destino)
                b.progresso(p, pags - 1)
                os.remove(tempfile.gettempdir() + os.sep + r'fwDividePDF.pdf')
                p += 1
                break
        else:
            gravapdf(destino)
            destino = PdfWriter()
            temp = PdfWriter()
            b.progresso(p, pags - 1)
            p += 1
            preparapdf(arq, p)
            break

#função que verifica o tamanho
def checatam(t, arq, p):
    limite = 1400000
    t.addpage(arq[p])
    nome = tempfile.gettempdir() + os.sep + r'fwDividePDF.pdf'
    t.write(nome)
    if os.path.getsize(nome) < limite:
        os.remove(tempfile.gettempdir() + os.sep + r'fwDividePDF.pdf')
        return True
    else:
        os.remove(tempfile.gettempdir() + os.sep + r'fwDividePDF.pdf')
        return False

#função de gravar a parte do PDF
def gravapdf(arq):
    global parte
    nome = os.path.basename(sys.argv[1])[:-4] + ' - Parte %d.pdf' % parte
    arq.write(nome)
    parte += 1
    
#barra de progresso
class BarraProgresso:
    
    def __init__(self):
        self.porcentagem = 0
        self.tamanho = 20
        self.espaco = ' ' * self.tamanho
    
    def cria(self):
        sys.stdout.write("\rProgresso: [{0}] {1}%".format(self.espaco, self.porcentagem))
        sys.stdout.flush()
        
    def progresso(self, i, progresso):
        porcentagem = float(i) / progresso
        simbolos = '#' * int(round(porcentagem * self.tamanho))
        espacos = ' ' * (self.tamanho - len(simbolos))
        sys.stdout.write("\rProgresso: [{0}] {1}%".format(simbolos + espacos, int(round(porcentagem * 100))))
        sys.stdout.flush()
        if i == progresso:
            print
        
#definições de variáveis e início do programa
arquivo = PdfReader(sys.argv[1])
pags = len(arquivo.pages)
parte = 1
destino = PdfWriter()
temp = PdfWriter()
b = BarraProgresso()
uso()
if len(sys.argv) != 2:
    print('[!] ERRO: parâmetros incorretos!')
elif os.path.getsize(sys.argv[1]) < 1500000:
    print('O arquivo já é menor do que 1,5mb.')
else:
    b.cria()
    preparapdf(arquivo.pages, 0)

python_para_desenvolvedores_2ed.pdf

Patrick Maupin

unread,
Sep 13, 2013, 10:16:29 AM9/13/13
to rst2pdf-discuss
I will try to look at this this weekend.

It may be that the bug has already been fixed in one of the
development branches, but I haven't had time to move it to the
production branch (don't have enough unit test cases for confidence).

Regards,
Pat
> --
> You received this message because you are subscribed to the Google Groups
> "rst2pdf-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to rst2pdf-discu...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
Reply all
Reply to author
Forward
0 new messages