使用iTextSharp设置PDF版本

5

有人知道如何使用iTextSharp以编程方式将PDF保存为较低的PDF版本,以便可以使用某些需要PDF版本5或更低版本的iTextSharp功能吗?

我正在尝试合并两个PDF版本7文档,但它坚持要求它们是版本5或更低版本。

4个回答

5
///for itextSharp 5.4.4
PdfReader reader = new PdfReader(pdfPath);
PdfStamper stamper = new PdfStamper(reader, outputStream); 
stamper.Writer.setPdfVersion(PdfWriter.PDF_VERSION_1_4); 
stamper.close(); 

3

很奇怪。PDF版本大多只是一种建议。PDF必须以以下内容开头:

%PDF-1.x

当X为0、1、2……时,这只是应用程序读取PDF的线索。这是唯一的线索。我从各种客户那里看到的大多数“我需要版本X”的请求都是虚假的。我的iText同事们知道这一点,所以我觉得奇怪的是,iText正在请求不同的版本。

你确定是iText要求v5吗?

无论如何,回答你的问题:

是的,iText可以更改PDF的版本号。不幸的是,在读取PDF时不能更改版本号,只能在写出PDF时进行更改。您将不得不打开PDF,更改其版本,并再次保存它。

您可能会作弊。将PDF读入字节数组中,pdfBytes [7] = 4;,然后将这些字节传递给PdfReader

PDF规范的第1版是1.0,第2版是1.1……

因此,如果您想要PDF版本5,则需要写出“1.4”,而不是“1.5”。

如果您不熟悉这样的操作,可以解析整个PDF,更改版本,然后再次写出所有内容:

 PdfReader reader = new PdfReader(pdfPath);
 PdfStamper stamper = new PdfStamper(reader, outputStream);
 stamper.setPdfVersion(PdfWriter.PDF_VERSION_1_4);
 stamper.close();

然后您需要再次读取它,并像以前一样将其合并。


你是对的,我没有意识到我正在使用PDFSharp而不是iTextSharp。iTextSharp看起来更好,但我在这里遇到了一个问题(https://dev59.com/71jUa4cB1Zd3GeqPOyyy)。 - RichC
“多奇怪啊,PDF版本大多只是建议。” 值得明确的是——我来这里是因为我正在修补带有嵌入字体的PDF文件。Adobe拒绝呈现这些字体。我将印章机中的版本号设置为1.4,在Adobe中呈现良好。至少在那种情况下,它似乎会按照字面意思接受版本号。 - Christopher Done
同样奇怪的是,Adobe公司通常会努力修复“损坏”的PDF文件,包括那些版本号有误的文件。 - Mark Storer
我正在使用iTextSharp 5.5.9:stamper.Writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_6); 它不起作用。 - D T
自从我在7年前写下这篇答案以来,iText已经经历了几个重大版本更改。另一方面,关于SetPdfVersion()的文档现在是这样写的:“如果PDF头尚未编写,则此更改将更改其在PDF头中显示的版本。” 我怀疑您已经采取了某些措施使您的标题被编写。您可以通过将SetPdfVersion移动到您拥有PdfWriter / PdfStamp后的第一件事情来解决此问题。 - Mark Storer

0
使用以下代码: writer.PdfVersion = PdfWriter.VERSION_1_3;
这对我有用。

-1

这个链接已经失效了。这是一个很好的例子,说明为什么你不应该只提供链接,而应该将解决方案明确地写入答案中。 - Attila Csipak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接