当前位置: 首页 > news >正文

用Python插入SVG到PDF文档

将SVG(可缩放矢量图形)文件插入到PDF(便携式文档格式)文件中不仅能够保留SVG图像的矢量特性,确保图像在任何分辨率下都保持清晰,还能够充分利用PDF格式在跨平台文档分享方面的优势,使得技术文档、手册、报告等内容更加丰富多样且易于传播。使用Python可以轻松实现SVG到PDF的插入。本文将介绍如何使用Python插入SVG文件到PDF文档中

文章目录

    • 用Python插入SVG到PDF页面
    • 用Python将SVG作为附件嵌入PDF
    • 用Python将SVG作为附件注释嵌入PDF

本文所使用的方法需要用到Spire.PDF for Python,PyPI:pip install Spire.PDF

用Python插入SVG到PDF页面

我们可以PdfDocument.LoadFromFile()方法载入并读取SVG文件内容,然后使用PdfPageBase.Canvas.Draw()方法将其绘制在PDF页面上来实现插入SVG文件内容到PDF页面上。以下是详细操作步骤:

  1. 导入所需模块。
  2. 创建PdfDocument对象并使用PdfDocument.LoadFromFile()方法载入PDF文件。
  3. 创建另一个PdfDocument对象并使用PdfDocument.LoadFromFile()方法载入SVG文件。
  4. 使用PdfDocument.Pages.get_Item(0).CreateTemplate()方法读取SVG文件内容创建模板。
  5. 使用PdfDocument.Pages.get_Item().Canvas.DrawTemplate()方法将SVG文件内容绘制在PDF页面上。
  6. 使用PdfDocument.SaveToFile()方法保存文档。
  7. 释放资源。

代码示例

from spire.pdf import PdfDocument, PointF, SizeF, FileFormat# 创建PdfDocument实例并加载PDF文件
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")# 创建另一个PdfDocument实例并加载SVG文件
svg = PdfDocument()
svg.LoadFromFile("图表.svg", FileFormat.SVG)# 创建SVG文件的模板
svgTemplate = svg.Pages.get_Item(0).CreateTemplate()# 在现有PDF文件的页面上绘制模板
pdf.Pages.get_Item(0).Canvas.DrawTemplate(svgTemplate, PointF(60.0, 420.0), SizeF(490.0, 230.0))# 保存PDF文件
pdf.SaveToFile("output/绘制SVG到PDF.pdf")
pdf.Dispose()

结果
Python绘制SVG到PDF页面

用Python将SVG作为附件嵌入PDF

我们还可以将SVG文件作为附件直接嵌入到PDF文档中,浏览文档时点击附件即可查看SVG文件内容。需要注意的是,直接嵌入的附件只会在PDF查看器的附件栏显示。以下是详细操作步骤:

  1. 导入所需模块。
  2. 创建PdfDocument对象并使用PdfDocument.LoadFromFile()方法载入PDF文档。
  3. 创建PdfAttachment对象以创建一个附件。
  4. 创建Stream对象,将SVG文件载入为流。
  5. 使用Stream.ToArray()方法将SVG文件流转换为字节数组,并通过PdfAttachment.Data属性将其设置为附件的数据。
  6. 通过PdfAttachment.DescriptionPdfAttachment.MimeType属性设置附件的说明和MIME类型。
  7. 使用PdfDocument.Attachments.Add()方法将附件添加到PDF文档中。
  8. 使用PdfDocument.SaveToFile()方法保存文档。
  9. 释放资源。

代码示例

from spire.pdf import PdfDocument, Stream, PdfAttachment# 创建PdfDocument实例并加载PDF文件
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")# 创建PdfAttachment实例
svgAttachment = PdfAttachment("图表.svg")# 加载SVG文件为流
svgStream = Stream("图表.svg")# 设置SVG流作为附件数据
svgAttachment.Data = svgStream.ToArray()# 设置附件描述和MIME类型
svgAttachment.Description = "这是一个SVG文件"
svgAttachment.MimeType = "image/svg+xml"# 将附件添加到文档中
pdf.Attachments.Add(svgAttachment)# 保存文档
pdf.SaveToFile("output/插入SVG附件到PDF.pdf")
pdf.Dispose()

结果
Python插入SVG附件到PDF

用Python将SVG作为附件注释嵌入PDF

除了将SVG文件直接作为附件嵌入到PDF文档中,我们还可以将SVG文件作为注释的附件嵌入到PDF文档中,从而在文档页面上提示附件信息。注释附件能够在页面上显示为图表,并且能够直接点击进行查看。以下是详细操作步骤:

  1. 导入所需模块。
  2. 创建PdfDocument对象并使用PdfDocument.LoadFromFile()方法载入PDF文档。
  3. 使用SVG文件创建一个PdfAttachmentAnnotation对象从而创建一个附件注释。
  4. 使用PdfAttachmentAnnotation类下的属性设置注释格式。
  5. 使用PdfPageBase.AnnotationsWidget.Add()方法将附件注释添加到PDF页面上。
  6. 使用PdfDocument.SaveToFile()方法保存PDF文档。
  7. 释放资源。

代码示例

from spire.pdf import PdfDocument, PdfAttachmentAnnotation, RectangleF, Color, PdfAnnotationFlags, PdfAttachmentIcon, \PdfRGBColor# 创建PdfDocument实例并加载PDF文件
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")# 创建PdfAttachmentAnnotation实例
rect = RectangleF.FromLTRB(90.0, 420.0, 120.0, 450.0)
svgAnnotation = PdfAttachmentAnnotation(rect, "图表.svg")# 设置注释属性
svgAnnotation.Color = PdfRGBColor(Color.get_Blue())
svgAnnotation.Flags = PdfAnnotationFlags.NoZoom
svgAnnotation.Icon = PdfAttachmentIcon.Graph
svgAnnotation.Text = "SVG图表"# 将注释添加到第一页
pdf.Pages.get_Item(0).AnnotationsWidget.Add(svgAnnotation)# 保存文档
pdf.SaveToFile("output/插入SVG附件注释到PDF.pdf")
pdf.Dispose()

结果
Python插入SVG附件注释到PDF

本文介绍了如何使用Python将SVG文件插入到PDF文档中,包括直接将SVG文件内容插入到PDF页面和将SVG文件作为附件嵌入到PDF文档中。

更多PDF文档处理技巧请前往Spire.PDF for Python教程查看。

申请免费License

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • WindowManager的使用
  • Django 后端架构开发:高效日志规范与实践
  • 85.游戏改造-修改UI分辨率,面向对象方式
  • Android自定义一个带背景的圆环形进度条(Kotlin)
  • 如何解决大数据背景下的数据治理挑战
  • Oracle PL/SQL存储过程和函数简单示例
  • AI工具革新:国内外设计艺术的融合
  • WRF-LES与PALM微尺度气象大涡模拟
  • 鸿蒙内核源码分析(Fork篇) | 一次调用,两次返回
  • QT 文件
  • AI视频创作原理
  • 3-4 STM32F405--定时器输入捕获
  • 【机器学习】3. 欧式距离,曼哈顿距离,Minkowski距离,加权欧式距离
  • 【Python】FastAPI:路径操作
  • 【图像去雨】MPRNet:性能炸裂!MPRNet:多阶段渐进式图像恢复(图像去雨、去模糊、去噪)
  • 「译」Node.js Streams 基础
  • Computed property XXX was assigned to but it has no setter
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • java中的hashCode
  • Js基础知识(一) - 变量
  • JS数组方法汇总
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • node入门
  • Promise初体验
  • text-decoration与color属性
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue-router 实现分析
  • vuex 笔记整理
  • 大整数乘法-表格法
  • 动态魔术使用DBMS_SQL
  • 分布式事物理论与实践
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 我与Jetbrains的这些年
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 异步
  • 译自由幺半群
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • No resource identifier found for attribute,RxJava之zip操作符
  • Android开发者必备:推荐一款助力开发的开源APP
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • #define
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (23)Linux的软硬连接
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (小白学Java)Java简介和基本配置
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .gitignore文件忽略的内容不生效问题解决
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布