gpt4 book ai didi

c++ - 如何将pdf文件存储为二进制文件

转载 作者:太空狗 更新时间:2023-10-29 21:24:12 24 4
gpt4 key购买 nike

我正在从事一个使用 PDF 模板的项目。

我想知道是否可以将 PDF 文件存储为二进制文件,然后在稍后阶段从二进制数据重新创建 PDF?

我希望这可以帮助节省空间,而不是必须将 PDF 文件附加到项目中,将其作为数据存储就足够了。

任何对解决方案的见解都将不胜感激。

提前致谢

最佳答案

我非常怀疑你会在上面节省任何空间,因为你需要一些代码来“取消存储”PDF 数据——它可能不会占用太多空间,但它可能会占用一些字节你的可执行文件。除此之外,PDF 已经被压缩,因此您不会从任何形式的压缩或您可能会想到使用的某些压缩中获得太多好处。

一个关于“某物能变小多少”的简单实验是将它打包成一个 zip 文件。如果事实证明它的大小相同或稍大,那么它已经被压缩了。

使用某种“二进制转储”程序(可能需要编写一些代码,或拼凑一个脚本,或两者兼而有之),您可以通过使用类似这样的东西在程序中拥有一个大的二进制 blob:

数据字节(十六进制 - 只是一个示例,不是 PDF):

 01 3E 78 28 41 FF EE AA ... 

C/C++ 风格的数据:

 unsigned char data[] =
"\001>x(A\377\356\252";

长行可以/必须拆分,像这样:L

 unsigned char data[] =
"\001>x(A\377"
"\356\252";

您可能会发现这不起作用,因为编译器对字符串的大小有最大限制——大多数现代编译器将这个限制设置得相当高,但标准没有(从内存来看,字符串的大小约为 8KB常量),并且如果您使用高警告级别进行编译,编译器可能会警告“此字符串可能不适用于所有编译器”或类似的内容。

根据值的组合,它可能更好:

 unsigned char data[] = 
{ 1, 62, 120, 40, 255, 238, 170 };

(从资源大小的角度来看,空格不是必需的,因此通过删除它们可以使代码更小 - 至少 20%。为了便于阅读,我保留了它们)

您必须进行试验才能找到更有效的方法。但不管是哪个,都会比原文多占一些篇幅。如果它主要是文本,则不会大很多。如果它是“真正的二进制数据”,它会明显更大。

一个快速谷歌发现这个: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka10382.html它似乎链接到一个程序,该程序执行“二进制到 C 数据”的翻译。

将二进制数据提取到无符号字符数组中的代码:

#include <fstream>
#include <iostream>
#include <iomanip>
#include <cstdlib>

void usage()
{
std::cerr << "bintoc infile outfile" << std::endl;
}

int main(int argc, char **argv)
{
if (argc != 3)
{
std::cerr << "Incorrect number of arguments..." << std::endl;
usage();
exit(1);
}

std::ifstream in(argv[1], std::ios::binary);
std::ofstream out(argv[2]);


if (!in)
{
std::cerr << "Could not open " << argv[1] << std::endl;
exit(1);
}

if (!out)
{
std::cerr << "Could not open " << argv[1] << std::endl;
exit(1);
}

unsigned char buffer[16];

out << "unsigned char data[] = " << std::endl << "{" << std::endl;;
while(in.read(reinterpret_cast<char *>(buffer), sizeof(buffer)))
{
for(int i = 0; i < in.gcount(); i++)
{
out << std::setw(3) << static_cast<unsigned int>(buffer[i]) << ", ";
}
out << std::endl;
}
out << "};" << std::endl;

return 0;
}

关于c++ - 如何将pdf文件存储为二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16769162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com