2009-11-30 2 views
6

인보이스를 생성하고 PDF로 저장하는 WSGI 애플리케이션이 있습니다.OO.o/MS없이 ODT/DOC (X) 생성 및 PDF로 변환

지금까지 FPDF (또는 등가물)와 비슷한 문제를 해결하여 GUI와 같이 처음부터 PDF를 생성했습니다. 안타깝게도 이것은 포맷팅 로직 (헤더, 푸터 및 컨텐트, 스타일 지정)이 실제로는 안되는 애플리케이션에 있다는 것을 의미합니다.

템플릿이 이미 Office 형식 (ODT, DOC, DOCX) 형식으로 존재하기 때문에이를 기초로 실제 내용을 채우기를 원합니다. Appy 프레임 워크는 주석이 달린 ODT 파일과 거의 비슷합니다.

ODT (또는 DOC 또는 DOCX)를 PDF로 변환하면 더 큰 문제가 여전히 남아 있습니다. 서버에서. 실행중인 Linux. GUI 라이브러리없이. 따라서 OO.o 또는 MS Office가 필요하지 않습니다.

이 모든 것이 가능합니까, 아니면 내 코드에서 스타일을 유지하는 것이 좋습니다.

실제로 채워지는 내용은 실제로 제한되어 있습니다. 몇 가지 단락은 선택 사항 일 수 있습니다. 헤드 라인이나 2 개, 항상 같은 위치에 있고, 몇 줄의 테이블이 있습니다. HTML에서 이것은 사소한 것입니다.

EDIT : 기본적으로 템플릿으로 작동하는 ODF 파일에서 ODT 파일을 생성 할 수있는 라이브러리와 결과를 PDF (아마도 요점)로 변환 할 수있는 라이브러리가 필요합니다.

답변

2

자동 ODT -> PDF 변환 방법에 대해서는 잘 모릅니다 만, 간단한 방법으로 인보이스를 HTML로 생성하고 http://www.xhtml2pdf.com/을 사용하여 PDF로 변환하는 것이 좋습니다. 나는 도서관을 직접 시험하지는 않았지만 확실히 유망한 것으로 보인다.

+0

은 바닥 글/헤더는 여전히 직접 처리 할 필요가 있다는 것 - 나는 모든 페이지에 같은 장소에 바닥 글을 계속해야합니다. 나는 CSS에 많은 인쇄 옵션이 있다는 것을 알고 있지만, 그것이 할 수 있는지 확신 할 수 없다. –

+1

XHTML2PDF/Pisa는 일부 CSS 확장을 통해 머리글과 바닥 글을 지원합니다. http://www.xhtml2pdf.com/doc/pisa-en.html을보십시오 - 7.4 절에는 문서의 모든 페이지에 꼬리말을 만드는 방법에 대한 예제가 있습니다. –

+0

그 트릭을 할 것으로 보인다. 큰! 필자는 그것을 약간 수정해야 하겠지만, 코드에서 스타일을 유지할 수있는 완벽한 솔루션이라고 생각합니다. ODF/DOC (X) 템플릿을 XHTML/CSS +로 재창조하는 중복성이 여전히 남아 있지만, 이는 사소한 걱정거리입니다. –

1

PyQt4에서 QTextDocument, QTextCursor 및 QTextDocumentWriter를 사용할 수 있습니다. odt 파일에 쓰는 방법을 보여주는 간단한 예 :

>>>from pyqt4 import QtGui 
# Create a document object 
>>>doc = QtGui.QTextDocument() 
# Create a cursor pointing to the beginning of the document 
>>>cursor = QtGui.QTextCursor(doc) 
# Insert some text 
>>>cursor.insertText('Hello world') 
# Create a writer to save the document 
>>>writer = QtGui.QTextDocumentWriter() 
>>>writer.supportedDocumentFormats() 
[PyQt4.QtCore.QByteArray(b'HTML'), PyQt4.QtCore.QByteArray(b'ODF'), PyQt4.QtCore.QByteArray(b'plaintext')] 
>>>odf_format = writer.supportedDocumentFormats()[1] 
>>>writer.setFormat(odf_format) 
>>>writer.setFileName('hello_world.odt') 
>>>writer.write(doc) # Return True if successful 
True 

이 경우 odt와 odf의 차이가 확실하지 않은 경우. 나는 파일 형식을 확인하고 그것은 'application/vnd.oasis.opendocument.text'라고 말했다. 그래서 나는 그것이 odt라고 가정합니다. QPrinter를 사용하여 pdf 파일로 인쇄 할 수 있습니다. 에

추가 정보 :이 방법으로 문제를 생각 http://qt-project.org/doc/qt-4.8/