使用 Go 语言将 Base64 编码转换为 PDF 文件

news2024/11/15 8:48:25

使用Go语言将PDF文件转换为Base64编码-CSDN博客文章浏览阅读104次,点赞2次,收藏5次。本文介绍了如何使用 Go 语言将 PDF 文件转换为 Base64 编码,并保存到文件中。https://blog.csdn.net/qq_45519030/article/details/141224319

在现代编程中,数据转换和解码是常见的需求。本文将介绍如何使用 Go 语言将 Base64 编码转换为 PDF 文件,并将结果保存到指定路径。我们将详细讲解代码的实现过程,并探讨其应用场景和优势。

背景

Base64 编码是一种常见的数据编码方式,广泛应用于数据传输和存储。在某些场景下,我们需要将 Base64 编码的数据还原为原始文件,例如将 Base64 编码的 PDF 文件转换为可读的 PDF 文件。

代码解析

  1. 导入必要的包

    import (
    	"encoding/base64"
    	"fmt"
    	"io/ioutil"
    	"os"
    )
    

    • encoding/base64:用于 Base64 编码和解码。
    • fmt:用于格式化输出。
    • io/ioutil:用于读取和写入文件。
    • os:用于处理命令行参数和文件操作。
  2. 检查命令行参数

    if len(os.Args) < 3 {
    	fmt.Println("请提供Base64文件的绝对路径和PDF文件的保存路径")
    	return
    }
    

    这段代码检查用户是否提供了 Base64 文件的绝对路径和 PDF 文件的保存路径。如果没有提供,程序将输出提示信息并退出。

  3. 读取 Base64 编码文件

    base64Path := os.Args[1]
    base64Data, err := ioutil.ReadFile(base64Path)
    if err != nil {
    	fmt.Printf("读取Base64文件失败: %v\n", err)
    	return
    }
    

    使用 ioutil.ReadFile 函数读取指定路径的 Base64 编码文件内容。如果读取失败,程序将输出错误信息并退出。

  4. 解码 Base64 数据

    pdfData, err := base64.StdEncoding.DecodeString(string(base64Data))
    if err != nil {
    	fmt.Printf("解码Base64数据失败: %v\n", err)
    	return
    }
    

    使用 base64.StdEncoding.DecodeString 函数将读取的 Base64 字符串解码为原始的 PDF 数据。如果解码失败,程序将输出错误信息并退出。

  5. 保存PDF文件

    pdfPath := os.Args[2]
    err = ioutil.WriteFile(pdfPath, pdfData, 0644)
    if err != nil {
    	fmt.Printf("写入PDF文件失败: %v\n", err)
    	return
    }
    

    使用 ioutil.WriteFile 函数将解码后的 PDF 数据写入到指定路径的 PDF 文件中。如果写入失败,程序将输出错误信息并退出。

  6. 输出成功信息

    fmt.Println("Base64编码已成功转换为PDF文件并保存到指定路径")
    

    如果一切顺利,程序将输出成功信息。

使用方法

  1. 将上述代码保存为一个 .go 文件,例如 base64ToPdf.go
  2. 在命令行中运行该程序,并提供 Base64 文件的绝对路径和 PDF 文件的保存路径作为参数。例如:
    go run base64ToPdf.go /absolute/path/to/your/base64.txt /absolute/path/to/save/your/file.pdf
    

 代码实现

以下是一个完整的 Go 语言程序,它可以将指定路径的 Base64 编码文件转换为 PDF 文件,并将结果保存到用户指定的路径。

package main

import (
	"encoding/base64"
	"fmt"
	"io/ioutil"
	"os"
)

func main() {
	if len(os.Args) < 3 {
		fmt.Println("请提供Base64文件的绝对路径和PDF文件的保存路径")
		return
	}

	base64Path := os.Args[1]
	pdfPath := os.Args[2]

	base64Data, err := ioutil.ReadFile(base64Path)
	if err != nil {
		fmt.Printf("读取Base64文件失败: %v\n", err)
		return
	}

	pdfData, err := base64.StdEncoding.DecodeString(string(base64Data))
	if err != nil {
		fmt.Printf("解码Base64数据失败: %v\n", err)
		return
	}

	err = ioutil.WriteFile(pdfPath, pdfData, 0644)
	if err != nil {
		fmt.Printf("写入PDF文件失败: %v\n", err)
		return
	}

	fmt.Println("Base64编码已成功转换为PDF文件并保存到指定路径")
}

应用场景

  • 数据还原:在数据传输或存储过程中,Base64 编码常用于确保数据的完整性和兼容性。将 Base64 编码还原为原始文件是数据处理的重要步骤。
  • 文件转换:在某些系统或平台之间交换数据时,Base64 编码可以简化文件的传输和存储。将 Base64 编码转换为原始文件是实现数据交换的关键。
  • 数据处理:在数据处理和分析过程中,有时需要将 Base64 编码的数据还原为可读的文件格式,以便进一步处理和分析。

总结

本文介绍了如何使用 Go 语言将 Base64 编码转换为 PDF 文件,并保存到指定路径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2048091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一、前后端分离通用权限系统(1)

&#x1f33b;&#x1f33b; 目录 一、项目介绍1.1 项目简介1.1.1 项目特色1.1.2 项目背景1.1.3 前置知识1.1.4 项目大纲 1.2 项目详细介绍1.2.1 介绍1.2.2 核心技术1.2.3 项目模块1.2.4 数据库设计 二、搭建环境2.1、搭建项目结构2.1.1、搭建父工程 gansu-auth-parent2.1.2、搭…

Unity 求坐标点在扇形区域内的投影

视频效果&#xff1a; 代码: /// <summary>/// 投影在扇形区域内的点/// </summary>/// <param name"targetPos">目标点</param>/// <param name"fanRadius">扇形半径</param>/// <param name"fanAngle"…

企业为什么需要安装加密软件

1. 数据保护 防止数据泄露&#xff1a;加密软件通过对敏感数据进行加密处理&#xff0c;确保即使数据在传输或存储过程中被截获&#xff0c;也无法被未授权人员读取或利用&#xff0c;从而有效防止数据泄露。 完整性保护&#xff1a;加密不仅保护数据的机密性&#xff0c;还通…

Vue3+ElementPlus,侧边栏菜单折叠时,图标不显示踩坑笔记

问题如下&#xff1a; 折叠前&#xff1a; 折叠后&#xff1a; 一般有三个问题&#xff0c;会导致这个错误&#xff1a; 排查1 动态图标渲染时&#xff0c;要写el-icon&#xff0c;否则也是不显示的 排查2 嵌套路由需要写在插槽里面&#xff0c;不是嵌套路由则需要写在插…

Ubuntu中服务部署

Ubuntu中服务部署 一、root用户密码一、SSH远程连接二、JDK1.8安装1、解压上传的安装包2、配置jdk环境变量 三、minio安装1、官网下载安装包2、上传文件并授权3、书写启动脚本4、启动及说明5、启动异常 四、nacos安装1、下载上传安装包&#xff0c;并解压2、修改启动脚本3、配置…

【网络安全】重置密码token泄露,实现账户接管

未经许可&#xff0c;不得转载。 文章目录 正文 正文 对某站点测试过程中&#xff0c;登录账户触发忘记密码功能点&#xff0c;其接口、请求及响应如下&#xff1a; PUT /api/v1/people/forgot_password 可以看到&#xff0c;重置密码token和密码哈希均在响应中泄露。 删除co…

openharmony 南向开发基础:ohos自定义子系统,自定义部件,调用hilog部件,hilog日志封装傻瓜式教程

openharmony 南向开发基础:ohos自定义子系统,自定义部件,调用hilog部件,hilog日志封装 自定义单部件 关于开源鸿蒙的南向教程不多,很多都是从官方文档上抄的的例子,官网的例子不是很适合入门,写的很粗糙,不适合傻瓜阅读,毕竟对于刚入行鸿蒙的新手而言,gn语法就是第一劝退魔咒…

TinaSDKV2.0 Kernel基本开发

TinaSDKV2.0 Kernel基本开发 Tina-SDK Linux系统启动流程&#xff1a; Linux Kerenl目录结构 设备树配置文件位置 100ASK_T113s3-Industrial-DevKit开发板LinuxKernel配置文件&#xff1a; device/config/chips/t113/configs/100ask/linux/config-5.4 100ASK_T113s3-Industr…

学习笔记--算法(滑动窗口)9

长度最小的子数组 链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a;给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0…

高性能日志系统 性能测试

百万并发压测 测试环境 云服务器环境 2核2G 2M Linux华为云服务器Ubuntu系统本地电脑环境 处理器&#xff1a;AMD Ryzen 7 4800H with Radeon Graphics2.90 GHz已安装的内存(RAM):16.0GB(15.4GB可用)系统类型&#xff1a;64位操作系统&#xff0c;基于x64的处理器 测试结果 响应…

软件工程造价师习题练习 5

1.下面哪项是EO的主要目的&#xff08; &#xff09; A. 改变应用行为 B. 维护一个或多个ILFs C. 呈现信息给用户 D. 执行数学公式和计算 外部输出&#xff08;EO&#xff09;是发送数据或控制信息到边界外部的基本过程&#xff0c;与EQ相比还包含了额外的处理逻辑。EO的主…

TypeError: Cannot read properties of undefined (reading ‘scrollIntoView‘)(已解决)

问题复现&#xff1a;眨眼睛使用vitevue3实现跳转dom功能时使用了scrollIntoView方法&#xff0c;在打包上传以后使用该功能报错 小友可能会陷入误区&#xff0c;以为是函数方法有问题&#xff0c;毕竟在开发时是没有问题的&#xff0c; 而实际上呢问题出在获取节点失败了 在这…

企业级批量无人值守安装

企业级批量无人值守安装 一、批量无人值守安装1.简介PXE工作流程 2.核心技术&#xff08;dhcp、httpd、tftp&#xff09;3.实验3.1 准备环境3.2 防护关闭3.3 软件安装3.4 软件配置DHCP服务设置httpd服务配置tftp服务配置 3.5 编写引导安装相关文件&#xff0c;放到指定位置3.5.…

基于SpringCloud的能源管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码

介绍 适用于高能耗企业、建筑、工厂、园区的水、电、气、热、油、空压机等能源数据采集、分析、报表&#xff1b; 基于SpringCloud的能源管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码 软件架构 软件功能 数字大屏 使用说明

关于鸣潮启动器450张图片杂谈—从代码分析为何使用帧动画

关于鸣潮启动器450张图片杂谈—从代码分析为何使用帧动画 前言 在鸣潮启动器的目录下 Wuthering Waves\kr_game_cache\animate_bg\99de27ae82e3c370286fba14c4fcb699打开该目录发现有450张图片&#xff0c;不难看出启动器的背景动画是由这450张图片不断切换实现的 qt框架 从…

小白公式量化--用Python指标公式模块做量化策略研究

《小白公式量化系统》是纯Python开发的&#xff0c;因此我们可以借用《小白公式量化系统》的金融模块&#xff0c;来实现自己的Python量化框架&#xff0c;以及用Python实现量化研究、选股、人工智能机器学习&#xff0c;以及打造自己的行情软件和量化平台。我们后面文章讲介绍…

【大模型从入门到精通27】开源库框架LangChain 语义搜索:高级检索策略1

这里写目录标题 语义搜索&#xff1a;高级检索策略简介最大边际相关性 (MMR)自我查询检索上下文压缩增强语义搜索的高级文档检索技术引言设置环境导入必要的库初始化向量数据库以进行相似性搜索导入 Chroma 向量存储库和 OpenAI 嵌入 填充向量数据库定义文本列表以填充数据库创…

基于YOLOv8-pose的手部关键点检测(3)- 实现实时手部关键点检测

目录 前言 1.扩大检测框区域 2.先检测手部&#xff0c;后检测手部关键点 3.正面视角检测 4.侧面视角检测 5.摄像头视角检测 6.遮挡视角检测 7.结论 前言 使用YOLOv8-m对图像进行手部检测&#xff0c;然后扩大检测框区域&#xff0c;并对该区域使用YOLOv8-s-pose使用关键…

达梦数据库版本介绍

达梦数据库根据不同用户的不同需求&#xff0c;提供了三种版本的数据库&#xff1a;DM Standard Edition 标准版、DM Enterprise Edition 企业版、DM Security Edition 安全版。那么这三种版本有什么区别&#xff0c;我们该如何选择合适的版本&#xff1f;下面先介绍三种版本各…

【笔记】泰山派环境配置遇到E: Unable to locate package repo

答案来自通义千问&#xff0c;解决了我的问题&#xff0c;做一些记录 你尝试在Ubuntu或Debian系统上使用apt命令安装repo工具&#xff0c;但是遇到了问题&#xff0c;因为repo不是直接在软件源中作为一个独立的包提供的。repo是Google的一个Git仓库管理工具&#xff0c;通常用…