回答
您很可能需要完整版Adobe Acrobat。 (与免费版本相反,Adobe Reader。)
其实我需要某种命令行工具进行批量转换或某些API能够动态转换。 – user285677 2010-08-10 15:46:10
您应该将此要求添加到问题的详细信息中。 – JYelton 2010-08-10 15:57:57
Pdf 1.1与pdf 1.4是前向兼容的。 pdf 1.1中的所有内容都将与pdf 1.4一起工作 - 它由规范保证。让我们假设你有一些合理的理由,为什么这对你来说不够好(例如,假设你有一个不符合规范的工具,它会使用PDF并在任何小于1.4的文件上爆炸)。
我们可以关注版本之间的主要语法差异。
所有的PDF文件头1024字节都有一个标头。在大多数情况下,这是第一行,但不能保证(我在看你的GhostScript!)。头看起来像这样在PDF 1.1:
%PDF-1.1
在PDF 1.4,它看起来像这样:
%PDF-1.4
所以从理论上讲,所有你需要的是一个工具,它会对着前1024个字节为“%PDF-1.1”文件并将其更改为“%PDF-1.4”。你可以使用sed,perl等来为你做这样的事情。你可以用C写,你会受到诱惑,做这样的事情:
#define PDFHEADERSIZE 1024
bool ChangeFileToNewPdfVersion(char *file)
{
char *replacePoint = NULL;
FILE *fp = fopen(file, "rw");
char buf[PDFHEADERSIZE + 1];
buf[PDFHEADERSIZE] = '\0';
if (fread(buf, 1, PDFHEADERSIZE, fp) != PDFHEADERSIZE) { fclose(fp); return false; }
fseek(fp, 0, SEEK_SET);
if ((replacePoint = strstr(buf, "%PDF-1.1")) == NULL) { fclose(fp); return false; }
replacePoint[7] = '4';
if (fwrite(buf, 1, PDFHEADERSIZE, fp) != PDFHEADERSIZE) { fclose(fp); return false; }
fflush(fp);
fclose(fp);
return;
}
将工作在大多数情况下,明智的。如果文件启动,它将不起作用,例如,0字节将用作数据块中的空终止符。
一个更好的选择(真的)会是拼凑一个简单的状态机来找到%PDF-1。通过一次读取1个字节,直到它找到它或传递1017(1024减去标题长度),然后读取下一个字节,如果它是'1',则追回一个字节并写入'4'。
您需要担心的唯一其他事情是PDF 1.4建议文档目录应该包含带有文件版本的版本密钥。由于在规范中将其定义为可选,因此您可以放心地忽略它。
所以这会解决你的问题。然而,我不认为你应该这样做。真。
您应该花些时间阅读部分PDF规范,特别是关于版本号和兼容性的第I.2节。
Adobe规范包含以下实现注意事项: 14.Acrobat查看器也接受 %的表头!PS-Adobe-N.n PDF-M。m 也可能值得去寻找这种形式。 – Bobrovsky 2010-08-11 18:38:33
- 1. 将事件从.net 1.1转换为.net 2.0或更高版本
- 2. 将PDF从servlet转换为旧版本?
- 3. ImageMagick从图像创建PDF版本1.4?
- 4. 如何用boto3将botocore1.2.6升级到1.4或更高版本?
- 5. 编辑PDF的更高的版本比1.4 Zend_Pdf
- 6. Cassandra 3.0及更高版本需要Java 8u40或更高版本
- 7. 将MahApps.Metro从版本0.13.1更新到更高版本
- 8. WiFi Direct为Android 2.3或更高版本
- 9. 使用Xcode 6或更高版本或Application Loader 2.9.1或更高版本提交您的版本
- 10. 在安装j2se 1.4或更高版本时遇到问题
- 11. 如何将熊猫从版本0.17.1升级到更高版本?
- 12. 如何将项目从Framework版本2.0重建到版本1.1?
- 13. 将J2EE 1.3应用程序转换为Java EE 5或更高版本
- 14. 如何将程序的openmp版本转换为pthreads版本?
- 15. 将curl_version()转换为版本字符串的24位版本号
- 16. Qt SDK版本1.0和版本1.1
- 17. 此版本的cli只与角度版本2.3.1或更高版本兼容
- 18. Android Studio 3.0“JUnit版本3.8或更高版本”
- 19. 错误:此版本的PyQt5需要sip 4.19.1或更高版本
- 20. Assembly'Microsoft.SqlServer.Types'版本10或更高版本无法找到
- 21. 配置:错误:APR-util的版本1.2.0或更高版本
- 22. android SDK需要ADT版本23.0.0或更高版本
- 23. Capybara-webkit QtGui需要版本29.0.0或更高版本
- 24. 将URL转换为JSON版本?
- 25. 将Subversion版本库转换为CVS
- 26. 如何将Cordova WebView更新至其最新版本(版本4.1.1或更高版本)。
- 27. 将文本转换为PDF
- 28. 将PDF文本转换为更高质量
- 29. symfony 1.4 - 更改PHP的版本
- 30. 将JDK版本从1.8更改为1.6
你能描述一下你为什么需要这个吗? 1.1与所有Acrobat版本兼容。 – plinth 2010-08-10 17:55:00
没有关于这种转换目标的更多细节,这个问题完全不清楚。 – Bobrovsky 2010-08-10 21:08:22
目标非常简单。将pdf从版本1.1转换为1.4 – user285677 2010-08-11 09:18:38