c# pdf to image pdfsharp : Create a fillable pdf form software SDK dll windows winforms html web forms sphinx16-part766

Sphinx Documentation, Release 1.4.1
There arenodes provided bydocutils, which are documentedinthedocutilsdocumentation
173
.
Additional nodes areprovided by Sphinx anddocumentedhere.
During reading, the build environment is updated with all meta- and cross reference data of
the read documents, such as labels,thenames of headings, described Python objects and index
entries. This will later be used to replacethetemporary nodes.
The parsed doctrees are stored on the disk, because it is not possible to hold all of them in
memory.
Phase 2: Consistency checks
Some checkingis done to ensureno surprises in thebuilt documents.
Phase 3: Resolving
Now that the metadata and cross-reference data of all existing documents is known, all tem-
porary nodes are replaced by nodes that can be converted into output. For example, links are
created forobject references that exist, and simpleliteral nodes arecreated for thosethat don’t.
Phase 4: Writing
Thisphase convertstheresolved doctreestothedesired outputformat,such as HTML orLaTeX.
This happens via aso-called docutils writerthat visits the individual nodes of each doctreeand
produces some outputin the process.
Note: Some builders deviate from this general build plan, for example, the builder that checks external
links doesnot need anything more than theparsed doctrees and therefore does nothave phases 2–4.
Extension Design
We want the extension to add the following to Sphinx:
• A “todo” directive, containing some content that is marked with “TODO”, and only shown in the
outputif a new config value is set. (Todo entries should not be in the output by default.)
• A “todolist” directive that creates a list of all todo entriesthroughout the documentation.
Forthat, we will need toadd thefollowingelements to Sphinx:
• New directives, called todo and todolist.
• New document tree nodes to represent these directives, conventionally also called todo and
todolist. We wouldn’t need new nodes if the new directives only produced some content rep-
resentable byexisting nodes.
• A new config value todo_include_todos (config value names should start with the extension
name,in order tostay unique) thatcontrols whether todo entries makeit intothe output.
• New event handlers: one for thedoctree-resolved event, toreplace the todoand todolist nodes,
and one forenv-purge-doc (the reason forthat will be covered later).
The Setup Function
The new elements are added in the extension’s setup function. Let us create a new Python module called
todo.py and add the setup function:
173
http://docutils.sourceforge.net/docs/ref/doctree.html
15.2. APIs used for writing extensions
155
Create a fillable pdf form - C# PDF Form Data fill-in Library: auto fill-in PDF form data in C#.net, ASP.NET, MVC, WinForms, WPF
Online C# Tutorial to Automatically Fill in Field Data to PDF
create a fillable pdf form; asp.net fill pdf form
Create a fillable pdf form - VB.NET PDF Form Data fill-in library: auto fill-in PDF form data in vb.net, ASP.NET, MVC, WinForms, WPF
VB.NET PDF Form Data fill-in library: auto fill-in PDF form data in vb.net, ASP.NET, MVC, WinForms, WPF
convert word document to pdf fillable form; pdf fill form
Sphinx Documentation, Release 1.4.1
def setup(app):
app.add_config_value('todo_include_todos'False'html')
app.add_node(todolist)
app.add_node(todo,
html=(visit_todo_node, depart_todo_node),
latex=(visit_todo_node, depart_todo_node),
text=(visit_todo_node, depart_todo_node))
app.add_directive('todo', TodoDirective)
app.add_directive('todolist', TodolistDirective)
app.connect('doctree-resolved', process_todo_nodes)
app.connect('env-purge-doc', purge_todos)
return {'version''0.1'}
# identifies the version of our extension
The calls in this function refer to classes and functions not yet written. What the individual calls do is the
following:
• add_config_value() lets Sphinx know that it should recognize the new config value
todo_include_todos, whose default value should be False (this also tells Sphinx that it is a
boolean value).
If the third argument was ’html’, HTML documents would be full rebuild if the config value
changed its value. This is needed forconfig valuesthat influence reading (build phase1).
• add_node() adds a new node class to the build system. It also can specify visitor functions for each
supported output format. These visitor functions are needed when the new nodes stay until phase 4
–since the todolist node is always replaced in phase 3,it doesn’tneed any.
We need to create thetwonodeclasses todo and todolist later.
• add_directive() adds a new directive, given by name and class.
The handler functions arecreated later.
• Finally,connect()adds an event handler to theeventwhosenameis givenbythefirstargument. The
event handler function is called with several arguments which are documented with the event.
The Node Classes
Let’sstart with the node classes:
from docutils import nodes
class todo(nodes.Admonition, nodes.Element):
pass
class todolist(nodes.General, nodes.Element):
pass
def visit_todo_node(self, node):
self.visit_admonition(node)
def depart_todo_node(self, node):
self.depart_admonition(node)
156
Chapter 15. Developing extensions for Sphinx
C# Create PDF Library SDK to convert PDF from other file formats
Create fillable PDF document with fields. Load PDF from existing documents and image in SQL server. Load PDF from stream programmatically.
create fillable form from pdf; convert word form to pdf with fillable
VB.NET Create PDF from OpenOffice to convert odt, odp files to PDF
Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process. Create PDF document from OpenOffice Text Document with ODT, ODS, ODP forms into fillable PDF formats
convert excel spreadsheet to fillable pdf form; adding a signature to a pdf form
Sphinx Documentation, Release 1.4.1
Node classes usuallydon’thave to doanything except inheritfrom thestandard docutils classes defined in
docutils.nodes. todo inherits from Admonition because itshould behandled like a note or warning,
todolist is justa “general”node.
Note: Manyextensionswill nothavetocreatetheirownnodeclasses and workfinewith thenodesalready
provided bydocutils
174
andSphinx.
The Directive Classes
Adirective class is a class deriving usually fromdocutils.parsers.rst.Directive. The directive
interface is also covered in detail in thedocutilsdocumentation
175
; the important thing is that the class
should haveattributes thatconfigurethe allowed markup,and a run method thatreturns a list of nodes.
The todolist directiveis quitesimple:
from docutils.parsers.rst import Directive
class TodolistDirective(Directive):
def run(self):
return [todolist('')]
An instance of ourtodolist node class iscreated and returned. The todolist directivehas neithercontent
nor arguments that need to be handled.
The todo directivefunction looks likethis:
from sphinx.util.compat import make_admonition
from sphinx.locale import _
class TodoDirective(Directive):
# this enables content in the directive
has_content True
def run(self):
env self.state.document.settings.env
targetid "todo-%d% env.new_serialno('todo')
targetnode = nodes.target('''', ids=[targetid])
ad = make_admonition(todo, self.name, [_('Todo')], self.options,
self.content, self.lineno, self.content_offset,
self.block_text, self.state, self.state_machine)
if not hasattr(env, 'todo_all_todos'):
env.todo_all_todos = []
env.todo_all_todos.append({
'docname': env.docname,
'lineno'self.lineno,
'todo': ad[0].deepcopy(),
'target': targetnode,
})
174
http://docutils.sourceforge.net/docs/ref/doctree.html
175 http://docutils.sourceforge.net/docs/ref/rst/directives.html
15.2. APIs used for writing extensions
157
C# Create PDF from OpenOffice to convert odt, odp files to PDF in
Create PDF document from OpenOffice Presentation in both .NET WinForms and ASP.NET NET control to change ODT, ODS, ODP forms to fillable PDF formats in Visual
convert word document to fillable pdf form; convert pdf fillable form
VB.NET Create PDF Library SDK to convert PDF from other file
Create fillable PDF document with fields in Visual Basic .NET application. Load PDF from existing documents and image in SQL server.
create pdf fillable form; create a pdf form to fill out and save
Sphinx Documentation, Release 1.4.1
return [targetnode] ad
Several important things are covered here. First, as you can see, you can refer to the build environment
instance usingself.state.document.settings.env.
Then, to act as a link target (from the todolist), the todo directive needs to return a target node in ad-
dition to the todo node. The target ID (in HTML, this will be the anchor name) is generated by using
env.new_serialno which returns a new unique integeroneach call and therefore leadstounique target
names. The targetnodeis instantiated without any text(thefirst two arguments).
An admonition is created using a standard docutils function (wrapped in Sphinx fordocutils cross-version
compatibility). The first argument gives the node class, in our case todo. The third argument gives the
admonition title (use arguments here to let the user specify the title). A list of nodes is returned from
make_admonition.
Then,thetodonode isadded totheenvironment. Thisis needed tobe ableto create alistof all todoentries
throughoutthe documentation, in theplacewhere theauthor puts a todolist directive. For thiscase, the
environment attribute todo_all_todos is used (again, the name should be unique, so it is prefixed by
the extension name). Itdoes not existwhen a new environmentis created, so the directive must check and
create it if necessary. Various information about the todo entry’s location are stored along with a copy of
the node.
In thelast line,the nodesthat should be putinto thedoctree arereturned: the target node and theadmoni-
tion node.
The nodestructurethat thedirective returns lookslikethis:
+--------------------+
target node
|
+--------------------+
+--------------------+
todo node
|
+--------------------+
\__+--------------------+
admonition title
|
+--------------------+
paragraph
|
+--------------------+
| ...
|
+--------------------+
The Event Handlers
Finally, let’s look attheevent handlers. First, theone fortheenv-purge-doc event:
def purge_todos(app, env, docname):
if not hasattr(env, 'todo_all_todos'):
return
env.todo_all_todos = [todo for todo in env.todo_all_todos
if todo['docname'!= docname]
Since we store information from source files in the environment, which is persistent, it may become out of
date when the source file changes. Therefore, before each source file is read, the environment’s records of
it are cleared, and theenv-purge-doc event gives extensions a chance to do the same. Here we clearout
all todos whose docname matches the given one from the todo_all_todos list. If there are todos left in
the document, they will be added again during parsing.
158
Chapter 15. Developing extensions for Sphinx
C# PDF Field Edit Library: insert, delete, update pdf form field
A professional PDF form creator supports to create fillable PDF form in C#.NET. An advanced PDF form maker allows users to create editable PDF form in C#.NET.
convert word doc to fillable pdf form; create a fillable pdf form online
VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to
Convert multiple pages PowerPoint to fillable and editable PDF documents. Easy to create searchable and scanned PDF files from PowerPoint.
create fillable pdf form; fillable pdf forms
Sphinx Documentation, Release 1.4.1
The other handler belongs to thedoctree-resolved event. This event is emitted at the end of phase 3
and allowscustom resolving tobe done:
def process_todo_nodes(app, doctree, fromdocname):
if not app.config.todo_include_todos:
for node in doctree.traverse(todo):
node.parent.remove(node)
# Replace all todolist nodes with a list of the collected todos.
# Augment each todo with a backlink to the original location.
env = app.builder.env
for node in doctree.traverse(todolist):
if not app.config.todo_include_todos:
node.replace_self([])
continue
content = []
for todo_info in env.todo_all_todos:
para = nodes.paragraph()
filename = env.doc2path(todo_info['docname'], base=None)
description = (
_('(The original l entry is s located d in %s, line %d and can be e found '%
(filename, todo_info['lineno']))
para += nodes.Text(description, description)
# Create a reference
newnode = nodes.reference('''')
innernode = nodes.emphasis(_('here'), _('here'))
newnode['refdocname'= todo_info['docname']
newnode['refuri'= app.builder.get_relative_uri(
fromdocname, todo_info['docname'])
newnode['refuri'+= '#' + todo_info['target']['refid']
newnode.append(innernode)
para += newnode
para += nodes.Text('.)''.)')
# Insert into the todolist
content.append(todo_info['todo'])
content.append(para)
node.replace_self(content)
It is a bit more involved. If ournew “todo_include_todos” config value is false, all todo and todolist nodes
areremoved from thedocuments.
If not, todo nodes just stay where and how they are. Todolist nodes are replaced by a list of todo entries,
complete with backlinks to the location where they come from. The list items are composed of the nodes
from the todo entry and docutils nodes created on the fly: a paragraph for each entry, containing text
that gives the location, and a link (reference node containing an italic node) with the backreference. The
reference URI is built by app.builder.get_relative_uri which creates a suitable URI depending on
the used builder, and appending thetodo node’s (the target’s) ID as theanchorname.
15.2. APIs used for writing extensions
159
VB.NET Create PDF from Word Library to convert docx, doc to PDF in
formatting. Create PDF files from both DOC and DOCX formats. Convert multiple pages Word to fillable and editable PDF documents. Professional
adding signature to pdf form; add fillable fields to pdf
VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
Link: Edit URL. Bookmark: Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process. Create fillable and editable PDF documents from Excel in Visual
pdf fillable form; create pdf fill in form
Sphinx Documentation, Release 1.4.1
15.2.2 Application API
Each Sphinx extension is a Python module with at least a setup() function. This function is called at
initialization timewith oneargument,the application object representing the Sphinx process.
class sphinx.application.Sphinx
This application object has the public APIdescribed in thefollowing.
Extension setup
These methods areusually called in an extension’s setup() function.
Examples of usingtheSphinx extension API can be seen in the sphinx.ext package.
Sphinx.setup_extension(name)
Load theextension given by themodule name. Use this if yourextension needs the features provided
byanother extension.
Sphinx.add_builder(builder)
Register a new builder. builder must be a class that inherits fromBuilder.
Sphinx.add_config_value(name, default,rebuild)
Register a configuration value. This is necessary for Sphinx to recognize new values and set default
values accordingly. The name should be prefixed with the extension name, to avoid clashes. The
defaultvalue can be any Python object. The stringvalue rebuild must be one of thosevalues:
•’env’ if a change in the setting only takes effect when a document is parsed – this means that
the whole environment must be rebuilt.
•’html’ if a changein the setting needs a full rebuild of HTML documents.
•’’ ifa changein the setting will not need any special rebuild.
Changed in version 0.4: If the default value is a callable, it will be called with the config object as its
argumentinordertogetthedefaultvalue. This can beused toimplementconfigvalueswhosedefault
depends on othervalues.
Changed in version 0.6: Changed rebuild from a simple boolean (equivalent to ’’ or ’env’) to a
string. However,booleans are still accepted and converted internally.
Sphinx.add_domain(domain)
Makethegivendomain(whichmustbea class;moreprecisely,asubclass ofDomain)knowntoSphinx.
New in version 1.0.
Sphinx.override_domain(domain)
Make the given domain class known to Sphinx, assuming that there is already a domain with its
.name. The new domain mustbea subclass of the existingone.
New in version 1.0.
Sphinx.add_index_to_domain(domain, index)
Add a custom index class to the domain named domain. index mustbea subclass ofIndex.
New in version 1.0.
Sphinx.add_event(name)
Register an event called name. This is needed to be able toemit it.
Sphinx.set_translator(name, translator_class)
Register or override a Docutils translator class. This is used to register a custom output translator
160
Chapter 15. Developing extensions for Sphinx
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
Create fillable and editable PDF documents from Excel in both .NET WinForms and ASP.NET. Create searchable and scanned PDF files from Excel.
create fill in pdf forms; convert excel to fillable pdf form
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
Convert multiple pages PowerPoint to fillable and editable PDF documents. Easy to create searchable and scanned PDF files from PowerPoint.
convert pdf fillable form to html; convert pdf forms to fillable
Sphinx Documentation, Release 1.4.1
or to replace a builtin translator. This allows extensions to use custom translator and define custom
nodes for the translator (seeadd_node()).
This is a API version of html_translator_class for all other builders.
Note that if
html_translator_classisspecifiedandthisAPIiscalledforhtmlrelatedbuilders,APIover-
riding takes precedence.
New in version 1.3.
Sphinx.add_node(node,**kwds)
Register a Docutils node class. This is necessary for Docutils internals. It may also be used in the
future to validatenodes in theparsed documents.
Node visitor functions for the Sphinx HTML, LaTeX, text and manpage writers can be given as
keyword arguments: the keyword should be one or more of ’html’, ’latex’, ’text’, ’man’,
’texinfo’ orany other supported translators, the value a 2-tuple of(visit, depart) methods.
depart can be None if the visit function raises docutils.nodes.SkipNode. Example:
class math(docutils.nodes.Element): pass
def visit_math_html(self, node):
self.body.append(self.starttag(node, 'math'))
def depart_math_html(self, node):
self.body.append('</math>')
app.add_node(math, html=(visit_math_html, depart_math_html))
Obviously, translators for which you don’t specify visitor methods will choke on the node when
encountered in a documenttotranslate.
Changed in version 0.5: Added the support for keyword arguments giving visit functions.
Sphinx.add_enumerable_node(node, figtype, title_getter=None, **kwds)
Register a Docutils node class as a numfig target. Sphinx numbers the node automatically. And then
the users can referit usingnumref.
figtype is a type of enumerable nodes. Each figtypes have individual numbering sequences. As a
system figtypes, figure, table and code-block are defined. It is able to add custom nodes to
these default figtypes. It is alsoable to define new custom figtype if new figtype is given.
title_getter is a getterfunction to obtain the title of node. It takes an instance of the enumerable node,
and it must return its title as string. The title is used to the default title of references forref. By
default, Sphinx searches docutils.nodes.caption or docutils.nodes.title from the node
as a title.
Other keyword arguments are used for node visitor functions. See the Sphinx.add_node() for
details.
New in version 1.4.
Sphinx.add_directive(name, func,content, arguments, **options)
Sphinx.add_directive(name, directiveclass)
Register a Docutils directive. name must be the prospective directive name. There are two possible
ways towritea directive:
•In the docutils 0.4 style, obj is the directive function. content, arguments and options are set as
attributes on the function and determine whether the directive has content, arguments and op-
tions, respectively. This style is deprecated.
•In thedocutils0.5 style,directiveclass is the directive class. It must already haveattributesnamed
has_content,required_arguments,optional_arguments, final_argument_whitespaceandoption_specthat
15.2. APIs used for writing extensions
161
Sphinx Documentation, Release 1.4.1
correspond tothe options forthefunction way. SeetheDocutilsdocs
176
fordetails.
The directive class must inherit from the class docutils.parsers.rst.Directive.
Forexample, the (alreadyexisting)literalinclude directive would beadded like this:
from docutils.parsers.rst import directives
add_directive('literalinclude', literalinclude_directive,
content 0, arguments = (100),
linenos = directives.flag,
language = directives.unchanged,
encoding = directives.encoding)
Changed in version 0.6: Docutils 0.5-style directive classes are now supported.
Sphinx.add_directive_to_domain(domain, name, func, content,arguments,**options)
Sphinx.add_directive_to_domain(domain, name, directiveclass)
Likeadd_directive(),butthedirective is added tothe domain named domain.
New in version 1.0.
Sphinx.add_role(name, role)
Register a Docutils role. name must be the role name that occurs in the source, role the role function
(seetheDocutilsdocumentation
177
on details).
Sphinx.add_role_to_domain(domain, name, role)
Likeadd_role(), but therole is added to thedomain named domain.
New in version 1.0.
Sphinx.add_generic_role(name, nodeclass)
Register a Docutils role thatdoes nothing butwrap its contents in the node given by nodeclass.
New in version 0.6.
Sphinx.add_object_type(directivename,
rolename,
indextemplate=’‘,
parse_node=None,
ref_nodeclass=None, objname=’‘,doc_field_types=[])
This method is a very convenient way to add a newobjecttypethat can be cross-referenced. It will do
this:
•Create anew directive (called directivename) fordocumentingan object. Itwill automaticallyadd
index entries if indextemplate is nonempty; if given, it must contain exactly one instance of %s.
Seetheexamplebelow for how the template will be interpreted.
•Create a new role (called rolename) to cross-referencetothese object descriptions.
•If you provide parse_node, it must be a function that takes a string and a docutils node, and it
must populate the node with children parsed from the string. It must then return the name of
the item to beused in cross-referencing and index entries. See the conf.py file in the source for
this documentation foran example.
•The objname (if not given, will default todirectivename) names the type of object. It is used when
listingobjects, e.g. in search results.
Forexample, ifyou have this call in a custom Sphinx extension:
app.add_object_type('directive', 'dir', 'pair: %s; directive')
you can use this markup in yourdocuments:
176
http://docutils.sourceforge.net/docs/howto/rst-directives.html
177
http://docutils.sourceforge.net/docs/howto/rst-roles.html
162
Chapter 15. Developing extensions for Sphinx
Sphinx Documentation, Release 1.4.1
.. rst:directive:: function
Document a function.
<...>
See also the :rst:dir:`function` directive.
Forthe directive, an index entrywill begenerated as if you had prepended
.. index:: pair: function; directive
The reference node will be of class literal (so it will be rendered in a proportional font, as
appropriate for code) unless you give the ref_nodeclass argument, which must be a docutils node
class. Most useful are docutils.nodes.emphasis or docutils.nodes.strong – you can
also use docutils.nodes.generated if you want no further text decoration. If the text should
be treated as literal (e.g. no smart quote replacement), but not have typewriter styling, use
sphinx.addnodes.literal_emphasis orsphinx.addnodes.literal_strong.
For the role content, you have the same syntactical possibilities as for standard Sphinx roles (see
Cross-referencing syntax).
This method is alsoavailableunderthe deprecated alias add_description_unit.
Sphinx.add_crossref_type(directivename, rolename, indextemplate=’‘, ref_nodeclass=None, obj-
name=’‘)
This method is very similar toadd_object_type() except that the directive it generates must be
empty,and will produce nooutput.
That means that you can add semantic targets to your sources, and refer to them using custom roles
instead of generic ones (likeref). Examplecall:
app.add_crossref_type('topic', 'topic', 'single: %s', docutils.nodes.emphasis)
Example usage:
.. topic:: application API
The application API
-------------------
<...>
See also :topic:`this section <application n API>`.
(Of course, the element following thetopic directiveneedn’t be a section.)
Sphinx.add_transform(transform)
Add the standard docutils Transform subclass transform to the list of transforms that are applied
after Sphinx parses a reST document.
Sphinx.add_javascript(filename)
Add filename to the list of JavaScript files that the default HTML template will include. The filename
mustberelativetotheHTML staticpath,seethe docs for the config value. AfullURIwith
scheme, likehttp://example.org/foo.js,is also supported.
New in version 0.5.
Sphinx.add_stylesheet(filename)
Add filename to the list of CSS files that the default HTML template will include. Like for
15.2. APIs used for writing extensions
163
Sphinx Documentation, Release 1.4.1
add_javascript(), the filename must berelative to the HTML staticpath, or afullURIwith
scheme.
New in version 1.0.
Sphinx.add_latex_package(packagename,options=None)
Add packagename to thelistofpackagesthat LaTeX sourcecodewill include. If you provide options, it
will betaken to usepackage declaration.
app.add_latex_package('mypackage')
# => \usepackage{mypackage}
app.add_latex_package('mypackage''foo,bar')
# => \usepackage[foo,bar]
˓→
{mypackage}
New in version 1.3.
Sphinx.add_lexer(alias,lexer)
Uselexer, which mustbean instanceof aPygments lexerclass,to highlightcodeblockswith thegiven
language alias.
New in version 0.6.
Sphinx.add_autodocumenter(cls)
Add cls asa new documenterclass forthesphinx.ext.autodoc extension. Itmustbea subclassof
sphinx.ext.autodoc.Documenter. This allows to auto-document new types of objects. See the
source of theautodoc module forexamples on how to subclassDocumenter.
New in version 0.6.
Sphinx.add_autodoc_attrgetter(type, getter)
Add getter, which must be a function with an interface compatible to the getattr() builtin, as the
autodoc attribute getterfor objects thatare instances of type. All cases where autodoc needs toget an
attribute of a typeare then handled by this function instead of getattr().
New in version 0.6.
Sphinx.add_search_language(cls)
Add cls, which must be a subclass of sphinx.search.SearchLanguage, as a support language
for building the HTML full-text search index. The class must have a lang attribute that indicates the
language it should be used for. Seehtml_search_language.
New in version 1.1.
Sphinx.add_source_parser(name, suffix,parser)
Register a parser class forspecified suffix.
New in version 1.4.
Sphinx.require_sphinx(version)
Compare version (which must bea major.minor version string, e.g. ’1.1’) with the version of the
running Sphinx, and abort the build when it is too old.
New in version 1.0.
Sphinx.connect(event, callback)
Register callback tobecalled when event is emitted. Fordetails on availablecoreevents and the argu-
ments ofcallback functions, please seeSphinxcoreevents.
The method returns a “listener ID” that can beused as an argument todisconnect().
Sphinx.disconnect(listener_id)
Unregister callback listener_id.
164
Chapter 15. Developing extensions for Sphinx
Documents you may be interested
Documents you may be interested