summaryrefslogtreecommitdiffstats
path: root/docs/common_use_cases.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/common_use_cases.rst')
-rw-r--r--docs/common_use_cases.rst182
1 files changed, 182 insertions, 0 deletions
diff --git a/docs/common_use_cases.rst b/docs/common_use_cases.rst
new file mode 100644
index 0000000..45e2d3d
--- /dev/null
+++ b/docs/common_use_cases.rst
@@ -0,0 +1,182 @@
+Common Use Cases
+================
+
+pydyf has been created for WeasyPrint and many common use cases can thus be
+found in `its repository`_.
+
+.. _its repository: https://github.com/Kozea/WeasyPrint
+
+
+Draw rectangles and lines
+-------------------------
+
+.. code-block:: python
+
+ import pydyf
+
+ document = pydyf.PDF()
+
+ draw = pydyf.Stream()
+
+ # Draw a first rectangle
+ # With the border in dash style
+ # The dash line is 2 points full, 1 point empty
+ # And the dash line begins with 2 full points
+ draw.rectangle(100, 100, 50, 70)
+ draw.set_dash([2, 1], 0)
+ draw.stroke()
+
+ # Draw a second rectangle
+ # The dash is reset to a full line
+ # The line width is set
+ # Move the bottom-left corner to (80, 80)
+ # Fill the rectangle
+ draw.rectangle(50, 50, 20, 40)
+ draw.set_dash([], 0)
+ draw.set_line_width(10)
+ draw.transform(1, 0, 0, 1, 80, 80)
+ draw.fill()
+
+ # Add the stream with the two rectangles into the document
+ document.add_object(draw)
+
+ # Add a page to the document containing the draw
+ document.add_page(pydyf.Dictionary({
+ 'Type': '/Page',
+ 'Parent': document.pages.reference,
+ 'Contents': draw.reference,
+ 'MediaBox': pydyf.Array([0, 0, 200, 200]),
+ }))
+
+ # Write to document.pdf
+ with open('document.pdf', 'wb') as f:
+ document.write(f)
+
+Add some color
+--------------
+
+.. code-block:: python
+
+ import pydyf
+
+ document = pydyf.PDF()
+
+ draw = pydyf.Stream()
+
+ # Set the color for nonstroking and stroking operations
+ # Red for nonstroking an green for stroking
+ draw.set_color_rgb(1.0, 0.0, 0.0)
+ draw.set_color_rgb(0.0, 1.0, 0.0, stroke=True)
+ draw.rectangle(100, 100, 50, 70)
+ draw.set_dash([2, 1], 0)
+ draw.stroke()
+ draw.rectangle(50, 50, 20, 40)
+ draw.set_dash([], 0)
+ draw.set_line_width(10)
+ draw.transform(1, 0, 0, 1, 80, 80)
+ draw.fill()
+
+ document.add_object(draw)
+
+ document.add_page(pydyf.Dictionary({
+ 'Type': '/Page',
+ 'Parent': document.pages.reference,
+ 'Contents': draw.reference,
+ 'MediaBox': pydyf.Array([0, 0, 200, 200]),
+ }))
+
+ with open('document.pdf', 'wb') as f:
+ document.write(f)
+
+Display image
+-------------
+
+.. code-block:: python
+
+ import pydyf
+
+ document = pydyf.PDF()
+
+ extra = Dictionary({
+ 'Type': '/XObject',
+ 'Subtype': '/Image',
+ 'Width': 197,
+ 'Height': 101,
+ 'ColorSpace': '/DeviceRGB',
+ 'BitsPerComponent': 8,
+ 'Filter': '/DCTDecode',
+ })
+
+ image = open('logo.jpg', 'rb').read()
+ xobject = pydyf.Stream([image], extra=extra)
+ document.add_object(xobject)
+
+ image = pydyf.Stream()
+ image.push_state()
+ image.transform(100, 0, 0, 100, 100, 100)
+ image.draw_x_object('Im1')
+ image.pop_state()
+ document.add_object(image)
+
+ # Put the image in the resources of the PDF
+ document.add_page(pydyf.Dictionary({
+ 'Type': '/Page',
+ 'Parent': document.pages.reference,
+ 'MediaBox': pydyf.Array([0, 0, 200, 200]),
+ 'Resources': pydyf.Dictionary({
+ 'ProcSet': pydyf.Array(['/PDF', '/ImageB']),
+ 'XObject': pydyf.Dictionary({'Im1': xobject.reference}),
+ }),
+ 'Contents': image.reference,
+ }))
+
+ with open('document.pdf', 'wb') as f:
+ document.write(f)
+
+Display text
+------------
+
+.. code-block:: python
+
+ import pydyf
+
+ document = pydyf.PDF()
+
+ # Define the font
+ font = pydyf.Dictionary({
+ 'Type': '/Font',
+ 'Subtype': '/Type1',
+ 'Name': '/F1',
+ 'BaseFont': '/Helvetica',
+ 'Encoding': '/MacRomanEncoding',
+ })
+
+ document.add_object(font)
+
+ # Set the font use for the text
+ # Move to where to display the text
+ # And display it
+ text = pydyf.Stream()
+ text.begin_text()
+ text.set_font_size('F1', 24)
+ text.text_matrix(1, 0, 0, 1, 10, 90)
+ text.show_text(pydyf.String('Hello World'))
+ text.end_text()
+
+ document.add_object(text)
+
+ # Put the font in the resources of the PDF
+ document.add_page(pydyf.Dictionary({
+ 'Type': '/Page',
+ 'Parent': document.pages.reference,
+ 'MediaBox': pydyf.Array([0, 0, 200, 200]),
+ 'Contents': text.reference,
+ 'Resources': pydyf.Dictionary({
+ 'ProcSet': pydyf.Array(['/PDF', '/Text']),
+ 'Font': pydyf.Dictionary({'F1': font.reference}),
+ })
+ }))
+
+ with open('document.pdf', 'wb') as f:
+ document.write(f)
+