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)