// Copyright 2005, FreeHEP. package org.freehep.graphicsio.pdf.test; import java.awt.Rectangle; import java.awt.Font; import java.awt.font.FontRenderContext; import java.io.*; import java.util.Calendar; import org.freehep.graphics2d.font.CharTable; import org.freehep.graphics2d.font.Lookup; import org.freehep.graphicsio.font.FontEmbedder; import org.freehep.graphicsio.pdf.PDFFontEmbedderType1; import org.freehep.graphicsio.pdf.PDFFontEmbedderType3; import org.freehep.graphicsio.pdf.PDFWriter; import org.freehep.graphicsio.pdf.PDFDocInfo; import org.freehep.graphicsio.pdf.PDFCatalog; import org.freehep.graphicsio.pdf.PDFViewerPreferences; import org.freehep.graphicsio.pdf.PDFDictionary; import org.freehep.graphicsio.pdf.PDFPageTree; import org.freehep.graphicsio.pdf.PDFPage; import org.freehep.graphicsio.pdf.PDFStream; import org.freehep.graphicsio.pdf.PDFRedundanceTracker; public class TestPDFFontEmbedding { public static void main(String[] argv) { try { PDFWriter pdf = new PDFWriter(new FileOutputStream("fonttest.pdf")); pdf.comment("file generated by TestFontEmbedding, Freehep lib"); // info PDFDocInfo info = pdf.openDocInfo("DocInfo"); info.setTitle("Font Embedding Test"); info.setAuthor("Simon Fischer"); info.setSubject("Test File of the Font Embedding of the FreeHEP library"); info.setKeywords("PDFWriter; FreeHEP"); info.setCreator(TestPDFFontEmbedding.class.getName()); info.setCreationDate(Calendar.getInstance()); pdf.close(info); // catalog PDFCatalog catalog = pdf.openCatalog("Catalog", "RootPage"); catalog.setPageMode("UseOutlines"); catalog.setViewerPreferences("Preferences"); catalog.setOpenAction(new Object[] { pdf.ref("FontPage"), pdf.name("Fit")}); pdf.close(catalog); // preferences PDFViewerPreferences prefs = pdf.openViewerPreferences("Preferences"); prefs.setFitWindow(true); prefs.setCenterWindow(false); pdf.close(prefs); // pages PDFPageTree pages = pdf.openPageTree("RootPage", null); pages.addPage("FontPage"); pages.setMediaBox(0, 0, 612, 792); pages.setResources("Resources"); pdf.close(pages); // page PDFPage fontPage = pdf.openPage("FontPage", "RootPage"); fontPage.setContents("FontPageContent"); pdf.close(fontPage); // first page content PDFStream pageStream = pdf.openStream("FontPageContent", new String[] { "Flate", "ASCIIHex" }); pageStream.move(100,100); pageStream.line(200,200); pageStream.stroke(); pageStream.beginText(); pageStream.font(pdf.name("F1"), 12); pageStream.text(100, 200); pageStream.show("ABC abc!"); pageStream.endText(); CharTable table = Lookup.getInstance().getTable("PDFLatin"); String str = ""; double y = 500; for (int i=1; i<256; i++) { String name = table.toName(i); if (name != null) str += table.toUnicode(name); else str += "#"; if ((str.length() % 32 == 31) || (i == 255)) { pageStream.beginText(); pageStream.font(pdf.name("F1"), 12); pageStream.text(100, y); pageStream.show(str); pageStream.endText(); System.out.println(str); str = ""; y -= 20; } } pdf.close(pageStream); // resources PDFDictionary resources = pdf.openDictionary("Resources"); resources.entry("ProcSet", pdf.ref("OurPageProcSet")); PDFDictionary fontList = resources.openDictionary("Font"); fontList.entry("F1", pdf.ref("MyFont")); resources.close(fontList); pdf.close(resources); pdf.object("OurPageProcSet", new Object[] { pdf.name("PDF") }); PDFRedundanceTracker tracker = new PDFRedundanceTracker(pdf); // font embedding switch (3) { case 1: PDFDictionary fontDict = pdf.openDictionary("MyFont"); fontDict.entry("Type", pdf.name("Font")); fontDict.entry("Subtype", pdf.name("Type1")); fontDict.entry("Name", pdf.name("F1")); fontDict.entry("BaseFont", pdf.name("Helvetica")); pdf.close(fontDict); break; case 2: Font font = new Font("Monotype Corsiva", Font.PLAIN, 1000); FontRenderContext context = new FontRenderContext(null, true, true); FontEmbedder fe = new PDFFontEmbedderType3(context, pdf, "MyFont", tracker); fe.includeFont(font, Lookup.getInstance().getTable("PDFLatin"), "F1"); break; case 3: font = new Font("Impact", Font.PLAIN, 1000); context = new FontRenderContext(null, true, true); fe = PDFFontEmbedderType1.create(context, pdf, "MyFont", tracker); fe.includeFont(font, Lookup.getInstance().getTable("PDFLatin"), "F1"); break; } tracker.writeAll(); pdf.close(); System.exit(0); } catch (Exception e) { e.printStackTrace(); } } }