File size: 1,167 Bytes
06f551f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import fitz # PyMuPDF
def convert_pdf_to_svg(input_pdf, output_svg, width, height):
"""
Converts a PDF to an SVG while preserving dimensions and vector data.
Args:
input_pdf (str): Path to the input PDF file.
output_svg (str): Path to save the output SVG file.
width (float): Target width in inches.
height (float): Target height in inches.
"""
doc = fitz.open(input_pdf)
svg_content = []
# DPI for the conversion (72 DPI = 1 inch)
dpi = 72
scaling_x = width * dpi / doc[0].rect.width
scaling_y = height * dpi / doc[0].rect.height
for page_num in range(len(doc)):
page = doc[page_num]
matrix = fitz.Matrix(scaling_x, scaling_y)
svg = page.get_svg_image(matrix=matrix) # Extract SVG with scaling
svg_content.append(svg)
# Wrap SVG content with specified dimensions
svg_header = f'<svg xmlns="http://www.w3.org/2000/svg" width="{width}in" height="{height}in" viewBox="0 0 {width * dpi} {height * dpi}">'
svg_footer = "</svg>"
with open(output_svg, "w") as svg_file:
svg_file.write(svg_header + "\n".join(svg_content) + svg_footer) |