Initial revision
svn: r1140
This commit is contained in:
.cvsignoreAUTHORSCOPYINGChangeLogINSTALLMakefile.amMakefile.commMakefile.inNEWSREADMETODOaclocal.m4autogen.shconfigureconfigure.in
doc
Makefile.amMakefile.ingramps.1gramps.1.ingramps.dtdgramps.sgmlsgmldocs.make
gramps.sh.ingramps.specgramps.spec.ininstall-shpy-compileextending-gramps
C
Makefile.amMakefile.inextending-gramps-C.omfextending-gramps.sgml
Makefile.amMakefile.inextending-gramps
index.htmlln7.html
index.htmlomf_timestampstylesheet-images
caution.gifhome.gifimportant.gifnext.gifnote.gifprev.giftip.giftoc-blank.giftoc-minus.giftoc-plus.gifup.gifwarning.gif
t1.htmlx131.htmlx162.htmlx177.htmlx57.htmlx83.htmlgramps-manual
C
Makefile.amMakefile.in
Makefile.amMakefile.infigures
addmedia.pngdruidpg1.pngeditbookmarks.pngep-address.pngep-altname.pngep-attributes.pngep-event.pngep-gallery.pngep-general.pngep-internet.pngep-lds.pngep-notes.pngfamilyview.pngfilter.pngglobalmedia.pnggotobookmark.pnglocalmedia.pngmainwin.pngmediaview.pngopendb.pngpedegreesel.pngpedegreeview.pngpeoplelist.pngplacelist.pngprefs-bars.pngprefs-colors.pngprefs-dates.pngprefs-disp.pngprefs-find.pngprefs-gen.pngprefs-guess.pngprefs-ids.pngprefs-main.pngprefs-media.pngprefs-report.pngprefs-research.pngprefs-revision.pngreportsel.pngrevcontrol.pngsavecomment.pngsourcelist.pngsourcerefsel.pngtoolsel.png
gramps-manual-C.omfgramps-manual.sgmlgramps-manual
index.htmlln7.html
index.htmlomf_timestampstylesheet-images
caution.gifhome.gifimportant.gifnext.gifnote.gifprev.giftip.giftoc-blank.giftoc-minus.giftoc-plus.gifup.gifwarning.gif
t1.htmlx129.htmlx28.htmlx41.htmlx84.htmlsrc
.cvsignore
.thumbnails
.xvpics
AUTHORSAddMedia.pyAddSpouse.pyAddrEdit.pyAttrEdit.pyAutoComp.pyBookmarks.pyCalendar.pyChangeLogChooseParents.pyDate.pyDateEdit.pyDbPrompter.pyDisplayTrace.pyDrawDoc.pyEditPerson.pyEditPlace.pyEditSource.pyEventEdit.pyFamilyView.pyFilter.pyFind.pyFontScale.pyGedcomInfo.pyGenericFilter.pyGrampsCfg.pyGrampsParser.pyGrampsXML.pyGrampsZODB.pyGraphLayout.pyImageSelect.pyImgManip.pyLocEdit.pyMakefile.amMakefile.inMarriage.pyMediaView.pyMergeData.pyNEWSNameEdit.pyNoteEdit.pyPaperMenu.pyPedView.pyPlaceView.pyPlugins.pyQuestionDialog.pyQuickAdd.pyREADMEReadXML.pyRelImage.pyRelLib.pyReport.pySelectChild.pySorter.pySourceView.pySources.pySpreadSheetDoc.pyStartupDialog.pyStyleEditor.pySubstKeywords.pyTarFile.pyTextDoc.pyUrlEdit.pyUtils.pyVersionControl.pyWriteXML.pyacconfig.hautogen.shbad.xpmbuild_pocaution.xpmconfig.gladeconst.pyconst.py.indata
dialog.gladedialog.gladepdocgen
.cvsignoreAbiWordDoc.pyHtmlDoc.pyKwordDoc.pyLaTeXDoc.pyMakefile.amMakefile.inOpenDrawDoc.pyOpenOfficeDoc.pyOpenSpreadSheet.pyPSDrawDoc.pyPdfDoc.pyPdfDrawDoc.pyRTFDoc.pySvgDrawDoc.py
edit_person.gladeedit_person.gladepfam.xpmfamily48.pngfilelistfilters
.cvsignoreAfter.pyAltFam.pyBefore.pyDisconnected.pyEventPlace.pyEventType.pyFemales.pyHavePhotos.pyIncompleteNames.pyMakefile.amMakefile.inMales.pyMatchSndEx.pyMatchSndEx2.pyMutlipleMarriages.pyNeverMarried.pyNoBirthdate.pyNoChildren.pyRegExMatch.pySubString.py
get_stringsgood.xpmgramps.desktopgramps.gladegramps.gladepgramps.pnggramps.pygramps.xpmgramps.zodbgramps_main.pyimagesel.gladeintl.cintl.pylatin_ansel.pylatin_utf8.pylogo.pngmarriage.glademarriage.gladepmedia.pngmergedata.gladepaper.xmlpedigree.xpmpeople.xpmpeople48.pngplace.pngplaces.gladeplaces.gladepplugins.gladeplugins.gladepplugins
.cvsignoreAncestorChart.pyAncestorReport.pyChangeTypes.pyCheck.pyDesGraph.pyDesbrowser.pyDescendReport.pyDetAncestralReport.pyDetDescendantReport.pyEventCmp.pyFamilyGroup.pyFilterEditor.pyGraphViz.pyIndivComplete.pyIndivSummary.pyMakefile.amMakefile.inMerge.pyPatchNames.pyReadGedcom.pyReadNative.pyRelCalc.pyReorderIds.pySummary.pyVerify.pyWebPage.pyWriteGedcom.pyWritePafPalm.pyWritePkg.pychangetype.gladecount_anc.pydesbrowse.gladeeventcmp.gladegedcomexport.gladegedcomimport.glademerge.gladepafexport.gladepatchnames.gladepkgexport.gladereadgedcom.gladerelcalc.gladesoundex.gladesoundgen.pysummary.gladeverify.glade
po
ChangeLogMakefile.amMakefile.inPOTFILES.incs.mocs.poda_DK.moda_DK.pode.mode.poes.moes.pofr.mofr.poit.moit.popt_BR.mopt_BR.poru.moru.posv.mosv.potemplate.po
preferences.gladepreferences.gladeprevision.gladerevision.gladeprule.gladesort.pysoundex.pysources.pngsplash.jpgsrcsel.gladesrcsel.gladepstyles.gladesystem_filters.xmltrace.glade
160
src/docgen/PdfDrawDoc.py
Normal file
160
src/docgen/PdfDrawDoc.py
Normal file
@@ -0,0 +1,160 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2000 Donald N. Allingham
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
import os
|
||||
import string
|
||||
|
||||
from TextDoc import *
|
||||
from DrawDoc import *
|
||||
import Plugins
|
||||
import intl
|
||||
_ = intl.gettext
|
||||
|
||||
try:
|
||||
from reportlab.pdfgen import canvas
|
||||
from reportlab.lib.units import cm
|
||||
from reportlab.lib.colors import Color
|
||||
except:
|
||||
raise Plugins.MissingLibraries, _("The ReportLab modules are not installed")
|
||||
|
||||
def make_color(color):
|
||||
return Color(float(color[0])/255.0, float(color[1])/255.0,
|
||||
float(color[2])/255.0)
|
||||
|
||||
class PdfDrawDoc(DrawDoc):
|
||||
|
||||
def __init__(self,styles,type,orientation):
|
||||
DrawDoc.__init__(self,styles,type,orientation)
|
||||
self.f = None
|
||||
self.filename = None
|
||||
self.level = 0
|
||||
self.time = "0000-00-00T00:00:00"
|
||||
self.page = 0
|
||||
|
||||
def open(self,filename):
|
||||
|
||||
if filename[-4:] != ".pdf":
|
||||
self.filename = filename + ".pdf"
|
||||
else:
|
||||
self.filename = filename
|
||||
self.f = canvas.Canvas(self.filename,(self.width*cm,self.height*cm),0)
|
||||
if self.name:
|
||||
self.f.setAuthor(self.name)
|
||||
|
||||
def close(self):
|
||||
self.f.save()
|
||||
|
||||
def start_paragraph(self,style_name):
|
||||
pass
|
||||
|
||||
def end_paragraph(self):
|
||||
pass
|
||||
|
||||
def write_text(self,text):
|
||||
pass
|
||||
|
||||
def start_page(self,orientation=None):
|
||||
pass
|
||||
|
||||
def end_page(self):
|
||||
self.f.showPage()
|
||||
|
||||
def draw_line(self,style,x1,y1,x2,y2):
|
||||
self.f.line(x1*cm,y1*cm,x2*cm,y2*cm)
|
||||
|
||||
def draw_box(self,style,text,x,y):
|
||||
box_style = self.draw_styles[style]
|
||||
para_name = box_style.get_paragraph_style()
|
||||
p = self.style_list[para_name]
|
||||
|
||||
w = box_style.get_width()*cm
|
||||
h = box_style.get_height()*cm
|
||||
|
||||
if box_style.get_shadow():
|
||||
self.f.setFillColorRGB(0.5,0.5,0.5)
|
||||
self.f.rect((x+0.3)*cm,(y+0.3)*cm,w,h,fill=1,stroke=0)
|
||||
|
||||
font = p.get_font()
|
||||
|
||||
self.f.setStrokeColor(make_color(font.get_color()))
|
||||
self.f.setFillColor(make_color(box_style.get_color()))
|
||||
|
||||
self.f.rect(x*cm,y*cm,w,h,fill=1)
|
||||
|
||||
if text != "":
|
||||
lines = string.split(text,'\n')
|
||||
self.center_print(lines,font,x*cm,y*cm,w,h)
|
||||
|
||||
def write_at(self,style,text,x,y):
|
||||
p = self.style_list[style]
|
||||
font = p.get_font()
|
||||
|
||||
self.f.setStrokeColor(make_color(font.get_color()))
|
||||
|
||||
self.left_print(text,font,x*cm,y*cm)
|
||||
|
||||
def center_print(self,lines,font,x,y,w,h):
|
||||
l = len(lines)
|
||||
size = font.get_size()
|
||||
start_y = (y + h/2.0 + l/2.0 + l) - ((l*size) + ((l-1)*0.2))/2.0
|
||||
start_x = (x + w/2.0)
|
||||
|
||||
self.f.saveState()
|
||||
self.f.setFillColor(make_color(font.get_color()))
|
||||
if font.get_type_face() == FONT_SANS_SERIF:
|
||||
if font.get_bold():
|
||||
self.f.setFont("Helvetica-Bold",font.get_size())
|
||||
else:
|
||||
self.f.setFont("Helvetica",font.get_size())
|
||||
else:
|
||||
if font.get_bold():
|
||||
self.f.setFont("Times-Bold",font.get_size())
|
||||
else:
|
||||
self.f.setFont("Times-Roman",font.get_size())
|
||||
|
||||
for text in lines:
|
||||
self.f.drawCentredString(start_x,start_y,text)
|
||||
start_y = start_y + size*1.2
|
||||
start_y = start_y + size*1.2
|
||||
|
||||
self.f.restoreState()
|
||||
|
||||
def left_print(self,text,font,x,y):
|
||||
size = font.get_size()
|
||||
start_y = y
|
||||
start_x = x
|
||||
|
||||
self.f.saveState()
|
||||
self.f.setFillColor(make_color(font.get_color()))
|
||||
if font.get_type_face() == FONT_SANS_SERIF:
|
||||
if font.get_bold():
|
||||
self.f.setFont("Helvetica-Bold",font.get_size())
|
||||
else:
|
||||
self.f.setFont("Helvetica",font.get_size())
|
||||
else:
|
||||
if font.get_bold():
|
||||
self.f.setFont("Times-Bold",font.get_size())
|
||||
else:
|
||||
self.f.setFont("Times-Roman",font.get_size())
|
||||
|
||||
self.f.drawString(start_x,start_y,text)
|
||||
self.f.restoreState()
|
||||
|
||||
Plugins.register_draw_doc(_("PDF"),PdfDrawDoc);
|
Reference in New Issue
Block a user