2012-04-11 42 views
5

Para mi proyecto, obtengo un archivo de texto plano (report.txt) de otro programa. Está todo formateado en texto plano. Si lo abre en el Bloc de notas, se ve bien (tanto como un archivo de texto sin formato). Cuando abro el archivo en Word y muestro los párrafos, veo el ... para los espacios y el retroceso P para el paragrafo.Convierta texto sin formato a PDF en Python

Necesito convertir este archivo a PDF y agregar algunas otras páginas de PDF para hacer un PDF final. Todo esto sucede en Python.

Tengo problemas para convertir el informe.txt en pdf. Tengo ReportLab, y puedo leer el archivo y hacer algunos cambios (como cambiar el texto a Courier), pero el espaciado se pierde. Cuando se lee el archivo, parece quitar espacios adicionales.

Preguntas: a) ¿Existe alguna manera más fácil de convertir el informe.txt a pdf? b) Si no, ¿hay alguna manera de mantener mis espacios cuando leo el archivo? c) ¿O hay un parámetro que me falta en el estilo de mi párrafo que mantendrá el aspecto original?

Aquí está mi código:

# ------------------------------------ 
# Styles 
# ------------------------------------ 

styleSheet = getSampleStyleSheet() 
mystyle = ParagraphStyle(name='normal',fontName='Courier', 
         fontSize=10, 
         alignment=TA_JUSTIFY, 
         leading=1.2*12, 
         parent=styleSheet['Normal'])  

#=====================================================================================  
model_report = 'report.txt' 

# Create document for writing to pdf 
doc = SimpleDocTemplate(str(pdfPath), \ 
         rightMargin=40, leftMargin=40, \ 
         topMargin=40, bottomMargin=25, \ 
         pageSize=A4) 
doc.pagesize = portrait(A4) 

# Container for 'Flowable' objects 
elements = []  

# Open the model report 
infile = file(model_report).read() 
report_paragraphs = infile.split("\n") 

for para in report_paragraphs: 
    para1 = '<font face="Courier" >%s</font>' % para 
    elements.append(Paragraph(para1, style=mystyle)) 
doc.build(elements) 

Respuesta

2

ReportLab es la habitual Recomendación: como se puede ver en las cuestiones "relacionadas" en la parte derecha de esta página.

¿Ha intentado crear texto con solo StyleSheet['Normal']? Es decir, si obtiene una salida adecuada con lo siguiente, el problema es de alguna manera con su estilo.

Paragraph(para1, style=StyleSheet['Normal']) 
+0

normal no funciona, por lo tanto, por qué yo estaba tratando de crear mi propia. – user1327390

+1

Como Normal * debería * funcionar, le sugiero que descubra por qué no funciona. Copie y pegue un ejemplo de la documentación, y si aún no funciona, hay algún problema con la instalación de ReportLab. Luego agrega 'report.txt' a la mezcla y si eso la rompe, verifica la codificación de tu archivo. ¿Podrías tener UTF16 en lugar de Ascii? Buena suerte. – alexis

0

Tuve un problema similar. He resuelto con este código:

from reportlab.lib.pagesizes import letter 
from reportlab.pdfgen import canvas 
from reportlab.lib.utils import ImageReader 
from PIL import Image 

# ..... 
# ..... some exta code unimportant for this issue.... 
# .... 


# here it is 
ptr = open("tafAlternos.txt", "r") # text file I need to convert 
lineas = ptr.readlines() 
ptr.close() 
i = 750 
numeroLinea = 0 

while numeroLinea < len(lineas): 
    if numeroLinea - len(lineas) < 60: # I'm gonna write every 60 lines because I need it like that 
     i=750 
     for linea in lineas[numeroLinea:numeroLinea+60]:  
      canvas.drawString(15, i, linea.strip()) 
      numeroLinea += 1 
      i -= 12 
     canvas.showPage() 
    else: 
     i = 750 
     for linea in lineas[numeroLinea:]: 
      canvas.drawString(15, i, linea.strip()) 
      numeroLinea += 1 
      i -= 12 
     canvas.showPage() 

Pdf se ve exactamente igual que el archivo texto original

+0

¿Podría editar para mostrar cómo creó el lienzo y el archivo pdf? – pekasus

Cuestiones relacionadas