// --------------------------------------------------------------------------- public byte[] CreatePdf() { using (MemoryStream ms = new MemoryStream()) { using (document = new Document(PageSize.A5)) { // step 2 writer = PdfWriter.GetInstance(document, ms); writer.SetTagged(); // step 3 document.Open(); // step 4 PdfStructureTreeRoot root = writer.StructureTreeRoot; root.MapRole(new PdfName("chapter"), PdfName.SECT); root.MapRole(new PdfName("title"), PdfName.H); root.MapRole(new PdfName("para"), PdfName.P); top = new PdfStructureElement( root, new PdfName("chapter") ); canvas = writer.DirectContent; column = new ColumnText(canvas); column.SetSimpleColumn(36, 36, 384, 569); font = new Font( BaseFont.CreateFont( "c:/windows/fonts/arial.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED ), 12 ); using (XmlReader xr = XmlReader.Create(RESOURCE)) { xr.MoveToContent(); while (xr.Read()) { switch (xr.NodeType) { case XmlNodeType.Element: StartElement(xr.Name); break; case XmlNodeType.Text: buf.Append(Regex.Replace(xr.Value.Trim(), "\n", " ")); break; case XmlNodeType.EndElement: EndElement(xr.Name); break; } } } } return(ms.ToArray()); } }
/// <summary> /// Dispatches PrepareForSave to the objects that need it. /// </summary> internal override void PrepareForSave() { var pages = _pages; //We need the pages when saving but they are available only when CanModify yet when Pages is populated, the ability to modify may become possible even when !CanModify. //By using a local copy of PdfPages, we can switch to an unexposed copy during !CanModify. if (!Owner.CanModify && _pages == null) { pages = (PdfPages)Elements.GetValue(Keys.Pages, VCF.CreateIndirect); if (Owner.IsImported) { pages.FlattenPageTree(); } } // Prepare pages. if (pages != null) { pages.PrepareForSave(); } // Create outline objects. if (_outline != null && _outline.Outlines.Count > 0) { if (Elements[Keys.PageMode] == null) { PageMode = PdfPageMode.UseOutlines; } _outline.PrepareForSave(); } // Clean up structure tree root. PdfStructureTreeRoot str = Elements.GetObject(Keys.StructTreeRoot) as PdfStructureTreeRoot; if (str != null) { str.PrepareForSave(); } }
// --------------------------------------------------------------------------- public void Write(Stream stream) { // step 1 using (Document document = new Document()) { // step 2 PdfWriter writer = PdfWriter.GetInstance(document, stream); writer.SetTagged(); writer.UserProperties = true; // step 3 document.Open(); // step 4 PdfStructureTreeRoot tree = writer.StructureTreeRoot; PdfStructureElement top = new PdfStructureElement( tree, new PdfName("Directors") ); Dictionary <int, PdfStructureElement> directors = new Dictionary <int, PdfStructureElement>(); int id; Director director; PdfStructureElement e; DbProviderFactory dbp = AdoDB.Provider; using (var c = dbp.CreateConnection()) { c.ConnectionString = AdoDB.CS; using (DbCommand cmd = c.CreateCommand()) { cmd.CommandText = SELECTDIRECTORS; c.Open(); using (var r = cmd.ExecuteReader()) { while (r.Read()) { id = Convert.ToInt32(r["id"]); director = PojoFactory.GetDirector(r); e = new PdfStructureElement(top, new PdfName("director" + id)); PdfDictionary userproperties = new PdfDictionary(); userproperties.Put(PdfName.O, PdfName.USERPROPERTIES); PdfArray properties = new PdfArray(); PdfDictionary property1 = new PdfDictionary(); property1.Put(PdfName.N, new PdfString("Name")); property1.Put(PdfName.V, new PdfString(director.Name)); properties.Add(property1); PdfDictionary property2 = new PdfDictionary(); property2.Put(PdfName.N, new PdfString("Given name")); property2.Put(PdfName.V, new PdfString(director.GivenName)); properties.Add(property2); PdfDictionary property3 = new PdfDictionary(); property3.Put(PdfName.N, new PdfString("Posters")); property3.Put(PdfName.V, new PdfNumber(Convert.ToInt32(r["c"]))); properties.Add(property3); userproperties.Put(PdfName.P, properties); e.Put(PdfName.A, userproperties); directors.Add(id, e); } } } } Dictionary <Movie, int> map = new Dictionary <Movie, int>(); for (int i = 1; i < 8; i++) { foreach (Movie movie in PojoFactory.GetMovies(i)) { map.Add(movie, i); } } PdfContentByte canvas = writer.DirectContent; Image img; float x = 11.5f; float y = 769.7f; string RESOURCE = Utility.ResourcePosters; foreach (var entry in map.Keys) { img = Image.GetInstance(Path.Combine(RESOURCE, entry.Imdb + ".jpg")); img.ScaleToFit(1000, 60); img.SetAbsolutePosition(x + (45 - img.ScaledWidth) / 2, y); canvas.BeginMarkedContentSequence(directors[map[entry]]); canvas.AddImage(img); canvas.EndMarkedContentSequence(); x += 48; if (x > 578) { x = 11.5f; y -= 84.2f; } } } }
// =========================================================================== public void Write(Stream stream) { // step 1 using (Document document = new Document()) { // step 2 PdfWriter writer = PdfWriter.GetInstance(document, stream); writer.SetTagged(); // step 3 document.Open(); // step 4 PdfContentByte cb = writer.DirectContent; BaseFont bf = BaseFont.CreateFont( BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED ); BaseFont bf2 = BaseFont.CreateFont( "c:/windows/fonts/msgothic.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED ); PdfStructureTreeRoot root = writer.StructureTreeRoot; PdfStructureElement div = new PdfStructureElement( root, new PdfName("Div") ); PdfDictionary dict; cb.BeginMarkedContentSequence(div); cb.BeginText(); cb.MoveText(36, 788); cb.SetFontAndSize(bf, 12); cb.SetLeading(18); cb.ShowText("These are some famous movies by Stanley Kubrick: "); dict = new PdfDictionary(); dict.Put(PdfName.E, new PdfString("Doctor")); cb.BeginMarkedContentSequence(new PdfName("Span"), dict, true); cb.NewlineShowText("Dr."); cb.EndMarkedContentSequence(); cb.ShowText( " Strangelove or: How I Learned to Stop Worrying and Love the Bomb." ); dict = new PdfDictionary(); dict.Put(PdfName.E, new PdfString("Eyes Wide Shut.")); cb.BeginMarkedContentSequence(new PdfName("Span"), dict, true); cb.NewlineShowText("EWS"); cb.EndMarkedContentSequence(); cb.EndText(); dict = new PdfDictionary(); dict.Put(PdfName.LANG, new PdfString("en-us")); dict.Put(new PdfName("Alt"), new PdfString("2001: A Space Odyssey.")); cb.BeginMarkedContentSequence(new PdfName("Span"), dict, true); Image img = Image.GetInstance(Path.Combine( Utility.ResourcePosters, "0062622.jpg" )); img.ScaleToFit(1000, 100); img.SetAbsolutePosition(36, 640); cb.AddImage(img); cb.EndMarkedContentSequence(); cb.BeginText(); cb.MoveText(36, 620); cb.SetFontAndSize(bf, 12); cb.ShowText("This is a movie by Akira Kurosawa: "); dict = new PdfDictionary(); dict.Put(PdfName.ACTUALTEXT, new PdfString("Seven Samurai.")); cb.BeginMarkedContentSequence(new PdfName("Span"), dict, true); cb.SetFontAndSize(bf2, 12); cb.ShowText("\u4e03\u4eba\u306e\u4f8d"); cb.EndMarkedContentSequence(); cb.EndText(); cb.EndMarkedContentSequence(); } }