使用iTextSharp设置PDF版本

Ric*_*chC 4 pdf itextsharp

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

我正在尝试将两个PDF版本7文档合并在一起,它坚持认为它们是版本5或更低版本.

小智 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(); 
Run Code Online (Sandbox Code Playgroud)


Mar*_*rer 3

多么奇怪啊。PDF 版本主要是建议。PDF 必须以以下内容开头:

%PDF-1.x
Run Code Online (Sandbox Code Playgroud)

其中 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();
Run Code Online (Sandbox Code Playgroud)

然后,您可以再次读入它,并按照以前的方式将其组合起来。