/// <summary> /// Gets the resource name of the specified form within this dictionary. /// </summary> internal string GetFormName(XForm form) { PdfFormXObject pdfForm = _document.FormTable.GetForm(form); Debug.Assert(pdfForm != null); string name = Resources.AddForm(pdfForm); return(name); }
/// <summary> /// Initializes a new instance of this class with the document the objects are imported from. /// </summary> public PdfImportedObjectTable(PdfDocument owner, PdfDocument externalDocument) { if (owner == null) throw new ArgumentNullException("owner"); if (externalDocument == null) throw new ArgumentNullException("externalDocument"); _owner = owner; _externalDocumentHandle = externalDocument.Handle; _xObjects = new PdfFormXObject[externalDocument.PageCount]; }
/// <summary> /// Initializes a new instance of this class with the document the objects are imported from. /// </summary> public PdfImportedObjectTable(PdfDocument owner, PdfDocument externalDocument) { if (owner == null) { throw new ArgumentNullException("owner"); } if (externalDocument == null) { throw new ArgumentNullException("externalDocument"); } _owner = owner; _externalDocumentHandle = externalDocument.Handle; _xObjects = new PdfFormXObject[externalDocument.PageCount]; }
/// <summary> /// Adds the specified form object to this resource dictionary /// and returns its local resource name. /// </summary> public string AddForm(PdfFormXObject form) { string name; if (!_resources.TryGetValue(form, out name)) { name = NextFormName; _resources[form] = name; if (form.Reference == null) { Owner._irefTable.Add(form); } XObjects.Elements[name] = form.Reference; } return(name); }
/// <summary> /// Gets a PdfFormXObject from an XPdfForm. Because the returned objects must be unique, always /// a new instance of PdfFormXObject is created if none exists for the specified form. /// </summary> public PdfFormXObject GetForm(XForm form) { // If the form already has a PdfFormXObject, return it. if (form._pdfForm != null) { Debug.Assert(form.IsTemplate, "An XPdfForm must not have a PdfFormXObject."); if (ReferenceEquals(form._pdfForm.Owner, Owner)) { return(form._pdfForm); } //throw new InvalidOperationException("Because of a current limitation of PDFsharp an XPdfForm object can be used only within one single PdfDocument."); // Dispose PdfFromXObject when document has changed form._pdfForm = null; } XPdfForm pdfForm = form as XPdfForm; if (pdfForm != null) { // Is the external PDF file from which is imported already known for the current document? Selector selector = new Selector(form); PdfImportedObjectTable importedObjectTable; if (!_forms.TryGetValue(selector, out importedObjectTable)) { // No: Get the external document from the form and create ImportedObjectTable. PdfDocument doc = pdfForm.ExternalDocument; importedObjectTable = new PdfImportedObjectTable(Owner, doc); _forms[selector] = importedObjectTable; } PdfFormXObject xObject = importedObjectTable.GetXObject(pdfForm.PageNumber); if (xObject == null) { xObject = new PdfFormXObject(Owner, importedObjectTable, pdfForm); importedObjectTable.SetXObject(pdfForm.PageNumber, xObject); } return(xObject); } Debug.Assert(form.GetType() == typeof(XForm)); form._pdfForm = new PdfFormXObject(Owner, form); return(form._pdfForm); }
/// <summary> /// Gets a PdfFormXObject from an XPdfForm. Because the returned objects must be unique, always /// a new instance of PdfFormXObject is created if none exists for the specified form. /// </summary> public PdfFormXObject GetForm(XForm form) { // If the form already has a PdfFormXObject, return it. if (form._pdfForm != null) { Debug.Assert(form.IsTemplate, "An XPdfForm must not have a PdfFormXObject."); if (ReferenceEquals(form._pdfForm.Owner, Owner)) return form._pdfForm; //throw new InvalidOperationException("Because of a current limitation of PDFsharp an XPdfForm object can be used only within one single PdfDocument."); // Dispose PdfFromXObject when document has changed form._pdfForm = null; } XPdfForm pdfForm = form as XPdfForm; if (pdfForm != null) { // Is the external PDF file from which is imported already known for the current document? Selector selector = new Selector(form); PdfImportedObjectTable importedObjectTable; if (!_forms.TryGetValue(selector, out importedObjectTable)) { // No: Get the external document from the form and create ImportedObjectTable. PdfDocument doc = pdfForm.ExternalDocument; importedObjectTable = new PdfImportedObjectTable(Owner, doc); _forms[selector] = importedObjectTable; } PdfFormXObject xObject = importedObjectTable.GetXObject(pdfForm.PageNumber); if (xObject == null) { xObject = new PdfFormXObject(Owner, importedObjectTable, pdfForm); importedObjectTable.SetXObject(pdfForm.PageNumber, xObject); } return xObject; } Debug.Assert(form.GetType() == typeof(XForm)); form._pdfForm = new PdfFormXObject(Owner, form); return form._pdfForm; }
/// <summary> /// Adds the specified form object to this resource dictionary /// and returns its local resource name. /// </summary> public string AddForm(PdfFormXObject form) { string name; if (!this.resources.TryGetValue(form, out name)) { name = NextFormName; this.resources[form] = name; if (form.Reference == null) Owner.irefTable.Add(form); XObjects.Elements[name] = form.Reference; } return name; }
public void SetXObject(int pageNumber, PdfFormXObject xObject) { _xObjects[pageNumber - 1] = xObject; }
/// <summary> /// Creates the normal appearance form X object for the annotation that represents /// this acro form text field. /// </summary> void RenderAppearance() { #if true_ PdfFormXObject xobj = new PdfFormXObject(Owner); Owner.Internals.AddObject(xobj); xobj.Elements["/BBox"] = new PdfLiteral("[0 0 122.653 12.707]"); xobj.Elements["/FormType"] = new PdfLiteral("1"); xobj.Elements["/Matrix"] = new PdfLiteral("[1 0 0 1 0 0]"); PdfDictionary res = new PdfDictionary(Owner); xobj.Elements["/Resources"] = res; res.Elements["/Font"] = new PdfLiteral("<< /Helv 28 0 R >> /ProcSet [/PDF /Text]"); xobj.Elements["/Subtype"] = new PdfLiteral("/Form"); xobj.Elements["/Type"] = new PdfLiteral("/XObject"); string s = "/Tx BMC " + '\n' + "q" + '\n' + "1 1 120.653 10.707 re" + '\n' + "W" + '\n' + "n" + '\n' + "BT" + '\n' + "/Helv 7.93 Tf" + '\n' + "0 g" + '\n' + "2 3.412 Td" + '\n' + "(Hello ) Tj" + '\n' + "20.256 0 Td" + '\n' + "(XXX) Tj" + '\n' + "ET" + '\n' + "Q" + '\n' + "";//"EMC"; int length = s.Length; byte[] stream = new byte[length]; for (int idx = 0; idx < length; idx++) stream[idx] = (byte)s[idx]; xobj.CreateStream(stream); // Get existing or create new appearance dictionary PdfDictionary ap = Elements[PdfAnnotation.Keys.AP] as PdfDictionary; if (ap == null) { ap = new PdfDictionary(_document); Elements[PdfAnnotation.Keys.AP] = ap; } // Set XRef to normal state ap.Elements["/N"] = xobj.Reference; //// HACK //string m = //"<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>" + '\n' + //"<x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"Adobe XMP Core 4.0-c321 44.398116, Tue Aug 04 2009 14:24:39\"> " + '\n' + //" <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"> " + '\n' + //" <rdf:Description rdf:about=\"\" " + '\n' + //" xmlns:pdf=\"http://ns.adobe.com/pdf/1.3/\"> " + '\n' + //" <pdf:Producer>PDFsharp 1.40.2150-g (www.pdfsharp.com) (Original: Powered By Crystal)</pdf:Producer> " + '\n' + //" </rdf:Description> " + '\n' + //" <rdf:Description rdf:about=\"\" " + '\n' + //" xmlns:xap=\"http://ns.adobe.com/xap/1.0/\"> " + '\n' + //" <xap:ModifyDate>2011-07-11T23:15:09+02:00</xap:ModifyDate> " + '\n' + //" <xap:CreateDate>2011-05-19T16:26:51+03:00</xap:CreateDate> " + '\n' + //" <xap:MetadataDate>2011-07-11T23:15:09+02:00</xap:MetadataDate> " + '\n' + //" <xap:CreatorTool>Crystal Reports</xap:CreatorTool> " + '\n' + //" </rdf:Description> " + '\n' + //" <rdf:Description rdf:about=\"\" " + '\n' + //" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"> " + '\n' + //" <dc:format>application/pdf</dc:format> " + '\n' + //" </rdf:Description> " + '\n' + //" <rdf:Description rdf:about=\"\" " + '\n' + //" xmlns:xapMM=\"http://ns.adobe.com/xap/1.0/mm/\"> " + '\n' + //" <xapMM:DocumentID>uuid:68249d89-baed-4384-9a2d-fbf8ace75c45</xapMM:DocumentID> " + '\n' + //" <xapMM:InstanceID>uuid:3d5f2f46-c140-416f-baf2-7f9c970cef1d</xapMM:InstanceID> " + '\n' + //" </rdf:Description> " + '\n' + //" </rdf:RDF> " + '\n' + //"</x:xmpmeta> " + '\n' + //" " + '\n' + //" " + '\n' + //" " + '\n' + //" " + '\n' + //" " + '\n' + //" " + '\n' + //" " + '\n' + //" " + '\n' + //" " + '\n' + //" " + '\n' + //"<?xpacket end=\"w\"?>"; //PdfDictionary mdict = (PdfDictionary)_document.Internals.GetObject(new PdfObjectID(32)); //length = m.Length; //stream = new byte[length]; //for (int idx = 0; idx < length; idx++) // stream[idx] = (byte)m[idx]; //mdict.Stream.Value = stream; #else PdfRectangle rect = Elements.GetRectangle(PdfAnnotation.Keys.Rect); XForm form = new XForm(_document, rect.Size); XGraphics gfx = XGraphics.FromForm(form); if (_backColor != XColor.Empty) gfx.DrawRectangle(new XSolidBrush(BackColor), rect.ToXRect() - rect.Location); string text = Text; if (text.Length > 0) gfx.DrawString(Text, Font, new XSolidBrush(ForeColor), rect.ToXRect() - rect.Location + new XPoint(2, 0), XStringFormats.TopLeft); form.DrawingFinished(); form.PdfForm.Elements.Add("/FormType", new PdfLiteral("1")); // Get existing or create new appearance dictionary. PdfDictionary ap = Elements[PdfAnnotation.Keys.AP] as PdfDictionary; if (ap == null) { ap = new PdfDictionary(_document); Elements[PdfAnnotation.Keys.AP] = ap; } // Set XRef to normal state ap.Elements["/N"] = form.PdfForm.Reference; PdfFormXObject xobj = form.PdfForm; string s = xobj.Stream.ToString(); // Thank you Adobe: Without putting the content in 'EMC brackets' // the text is not rendered by PDF Reader 9 or higher. s = "/Tx BMC\n" + s + "\nEMC"; xobj.Stream.Value = new RawEncoding().GetBytes(s); #endif }
/// <summary> /// Adds the specified form object to this resource dictionary /// and returns its local resource name. /// </summary> public string AddForm(PdfFormXObject form) { string name = (string)this.resources[form]; if (name == null) { name = NextFormName; this.resources[form] = name; if (form.Reference == null) this.Owner.irefTable.Add(form); XObjects.Elements[name] = form.Reference; } return name; }
/// <summary> /// Initializes a new instance of the XForm class such that it can be drawn on the specified graphics /// object. /// </summary> /// <param name="gfx">The graphics object that later is used to draw this form.</param> /// <param name="size">The size in points of the form.</param> public XForm(XGraphics gfx, XSize size) { if (gfx == null) throw new ArgumentNullException("gfx"); if (size.Width < 1 || size.Height < 1) throw new ArgumentNullException("size", "The size of the XPdfForm is to small."); _formState = FormState.Created; //templateSize = size; _viewBox.Width = size.Width; _viewBox.Height = size.Height; // If gfx belongs to a PdfPage also create the PdfFormXObject if (gfx.PdfPage != null) { _document = gfx.PdfPage.Owner; _pdfForm = new PdfFormXObject(_document, this); PdfRectangle rect = new PdfRectangle(new XPoint(), size); _pdfForm.Elements.SetRectangle(PdfFormXObject.Keys.BBox, rect); } }
/// <summary> /// Initializes a new instance of the <see cref="XForm"/> class that represents a page of a PDF document. /// </summary> /// <param name="document">The PDF document.</param> /// <param name="viewBox">The view box of the page.</param> public XForm(PdfDocument document, XRect viewBox) { if (viewBox.Width < 1 || viewBox.Height < 1) throw new ArgumentNullException("viewBox", "The size of the XPdfForm is to small."); // I must tie the XPdfForm to a document immediately, because otherwise I would have no place where // to store the resources. if (document == null) throw new ArgumentNullException("document", "An XPdfForm template must be associated with a document at creation time."); _formState = FormState.Created; _document = document; _pdfForm = new PdfFormXObject(document, this); //_templateSize = size; _viewBox = viewBox; PdfRectangle rect = new PdfRectangle(viewBox); _pdfForm.Elements.SetRectangle(PdfFormXObject.Keys.BBox, rect); }
public void SetXObject(int pageNumber, PdfFormXObject xObject) { this.xObjects[pageNumber - 1] = xObject; }