| 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. |
| """ |
| try: |
| 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) |
| except Exception as e: |
| raise ValueError(f"Error converting PDF to SVG: {str(e)}") |
|
|