private void RefreshAppearance( ) { Widget widget = Widgets[0]; FormXObject normalAppearance; { AppearanceStates normalAppearances = widget.Appearance.Normal; normalAppearance = normalAppearances[null]; if (normalAppearance == null) { normalAppearances[null] = normalAppearance = new FormXObject(Document, widget.Box.Size); } } PdfName fontName = null; double fontSize = 0; { PdfString defaultAppearanceState = DefaultAppearanceState; if (defaultAppearanceState == null) { // Retrieving the font to define the default appearance... fonts::Font defaultFont = null; PdfName defaultFontName = null; { // Field fonts. FontResources normalAppearanceFonts = normalAppearance.Resources.Fonts; foreach (KeyValuePair <PdfName, fonts::Font> entry in normalAppearanceFonts) { if (!entry.Value.Symbolic) { defaultFont = entry.Value; defaultFontName = entry.Key; break; } } if (defaultFontName == null) { // Common fonts. FontResources formFonts = Document.Form.Resources.Fonts; foreach (KeyValuePair <PdfName, fonts::Font> entry in formFonts) { if (!entry.Value.Symbolic) { defaultFont = entry.Value; defaultFontName = entry.Key; break; } } if (defaultFontName == null) { //TODO:manage name collision! formFonts[ defaultFontName = new PdfName("default") ] = defaultFont = new fonts::StandardType1Font( Document, fonts::StandardType1Font.FamilyEnum.Helvetica, false, false ); } normalAppearanceFonts[defaultFontName] = defaultFont; } } bytes::Buffer buffer = new bytes::Buffer(); new SetFont(defaultFontName, IsMultiline ? 10 : 0).WriteTo(buffer, Document); widget.BaseDataObject[PdfName.DA] = defaultAppearanceState = new PdfString(buffer.ToByteArray()); } // Retrieving the font to use... ContentParser parser = new ContentParser(defaultAppearanceState.ToByteArray()); foreach (ContentObject content in parser.ParseContentObjects()) { if (content is SetFont) { SetFont setFontOperation = (SetFont)content; fontName = setFontOperation.Name; fontSize = setFontOperation.Size; break; } } normalAppearance.Resources.Fonts[fontName] = Document.Form.Resources.Fonts[fontName]; } // Refreshing the field appearance... /* * TODO: resources MUST be resolved both through the apperance stream resource dictionary and * from the DR-entry acroform resource dictionary */ PrimitiveComposer baseComposer = new PrimitiveComposer(normalAppearance); BlockComposer composer = new BlockComposer(baseComposer); ContentScanner currentLevel = composer.Scanner; bool textShown = false; while (currentLevel != null) { if (!currentLevel.MoveNext()) { currentLevel = currentLevel.ParentLevel; continue; } ContentObject content = currentLevel.Current; if (content is MarkedContent) { MarkedContent markedContent = (MarkedContent)content; if (PdfName.Tx.Equals(((BeginMarkedContent)markedContent.Header).Tag)) { // Remove old text representation! markedContent.Objects.Clear(); // Add new text representation! baseComposer.Scanner = currentLevel.ChildLevel; // Ensures the composer places new contents within the marked content block. ShowText(composer, fontName, fontSize); textShown = true; } } else if (content is Text) { currentLevel.Remove(); } else if (currentLevel.ChildLevel != null) { currentLevel = currentLevel.ChildLevel; } } if (!textShown) { baseComposer.BeginMarkedContent(PdfName.Tx); ShowText(composer, fontName, fontSize); baseComposer.End(); } baseComposer.Flush(); }
private void Apply( CheckBox field ) { Document document = field.Document; foreach (Widget widget in field.Widgets) { { PdfDictionary widgetDataObject = widget.BaseDataObject; widgetDataObject[PdfName.DA] = new PdfString("/ZaDb 0 Tf 0 0 0 rg"); widgetDataObject[PdfName.MK] = new PdfDictionary( new PdfName[] { PdfName.BG, PdfName.BC, PdfName.CA }, new PdfDirectObject[] { new PdfArray(new PdfDirectObject[] { PdfReal.Get(0.9412), PdfReal.Get(0.9412), PdfReal.Get(0.9412) }), new PdfArray(new PdfDirectObject[] { PdfInteger.Default, PdfInteger.Default, PdfInteger.Default }), new PdfString("4") } ); widgetDataObject[PdfName.BS] = new PdfDictionary( new PdfName[] { PdfName.W, PdfName.S }, new PdfDirectObject[] { PdfReal.Get(0.8), PdfName.S } ); widgetDataObject[PdfName.H] = PdfName.P; } Appearance appearance = widget.Appearance; AppearanceStates normalAppearance = appearance.Normal; SKSize size = widget.Box.Size; FormXObject onState = new FormXObject(document, size); normalAppearance[PdfName.Yes] = onState; //TODO:verify!!! // appearance.getRollover().put(PdfName.Yes,onState); // appearance.getDown().put(PdfName.Yes,onState); // appearance.getRollover().put(PdfName.Off,offState); // appearance.getDown().put(PdfName.Off,offState); float lineWidth = 1; SKRect frame = SKRect.Create(lineWidth / 2, lineWidth / 2, size.Width - lineWidth, size.Height - lineWidth); { PrimitiveComposer composer = new PrimitiveComposer(onState); if (GraphicsVisibile) { composer.BeginLocalState(); composer.SetLineWidth(lineWidth); composer.SetFillColor(BackColor); composer.SetStrokeColor(ForeColor); composer.DrawRectangle(frame, 5); composer.FillStroke(); composer.End(); } BlockComposer blockComposer = new BlockComposer(composer); blockComposer.Begin(frame, XAlignmentEnum.Center, YAlignmentEnum.Middle); composer.SetFillColor(ForeColor); composer.SetFont( new StandardType1Font( document, StandardType1Font.FamilyEnum.ZapfDingbats, true, false ), size.Height * 0.8 ); blockComposer.ShowText(new String(new char[] { CheckSymbol })); blockComposer.End(); composer.Flush(); } FormXObject offState = new FormXObject(document, size); normalAppearance[PdfName.Off] = offState; { if (GraphicsVisibile) { PrimitiveComposer composer = new PrimitiveComposer(offState); composer.BeginLocalState(); composer.SetLineWidth(lineWidth); composer.SetFillColor(BackColor); composer.SetStrokeColor(ForeColor); composer.DrawRectangle(frame, 5); composer.FillStroke(); composer.End(); composer.Flush(); } } } }
private void Apply( CheckBox field ) { Document document = field.Document; foreach (Widget widget in field.Widgets) { { PdfDictionary widgetDataObject = widget.BaseDataObject; widgetDataObject[PdfName.DA] = new PdfString("/ZaDb 0 Tf 0 0 0 rg"); widgetDataObject[PdfName.MK] = new PdfDictionary( new PdfName[] { PdfName.BG, PdfName.BC, PdfName.CA }, new PdfDirectObject[] { new PdfArray(new PdfDirectObject[] { new PdfReal(0.9412), new PdfReal(0.9412), new PdfReal(0.9412) }), new PdfArray(new PdfDirectObject[] { new PdfInteger(0), new PdfInteger(0), new PdfInteger(0) }), new PdfString("4") } ); widgetDataObject[PdfName.BS] = new PdfDictionary( new PdfName[] { PdfName.W, PdfName.S }, new PdfDirectObject[] { new PdfReal(0.8), PdfName.S } ); widgetDataObject[PdfName.H] = PdfName.P; } Appearance appearance = widget.Appearance; if (appearance == null) { widget.Appearance = appearance = new Appearance(document); } AppearanceStates normalAppearance = appearance.Normal; FormXObject onState = new FormXObject(document); normalAppearance[PdfName.Yes] = onState; //TODO:verify!!! // appearance.getRollover().put(PdfName.Yes,onState); // appearance.getDown().put(PdfName.Yes,onState); // appearance.getRollover().put(PdfName.Off,offState); // appearance.getDown().put(PdfName.Off,offState); SizeF size = widget.Box.Size; RectangleF frame = new RectangleF(0, 0, size.Width, size.Height); { onState.Size = new Size((int)size.Width, (int)size.Height); PrimitiveComposer composer = new PrimitiveComposer(onState); composer.BeginLocalState(); composer.SetFillColor(BackColor); composer.SetStrokeColor(ForeColor); composer.DrawRectangle(frame); composer.FillStroke(); composer.End(); BlockComposer blockComposer = new BlockComposer(composer); blockComposer.Begin(frame, AlignmentXEnum.Center, AlignmentYEnum.Middle); composer.SetFillColor(ForeColor); composer.SetFont( new StandardType1Font( document, StandardType1Font.FamilyEnum.ZapfDingbats, true, false ), size.Height * 0.8f ); blockComposer.ShowText(new String(new char[] { CheckSymbol })); blockComposer.End(); composer.Flush(); } FormXObject offState = new FormXObject(document); normalAppearance[PdfName.Off] = offState; { offState.Size = new Size((int)size.Width, (int)size.Height); PrimitiveComposer composer = new PrimitiveComposer(offState); composer.BeginLocalState(); composer.SetFillColor(BackColor); composer.SetStrokeColor(ForeColor); composer.DrawRectangle(frame); composer.FillStroke(); composer.End(); composer.Flush(); } } }