1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
from reportlab.lib.testutils import setOutDir,makeSuiteForClasses, outputfile, printLocation
setOutDir(__name__)
import os
import unittest
from reportlab.pdfgen.canvas import Canvas
from reportlab.pdfbase import pdfmetrics
from tests.test_pdfbase_pdfmetrics import makeWidthTestForAllGlyphs
class EmbeddingTestCase(unittest.TestCase):
"Make documents with embedded fonts"
def test0(self):
"""Make documents with embedded fonts.
Just vam Rossum has kindly donated a font which we may use
for testing purposes. You need to contact him at just@letterror.com
if you want to use it for real."""
#LettError fonts should always be there. The others are voluntary.
ok = 1
c = Canvas(outputfile('test_pdfbase_fontembed.pdf'))
c.setPageCompression(0)
c.setFont('Helvetica', 12)
c.drawString(100, 700, 'This is Helvetica. The text below should be different fonts...')
if os.path.isfile('GDB_____.AFM') and os.path.isfile('GDB_____.PFB'):
# a normal text font
garaFace = pdfmetrics.EmbeddedType1Face('GDB_____.AFM','GDB_____.PFB')
faceName = 'AGaramond-Bold' # pulled from AFM file
pdfmetrics.registerTypeFace(garaFace)
garaFont = pdfmetrics.Font('MyGaramondBold', faceName, 'WinAnsiEncoding')
pdfmetrics.registerFont(garaFont)
c.setFont('AGaramond-Bold', 12)
c.drawString(100, 650, 'This should be in AGaramond-Bold')
if os.path.isfile('CR______.AFM') and os.path.isfile('CR______.PFB'):
# one with a custom encoding
cartaFace = pdfmetrics.EmbeddedType1Face('CR______.AFM','CR______.PFB')
faceName = 'Carta' # pulled from AFM file
pdfmetrics.registerTypeFace(cartaFace)
cartaFont = pdfmetrics.Font('Carta', 'Carta', 'CartaEncoding')
pdfmetrics.registerFont(cartaFont)
text = 'This should be in Carta, a map symbol font:'
c.setFont('Helvetica', 12)
c.drawString(100, 600, text)
w = c.stringWidth(text, 'Helvetica', 12)
c.setFont('Carta', 12)
c.drawString(100+w, 600, ' Hello World')
# LettError sample - creates on demand, we hope
y = 550
## dgmkFace = pdfmetrics.EmbeddedType1Face('DarkGardenMK.afm','DarkGardenMK.PFB')
##
## faceName = 'DarkGardenMK' # pulled from AFM file
## pdfmetrics.registerTypeFace(dgmkFace)
##
## dgmkFont = pdfmetrics.Font('DarkGardenMK', faceName, 'WinAnsiEncoding')
## pdfmetrics.registerFont(dgmk)
c.setFont('DarkGardenMK', 12)
c.drawString(100, y, 'This should be in DarkGardenMK')
def testNamedFont(canv, fontName):
canv.showPage()
makeWidthTestForAllGlyphs(canv, fontName, outlining=0)
testNamedFont(c, 'DarkGardenMK')
c.showPage()
#this tests FontSpecificEncoding
afmFile = 'callig15.afm'
pfbFile = 'callig15.pfb'
face = pdfmetrics.EmbeddedType1Face(afmFile, pfbFile)
faceName = 'CALLIG15'
pdfmetrics.registerTypeFace(face)
font = pdfmetrics.Font(faceName, faceName, face.requiredEncoding,
substitutionFonts = pdfmetrics.standardT1SubstitutionFonts)
pdfmetrics.registerFont(font)
c.setFont('CALLIG15', 20)
c.drawString(10, y, 'This should be in CALLIG15')
c.drawString(10, y-24, b'This should be drawn in')
c.drawString(10, y-48, u'This should be drawn in')
c.drawString(10, y-72, 'the font Callig15')
testNamedFont(c, 'CALLIG15')
c.save()
def makeSuite():
return makeSuiteForClasses(EmbeddingTestCase)
#noruntests
if __name__ == "__main__":
unittest.TextTestRunner().run(makeSuite())
printLocation()
|