使用iTextSharp设置PDF版本
有人知道如何使用iTextSharp以编程方式将PDF保存为较低版本的PDF,以便您可以使用某些要求PDF为版本5或更低版本的iTextSharp功能吗使用iTextSharp设置PDF版本,pdf,itextsharp,Pdf,Itextsharp,有人知道如何使用iTextSharp以编程方式将PDF保存为较低版本的PDF,以便您可以使用某些要求PDF为版本5或更低版本的iTextSharp功能吗 我正试图将两个PDF版本7文档合并在一起,但它坚持认为它们是版本5或更低版本。真奇怪。PDF版本主要是一个建议。PDF必须从以下内容开始: %PDF-1.x 其中X为0,1,2 这只是阅读PDF的应用程序的一个线索。唯一的线索。我从各种客户那里看到的大多数“我需要X版”请求都是假的。我的iText程序员同事们都知道这一点,所以我感到奇怪的是,
我正试图将两个PDF版本7文档合并在一起,但它坚持认为它们是版本5或更低版本。真奇怪。PDF版本主要是一个建议。PDF必须从以下内容开始:
%PDF-1.x
其中X为0,1,2
这只是阅读PDF的应用程序的一个线索。唯一的线索。我从各种客户那里看到的大多数“我需要X版”请求都是假的。我的iText程序员同事们都知道这一点,所以我感到奇怪的是,iText要求一个不同的版本
你确定它是iText吗
无论如何,要回答您的问题:
是的,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();
然后你再把它读一遍,然后按原样把它合并起来。看起来这不再有效,好吧,至少对我来说它不起作用了。然而,我发现了这一点,它对我起了作用:。使用这个: writer.PdfVersion=PdfWriter.VERSION_1_3
这对我很有用你写的,我不知道我用的是PDFSharp而不是iTextSharp。iTextSharp看起来好多了,但我有一个问题,“多奇怪的.PDF版本主要是一个建议。”这似乎值得明确一点——我来这里是因为我用嵌入式字体修补PDF。Adobe拒绝呈现这些字体。我将母版中的版本号设置为1.4,并且在Adobe中呈现良好。看起来至少在这种情况下,它从字面上理解了这个版本。也很奇怪。Adobe倾向于努力修复“损坏”的PDF,包括版本号不正确的PDF;自从我在7年多前写下这个答案以来,iText已经经历了几个主要的版本更改。OTOH,SetPdfVersion()上的文档现在显示为“如果尚未写入PDF标题,则会更改PDF标题中显示的版本。”。我怀疑你已经做了一些事情导致你的标题被写入。您可以通过移动SetPdfVersion来修复此问题,因此这是您拥有PdfWriter/PdfStamp后首先要做的事情。
///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();