|
import fitz |
|
|
|
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 = 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) |
|
svg_content.append(svg) |
|
|
|
|
|
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) |